patch 8.2.1930: wrong input if removing shift results in special key code
Problem: Wrong input if removing shift results in special key code.
Solution: Handle special key codes. (closes #7189)
diff --git a/src/term.c b/src/term.c
index 4d4cc58..56f6e0a 100644
--- a/src/term.c
+++ b/src/term.c
@@ -4462,7 +4462,8 @@
if (modifiers != 0)
{
// Some keys have the modifier included. Need to handle that here to
- // make mappings work.
+ // make mappings work. This may result in a special key, such as
+ // K_S_TAB.
*key = simplify_key(*key, &modifiers);
if (modifiers != 0)
{
@@ -4793,7 +4794,13 @@
// insert modifiers with KS_MODIFIER
new_slen = modifiers2keycode(modifiers, &key, string);
- if (has_mbyte)
+ if (IS_SPECIAL(key))
+ {
+ string[new_slen++] = K_SPECIAL;
+ string[new_slen++] = KEY2TERMCAP0(key);
+ string[new_slen++] = KEY2TERMCAP1(key);
+ }
+ else if (has_mbyte)
new_slen += (*mb_char2bytes)(key, string + new_slen);
else
string[new_slen++] = key;