aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorzeertzjq <zeertzjq@outlook.com>2022-06-10 17:13:57 +0800
committerGitHub <noreply@github.com>2022-06-10 17:13:57 +0800
commite15d31b530c443daea04d7a772b24da737397c53 (patch)
treef96b0e467be8cfe832f3766a4d4062a4dc78cde7
parent6eaf10502c99e96704daa07987f73658d6c4d68a (diff)
downloadrneovim-e15d31b530c443daea04d7a772b24da737397c53.tar.gz
rneovim-e15d31b530c443daea04d7a772b24da737397c53.tar.bz2
rneovim-e15d31b530c443daea04d7a772b24da737397c53.zip
fix(input): fix macro recording with ALT and special key (#18917)
-rw-r--r--src/nvim/getchar.c1
-rw-r--r--test/functional/editor/meta_key_spec.lua23
2 files changed, 23 insertions, 1 deletions
diff --git a/src/nvim/getchar.c b/src/nvim/getchar.c
index 6b716c2e1f..9f223bf750 100644
--- a/src/nvim/getchar.c
+++ b/src/nvim/getchar.c
@@ -1007,6 +1007,7 @@ int ins_char_typebuf(int c, int modifier)
buf[len + 1] = (char_u)K_SECOND(c);
buf[len + 2] = (char_u)K_THIRD(c);
buf[len + 3] = NUL;
+ len += 3;
} else {
char_u *end = add_char2buf(c, buf + len);
*end = NUL;
diff --git a/test/functional/editor/meta_key_spec.lua b/test/functional/editor/meta_key_spec.lua
index 8efcc81616..23964ca10f 100644
--- a/test/functional/editor/meta_key_spec.lua
+++ b/test/functional/editor/meta_key_spec.lua
@@ -106,6 +106,7 @@ describe('meta-keys #8226 #13042', function()
end)
it('ALT/META when recording a macro #13235', function()
+ command('inoremap <M-Esc> <lt>M-ESC>')
feed('ifoo<CR>bar<CR>baz<Esc>gg0')
-- <M-"> is reinterpreted as <Esc>"
feed('qrviw"ayC// This is some text: <M-">apq')
@@ -113,7 +114,27 @@ describe('meta-keys #8226 #13042', function()
// This is some text: foo
bar
baz]])
- -- Should not insert an extra double quote when replaying
+ -- Should not insert an extra double quote or trigger <M-Esc> when replaying
+ feed('j0@rj0@@')
+ expect([[
+ // This is some text: foo
+ // This is some text: bar
+ // This is some text: baz]])
+ command('%delete')
+ end)
+
+ it('ALT/META with special key when recording a macro', function()
+ command('inoremap <M-Esc> <lt>M-ESC>')
+ command('noremap <S-Tab> "')
+ command('noremap! <S-Tab> "')
+ feed('ifoo<CR>bar<CR>baz<Esc>gg0')
+ -- <M-S-Tab> is reinterpreted as <Esc><S-Tab>
+ feed('qrviw<S-Tab>ayC// This is some text: <M-S-Tab>apq')
+ expect([[
+ // This is some text: foo
+ bar
+ baz]])
+ -- Should not insert an extra double quote or trigger <M-Esc> when replaying
feed('j0@rj0@@')
expect([[
// This is some text: foo