123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255 |
- local t = require('test.testutil')
- local n = require('test.functional.testnvim')()
- local Screen = require('test.functional.ui.screen')
- local eq = t.eq
- local exec = n.exec
- local exec_capture = n.exec_capture
- local feed = n.feed
- local api = n.api
- local clear = n.clear
- local command = n.command
- local expect = n.expect
- local insert = n.insert
- local eval = n.eval
- describe(':*map', function()
- before_each(clear)
- it('are not affected by &isident', function()
- api.nvim_set_var('counter', 0)
- command('nnoremap <C-x> :let counter+=1<CR>')
- api.nvim_set_option_value('isident', ('%u'):format(('>'):byte()), {})
- command('nnoremap <C-y> :let counter+=1<CR>')
- -- &isident used to disable keycode parsing here as well
- feed('\24\25<C-x><C-y>')
- eq(4, api.nvim_get_var('counter'))
- end)
- it(':imap <M-">', function()
- command('imap <M-"> foo')
- feed('i-<M-">-')
- expect('-foo-')
- end)
- it('shows <Nop> as mapping rhs', function()
- command('nmap asdf <Nop>')
- eq(
- [[
- n asdf <Nop>]],
- exec_capture('nmap asdf')
- )
- end)
- it('mappings with description can be filtered', function()
- api.nvim_set_keymap('n', 'asdf1', 'qwert', { desc = 'do the one thing' })
- api.nvim_set_keymap('n', 'asdf2', 'qwert', { desc = 'doesnot really do anything' })
- api.nvim_set_keymap('n', 'asdf3', 'qwert', { desc = 'do the other thing' })
- eq(
- [[
- n asdf3 qwert
- do the other thing
- n asdf1 qwert
- do the one thing]],
- exec_capture('filter the nmap')
- )
- end)
- it('<Plug> mappings ignore nore', function()
- command('let x = 0')
- eq(0, api.nvim_eval('x'))
- command [[
- nnoremap <Plug>(Increase_x) <cmd>let x+=1<cr>
- nmap increase_x_remap <Plug>(Increase_x)
- nnoremap increase_x_noremap <Plug>(Increase_x)
- ]]
- feed('increase_x_remap')
- eq(1, api.nvim_eval('x'))
- feed('increase_x_noremap')
- eq(2, api.nvim_eval('x'))
- end)
- it("Doesn't auto ignore nore for keys before or after <Plug> mapping", function()
- command('let x = 0')
- eq(0, api.nvim_eval('x'))
- command [[
- nnoremap x <nop>
- nnoremap <Plug>(Increase_x) <cmd>let x+=1<cr>
- nmap increase_x_remap x<Plug>(Increase_x)x
- nnoremap increase_x_noremap x<Plug>(Increase_x)x
- ]]
- insert('Some text')
- eq('Some text', eval("getline('.')"))
- feed('increase_x_remap')
- eq(1, api.nvim_eval('x'))
- eq('Some text', eval("getline('.')"))
- feed('increase_x_noremap')
- eq(2, api.nvim_eval('x'))
- eq('Some te', eval("getline('.')"))
- end)
- it(':unmap with rhs works when lhs is in another bucket #21530', function()
- command('map F <Plug>Foo')
- command('unmap <Plug>Foo')
- eq('\nNo mapping found', exec_capture('map F'))
- end)
- end)
- describe('Screen', function()
- local screen
- before_each(function()
- clear()
- screen = Screen.new(20, 5)
- end)
- it('cursor is restored after :map <expr> which calls input()', function()
- command('map <expr> x input("> ")')
- screen:expect([[
- ^ |
- {1:~ }|*3
- |
- ]])
- feed('x')
- screen:expect([[
- |
- {1:~ }|*3
- > ^ |
- ]])
- feed('\n')
- screen:expect([[
- ^ |
- {1:~ }|*3
- > |
- ]])
- end)
- it('cursor is restored after :imap <expr> which calls input()', function()
- command('imap <expr> x input("> ")')
- feed('i')
- screen:expect([[
- ^ |
- {1:~ }|*3
- {5:-- INSERT --} |
- ]])
- feed('x')
- screen:expect([[
- |
- {1:~ }|*3
- > ^ |
- ]])
- feed('\n')
- screen:expect([[
- ^ |
- {1:~ }|*3
- {5:-- INSERT --} |
- ]])
- end)
- it('cursor position does not move after empty-string :cmap <expr> #19046', function()
- command([[cnoremap <expr> <F2> '']])
- feed(':<F2>')
- screen:expect([[
- |
- {1:~ }|*3
- :^ |
- ]])
- end)
- -- oldtest: Test_expr_map_restore_cursor()
- it('cursor is restored after :map <expr> which redraws statusline vim-patch:8.1.2336', function()
- exec([[
- call setline(1, ['one', 'two', 'three'])
- 2
- set ls=2
- hi! link StatusLine ErrorMsg
- noremap <expr> <C-B> Func()
- func Func()
- let g:on = !get(g:, 'on', 0)
- redraws
- return ''
- endfunc
- func Status()
- return get(g:, 'on', 0) ? '[on]' : ''
- endfunc
- set stl=%{Status()}
- ]])
- feed('<C-B>')
- screen:expect([[
- one |
- ^two |
- three |
- {9:[on] }|
- |
- ]])
- end)
- it('error in :nmap <expr> does not mess up display vim-patch:4.2.4338', function()
- screen:try_resize(40, 5)
- command('nmap <expr> <F2> execute("throw 42")')
- feed('<F2>')
- screen:expect([[
- |
- {3: }|
- {9:Error detected while processing :} |
- {9:E605: Exception not caught: 42} |
- {6:Press ENTER or type command to continue}^ |
- ]])
- feed('<CR>')
- screen:expect([[
- ^ |
- {1:~ }|*3
- |
- ]])
- end)
- it('error in :cmap <expr> handled correctly vim-patch:4.2.4338', function()
- screen:try_resize(40, 5)
- command('cmap <expr> <F2> execute("throw 42")')
- feed(':echo "foo')
- screen:expect([[
- |
- {1:~ }|*3
- :echo "foo^ |
- ]])
- feed('<F2>')
- screen:expect([[
- {3: }|
- :echo "foo |
- {9:Error detected while processing :} |
- {9:E605: Exception not caught: 42} |
- :echo "foo^ |
- ]])
- feed('"')
- screen:expect([[
- {3: }|
- :echo "foo |
- {9:Error detected while processing :} |
- {9:E605: Exception not caught: 42} |
- :echo "foo"^ |
- ]])
- feed('\n')
- screen:expect([[
- :echo "foo |
- {9:Error detected while processing :} |
- {9:E605: Exception not caught: 42} |
- foo |
- {6:Press ENTER or type command to continue}^ |
- ]])
- end)
- -- oldtest: Test_map_listing()
- it('listing mappings clears command line vim-patch:8.2.4401', function()
- screen:try_resize(40, 5)
- command('nmap a b')
- feed(': nmap a<CR>')
- screen:expect([[
- ^ |
- {1:~ }|*3
- n a b |
- ]])
- end)
- end)
|