fix(input): only disable mapped CTRL-C interrupts when getting input (#18310)

This commit is contained in:
zeertzjq
2022-04-30 13:11:35 +08:00
committed by GitHub
parent 7df25a1372
commit 2ba539f449
7 changed files with 112 additions and 47 deletions

View File

@@ -2,7 +2,7 @@
local helpers = require('test.functional.helpers')(after_each)
local clear, feed, insert = helpers.clear, helpers.feed, helpers.insert
local feed_command, expect, poke_eventloop = helpers.feed_command, helpers.expect, helpers.poke_eventloop
local expect, poke_eventloop = helpers.expect, helpers.poke_eventloop
local command, eq, eval, meths = helpers.command, helpers.eq, helpers.eval, helpers.meths
local sleep = helpers.sleep
@@ -15,7 +15,7 @@ describe('mapping', function()
]])
-- Abbreviations with р (0x80) should work.
feed_command('inoreab чкпр vim')
command('inoreab чкпр vim')
feed('GAчкпр <esc>')
expect([[
@@ -25,17 +25,15 @@ describe('mapping', function()
it('Ctrl-c works in Insert mode', function()
-- Mapping of ctrl-c in insert mode
feed_command('set cpo-=< cpo-=k')
feed_command('inoremap <c-c> <ctrl-c>')
feed_command('cnoremap <c-c> dummy')
feed_command('cunmap <c-c>')
command('set cpo-=< cpo-=k')
command('inoremap <c-c> <ctrl-c>')
command('cnoremap <c-c> dummy')
command('cunmap <c-c>')
feed('GA<cr>')
feed('TEST2: CTRL-C |')
-- XXX: editor must be in Insert mode before <C-C> is put into input buffer
poke_eventloop()
feed('<c-c>A|<cr><esc>')
poke_eventloop()
feed_command('unmap <c-c>')
feed_command('unmap! <c-c>')
feed('TEST2: CTRL-C |<c-c>A|<cr><esc>')
command('unmap! <c-c>')
expect([[
@@ -44,13 +42,12 @@ describe('mapping', function()
end)
it('Ctrl-c works in Visual mode', function()
feed_command([[vnoremap <c-c> :<C-u>$put ='vmap works'<cr>]])
command([[vnoremap <c-c> :<C-u>$put ='vmap works'<cr>]])
feed('GV')
-- XXX: For some reason the mapping is only triggered
-- when <C-c> is in a separate feed command.
-- XXX: editor must be in Visual mode before <C-C> is put into input buffer
poke_eventloop()
feed('<c-c>')
feed_command('vunmap <c-c>')
feed('vV<c-c>')
command('vunmap <c-c>')
expect([[
@@ -59,23 +56,23 @@ describe('mapping', function()
it('langmap', function()
-- langmap should not get remapped in insert mode.
feed_command('inoremap { FAIL_ilangmap')
feed_command('set langmap=+{ langnoremap')
command('inoremap { FAIL_ilangmap')
command('set langmap=+{ langnoremap')
feed('o+<esc>')
-- Insert mode expr mapping with langmap.
feed_command('inoremap <expr> { "FAIL_iexplangmap"')
command('inoremap <expr> { "FAIL_iexplangmap"')
feed('o+<esc>')
-- langmap should not get remapped in cmdline mode.
feed_command('cnoremap { FAIL_clangmap')
command('cnoremap { FAIL_clangmap')
feed('o+<esc>')
feed_command('cunmap {')
command('cunmap {')
-- cmdline mode expr mapping with langmap.
feed_command('cnoremap <expr> { "FAIL_cexplangmap"')
command('cnoremap <expr> { "FAIL_cexplangmap"')
feed('o+<esc>')
feed_command('cunmap {')
command('cunmap {')
-- Assert buffer contents.
expect([[
@@ -93,10 +90,10 @@ describe('mapping', function()
]])
-- Vim's issue #212 (feedkeys insert mapping at current position)
feed_command('nnoremap . :call feedkeys(".", "in")<cr>')
command('nnoremap . :call feedkeys(".", "in")<cr>')
feed('/^a b<cr>')
feed('0qqdw.ifoo<esc>qj0@q<esc>')
feed_command('unmap .')
command('unmap .')
expect([[
fooc d
fooc d
@@ -105,15 +102,15 @@ describe('mapping', function()
it('i_CTRL-G_U', function()
-- <c-g>U<cursor> works only within a single line
feed_command('imapclear')
feed_command('imap ( ()<c-g>U<left>')
command('imapclear')
command('imap ( ()<c-g>U<left>')
feed('G2o<esc>ki<cr>Test1: text with a (here some more text<esc>k.')
-- test undo
feed('G2o<esc>ki<cr>Test2: text wit a (here some more text [und undo]<c-g>u<esc>k.u')
feed_command('imapclear')
feed_command('set whichwrap=<,>,[,]')
command('imapclear')
command('set whichwrap=<,>,[,]')
feed('G3o<esc>2k')
feed_command([[:exe ":norm! iTest3: text with a (parenthesis here\<C-G>U\<Right>new line here\<esc>\<up>\<up>."]])
command([[:exe ":norm! iTest3: text with a (parenthesis here\<C-G>U\<Right>new line here\<esc>\<up>\<up>."]])
expect([[