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)
|
if (modifiers != 0)
|
||||||
{
|
{
|
||||||
// Some keys have the modifier included. Need to handle that here to
|
// 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);
|
*key = simplify_key(*key, &modifiers);
|
||||||
if (modifiers != 0)
|
if (modifiers != 0)
|
||||||
{
|
{
|
||||||
@@ -4793,7 +4794,13 @@ handle_key_with_modifier(
|
|||||||
// insert modifiers with KS_MODIFIER
|
// insert modifiers with KS_MODIFIER
|
||||||
new_slen = modifiers2keycode(modifiers, &key, string);
|
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);
|
new_slen += (*mb_char2bytes)(key, string + new_slen);
|
||||||
else
|
else
|
||||||
string[new_slen++] = key;
|
string[new_slen++] = key;
|
||||||
|
@@ -2029,6 +2029,23 @@ func Test_modifyOtherKeys_mapped()
|
|||||||
set timeoutlen&
|
set timeoutlen&
|
||||||
endfunc
|
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)
|
func RunTest_mapping_works_with_shift(func)
|
||||||
new
|
new
|
||||||
set timeoutlen=10
|
set timeoutlen=10
|
||||||
|
@@ -750,6 +750,8 @@ static char *(features[]) =
|
|||||||
|
|
||||||
static int included_patches[] =
|
static int included_patches[] =
|
||||||
{ /* Add new patch number below this line */
|
{ /* Add new patch number below this line */
|
||||||
|
/**/
|
||||||
|
1930,
|
||||||
/**/
|
/**/
|
||||||
1929,
|
1929,
|
||||||
/**/
|
/**/
|
||||||
|
Reference in New Issue
Block a user