aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorzeertzjq <zeertzjq@outlook.com>2022-01-29 06:37:44 +0800
committerGitHub <noreply@github.com>2022-01-29 06:37:44 +0800
commit1ebac3cf4e0dd814ca90382e404da477dc2b894e (patch)
tree22ad6247acd7b8dab3a58982cc50c272a8287614
parentaf9a2a201d5e2bc178488a04c114ba6c1db4fa19 (diff)
parent75f4741db92768db1db937fd4dbce15a01b65042 (diff)
downloadrneovim-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.c5
-rw-r--r--test/functional/editor/meta_key_spec.lua16
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)