aboutsummaryrefslogtreecommitdiff
path: root/src/nvim/getchar.c
diff options
context:
space:
mode:
authorzeertzjq <zeertzjq@outlook.com>2022-04-25 21:40:46 +0800
committerzeertzjq <zeertzjq@outlook.com>2022-04-29 15:51:04 +0800
commit66747f18ded775e2c0b6bac73cee18a3752086af (patch)
treed0a25e517a61819d379115c7237080e284e90beb /src/nvim/getchar.c
parent82a13a78bb26e91d9f81231ab5e725129cfd8757 (diff)
downloadrneovim-66747f18ded775e2c0b6bac73cee18a3752086af.tar.gz
rneovim-66747f18ded775e2c0b6bac73cee18a3752086af.tar.bz2
rneovim-66747f18ded775e2c0b6bac73cee18a3752086af.zip
vim-patch:8.2.0839: dropping modifier when putting a character back in typeahead
Problem: Dropping modifier when putting a character back in typeahead. Solution: Add modifier to ins_char_typebuf(). (closes vim/vim#6158) https://github.com/vim/vim/commit/b42c0d54279b1fdb79652db0c84171e213458809 Vim's test doesn't seem to work properly as the hit-enter prompt seems to be delayed. Add a Lua screen test.
Diffstat (limited to 'src/nvim/getchar.c')
-rw-r--r--src/nvim/getchar.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/src/nvim/getchar.c b/src/nvim/getchar.c
index f92aa14c78..fbe503bcd4 100644
--- a/src/nvim/getchar.c
+++ b/src/nvim/getchar.c
@@ -1499,6 +1499,8 @@ int vgetc(void)
static size_t last_vgetc_recorded_len = 0;
mod_mask = 0;
+ vgetc_mod_mask = 0;
+ vgetc_char = 0;
// last_recorded_len can be larger than last_vgetc_recorded_len
// if peeking records more
@@ -1624,6 +1626,10 @@ int vgetc(void)
// A modifier was not used for a mapping, apply it to ASCII
// keys. Shift would already have been applied.
+ // Remember the character and mod_mask from before, in some
+ // cases they are put back in the typeahead buffer.
+ vgetc_mod_mask = mod_mask;
+ vgetc_char = c;
c = merge_modifiers(c);
// If mappings are enabled (i.e., not Ctrl-v) and the user directly typed