diff options
author | zeertzjq <zeertzjq@outlook.com> | 2022-04-27 17:34:40 +0800 |
---|---|---|
committer | zeertzjq <zeertzjq@outlook.com> | 2022-04-29 15:51:04 +0800 |
commit | 78a7e2d55ccb589c26e45498ff501c64b0b17519 (patch) | |
tree | 44644e0ee9c88cb49fd8efd83e15e43c1c7aeb96 | |
parent | 3090648584024075c741fe1bee5d7a92d0543f23 (diff) | |
download | rneovim-78a7e2d55ccb589c26e45498ff501c64b0b17519.tar.gz rneovim-78a7e2d55ccb589c26e45498ff501c64b0b17519.tar.bz2 rneovim-78a7e2d55ccb589c26e45498ff501c64b0b17519.zip |
vim-patch:8.1.2346: CTRL-R CTRL-R doesn't work with modifyOtherKeys
Problem: CTRL-R CTRL-R doesn't work with modifyOtherKeys.
Solution: Allow key codes when fetching argument for CTRL-R. (closes vim/vim#5266)
Also fix CTRL-G in Insert mode.
https://github.com/vim/vim/commit/38571a04b4eb2853f46df8884750bcb9a8115db8
Omit test as it sends terminal codes. Use a Lua test instead.
-rw-r--r-- | src/nvim/edit.c | 24 | ||||
-rw-r--r-- | src/nvim/ex_getln.c | 4 | ||||
-rw-r--r-- | test/functional/ui/input_spec.lua | 18 |
3 files changed, 33 insertions, 13 deletions
diff --git a/src/nvim/edit.c b/src/nvim/edit.c index 076cf445cf..251f55c6e7 100644 --- a/src/nvim/edit.c +++ b/src/nvim/edit.c @@ -7817,11 +7817,10 @@ static void ins_reg(void) } - /* - * Don't map the register name. This also prevents the mode message to be - * deleted when ESC is hit. - */ - ++no_mapping; + // Don't map the register name. This also prevents the mode message to be + // deleted when ESC is hit. + no_mapping++; + allow_keys++; regname = plain_vgetc(); LANGMAP_ADJUST(regname, TRUE); if (regname == Ctrl_R || regname == Ctrl_O || regname == Ctrl_P) { @@ -7831,7 +7830,8 @@ static void ins_reg(void) regname = plain_vgetc(); LANGMAP_ADJUST(regname, TRUE); } - --no_mapping; + no_mapping--; + allow_keys--; // Don't call u_sync() while typing the expression or giving an error // message for it. Only call it explicitly. @@ -7899,13 +7899,13 @@ static void ins_ctrl_g(void) // Right after CTRL-X the cursor will be after the ruler. setcursor(); - /* - * Don't map the second key. This also prevents the mode message to be - * deleted when ESC is hit. - */ - ++no_mapping; + // Don't map the second key. This also prevents the mode message to be + // deleted when ESC is hit. + no_mapping++; + allow_keys++; c = plain_vgetc(); - --no_mapping; + no_mapping--; + allow_keys--; switch (c) { // CTRL-G k and CTRL-G <Up>: cursor up to Insstart.col case K_UP: diff --git a/src/nvim/ex_getln.c b/src/nvim/ex_getln.c index f9ce156eb2..35fd900391 100644 --- a/src/nvim/ex_getln.c +++ b/src/nvim/ex_getln.c @@ -1891,6 +1891,7 @@ static int command_line_handle_key(CommandLineState *s) case Ctrl_R: { // insert register putcmdline('"', true); no_mapping++; + allow_keys++; int i = s->c = plain_vgetc(); // CTRL-R <char> if (i == Ctrl_O) { i = Ctrl_R; // CTRL-R CTRL-O == CTRL-R CTRL-R @@ -1899,7 +1900,8 @@ static int command_line_handle_key(CommandLineState *s) if (i == Ctrl_R) { s->c = plain_vgetc(); // CTRL-R CTRL-R <char> } - --no_mapping; + no_mapping--; + allow_keys--; // Insert the result of an expression. // Need to save the current command line, to be able to enter // a new one... diff --git a/test/functional/ui/input_spec.lua b/test/functional/ui/input_spec.lua index 43b6c19b44..d137049d55 100644 --- a/test/functional/ui/input_spec.lua +++ b/test/functional/ui/input_spec.lua @@ -8,6 +8,7 @@ local meths = helpers.meths local exec_lua = helpers.exec_lua local write_file = helpers.write_file local funcs = helpers.funcs +local eval = helpers.eval local Screen = require('test.functional.ui.screen') before_each(clear) @@ -216,6 +217,23 @@ it('Ctrl-6 is Ctrl-^ vim-patch:8.1.2333', function() eq('aaa', funcs.bufname()) end) +it('c_CTRL-R_CTRL-R, i_CTRL-R_CTRL-R, i_CTRL-G_CTRL-K work properly vim-patch:8.1.2346', function() + command('set timeoutlen=10') + + command([[let @a = 'aaa']]) + feed([[:let x = '<C-R><C-R>a'<CR>]]) + eq([[let x = 'aaa']], eval('@:')) + + feed('a<C-R><C-R>a<Esc>') + expect('aaa') + command('bwipe!') + + feed('axx<CR>yy<C-G><C-K>a<Esc>') + expect([[ + axx + yy]]) +end) + it('typing a simplifiable key at hit-enter prompt triggers mapping vim-patch:8.2.0839', function() local screen = Screen.new(60,8) screen:set_default_attr_ids({ |