forked from aniani/vim
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)
This commit is contained in:
11
src/term.c
11
src/term.c
@@ -4462,7 +4462,8 @@ modifiers2keycode(int modifiers, int *key, char_u *string)
|
||||
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 @@ handle_key_with_modifier(
|
||||
// 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;
|
||||
|
@@ -2029,6 +2029,23 @@ func Test_modifyOtherKeys_mapped()
|
||||
set timeoutlen&
|
||||
endfunc
|
||||
|
||||
" Whether Shift-Tab sends "ESC [ Z" or "ESC [ 27 ; 2 ; 9 ~" is unpredictable,
|
||||
" both should work.
|
||||
func Test_modifyOtherKeys_shift_tab()
|
||||
set timeoutlen=10
|
||||
|
||||
call setline(1, '')
|
||||
call feedkeys("a\<C-K>" .. GetEscCodeCSI27("\t", '2') .. "\<Esc>", 'Lx!')
|
||||
eval getline(1)->assert_equal('<S-Tab>')
|
||||
|
||||
call setline(1, '')
|
||||
call feedkeys("a\<C-K>\<Esc>[Z\<Esc>", 'Lx!')
|
||||
eval getline(1)->assert_equal('<S-Tab>')
|
||||
|
||||
set timeoutlen&
|
||||
bwipe!
|
||||
endfunc
|
||||
|
||||
func RunTest_mapping_works_with_shift(func)
|
||||
new
|
||||
set timeoutlen=10
|
||||
|
@@ -750,6 +750,8 @@ static char *(features[]) =
|
||||
|
||||
static int included_patches[] =
|
||||
{ /* Add new patch number below this line */
|
||||
/**/
|
||||
1930,
|
||||
/**/
|
||||
1929,
|
||||
/**/
|
||||
|
Reference in New Issue
Block a user