diff options
author | zeertzjq <zeertzjq@outlook.com> | 2022-01-29 06:37:44 +0800 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-01-29 06:37:44 +0800 |
commit | 1ebac3cf4e0dd814ca90382e404da477dc2b894e (patch) | |
tree | 22ad6247acd7b8dab3a58982cc50c272a8287614 | |
parent | af9a2a201d5e2bc178488a04c114ba6c1db4fa19 (diff) | |
parent | 75f4741db92768db1db937fd4dbce15a01b65042 (diff) | |
download | rneovim-1ebac3cf4e0dd814ca90382e404da477dc2b894e.tar.gz rneovim-1ebac3cf4e0dd814ca90382e404da477dc2b894e.tar.bz2 rneovim-1ebac3cf4e0dd814ca90382e404da477dc2b894e.zip |
Merge pull request #17220 from zeertzjq/unget-alt-chord
-rw-r--r-- | src/nvim/getchar.c | 5 | ||||
-rw-r--r-- | test/functional/editor/meta_key_spec.lua | 16 |
2 files changed, 19 insertions, 2 deletions
diff --git a/src/nvim/getchar.c b/src/nvim/getchar.c index 55bcfa0e97..3e0f01852e 100644 --- a/src/nvim/getchar.c +++ b/src/nvim/getchar.c @@ -1598,8 +1598,9 @@ int vgetc(void) if (!no_mapping && KeyTyped && !(State & TERM_FOCUS) && (mod_mask == MOD_MASK_ALT || mod_mask == MOD_MASK_META)) { mod_mask = 0; - ins_char_typebuf(c, 0); - ins_char_typebuf(ESC, 0); + int len = ins_char_typebuf(c, 0); + (void)ins_char_typebuf(ESC, 0); + ungetchars(len + 3); // The ALT/META modifier takes three more bytes continue; } diff --git a/test/functional/editor/meta_key_spec.lua b/test/functional/editor/meta_key_spec.lua index f811b8ae8d..8efcc81616 100644 --- a/test/functional/editor/meta_key_spec.lua +++ b/test/functional/editor/meta_key_spec.lua @@ -104,4 +104,20 @@ describe('meta-keys #8226 #13042', function() eq({ 0, 2, 1, 0, }, funcs.getpos('.')) eq('nt', eval('mode(1)')) end) + + it('ALT/META when recording a macro #13235', function() + feed('ifoo<CR>bar<CR>baz<Esc>gg0') + -- <M-"> is reinterpreted as <Esc>" + feed('qrviw"ayC// This is some text: <M-">apq') + expect([[ + // This is some text: foo + bar + baz]]) + -- Should not insert an extra double quote when replaying + feed('j0@rj0@@') + expect([[ + // This is some text: foo + // This is some text: bar + // This is some text: baz]]) + end) end) |