forked from aniani/vim
patch 8.1.2142: some key mappings do not work with modifyOtherKeys
Problem: Some key mappings do not work with modifyOtherKeys. Solution: Remove the Shift modifier if it is already included in the key.
This commit is contained in:
11
src/term.c
11
src/term.c
@@ -4847,8 +4847,17 @@ not_enough:
|
|||||||
else
|
else
|
||||||
key = arg[2];
|
key = arg[2];
|
||||||
|
|
||||||
// insert modifiers with KS_MODIFIER
|
|
||||||
modifiers = decode_modifiers(arg[1]);
|
modifiers = decode_modifiers(arg[1]);
|
||||||
|
|
||||||
|
// Some keys already have Shift included, pass them as
|
||||||
|
// normal keys.
|
||||||
|
if (modifiers == MOD_MASK_SHIFT
|
||||||
|
&& ((key >= '@' && key <= 'Z')
|
||||||
|
|| key == '^' || key == '_'
|
||||||
|
|| (key >= '{' && key <= '~')))
|
||||||
|
modifiers = 0;
|
||||||
|
|
||||||
|
// insert modifiers with KS_MODIFIER
|
||||||
new_slen = modifiers2keycode(modifiers, &key, string);
|
new_slen = modifiers2keycode(modifiers, &key, string);
|
||||||
slen = csi_len;
|
slen = csi_len;
|
||||||
|
|
||||||
|
@@ -909,3 +909,42 @@ endfunc
|
|||||||
func Test_modifyOtherKeys_CSIu()
|
func Test_modifyOtherKeys_CSIu()
|
||||||
call RunTest_modifyOtherKeys(function('GetEscCodeCSIu'))
|
call RunTest_modifyOtherKeys(function('GetEscCodeCSIu'))
|
||||||
endfunc
|
endfunc
|
||||||
|
|
||||||
|
func RunTest_mapping_shift(key, func)
|
||||||
|
call setline(1, '')
|
||||||
|
if a:key == '|'
|
||||||
|
exe 'inoremap \| xyz'
|
||||||
|
else
|
||||||
|
exe 'inoremap ' .. a:key .. ' xyz'
|
||||||
|
endif
|
||||||
|
call feedkeys('a' .. a:func(a:key, 2) .. "\<Esc>", 'Lx!')
|
||||||
|
call assert_equal("xyz", getline(1))
|
||||||
|
if a:key == '|'
|
||||||
|
exe 'iunmap \|'
|
||||||
|
else
|
||||||
|
exe 'iunmap ' .. a:key
|
||||||
|
endif
|
||||||
|
endfunc
|
||||||
|
|
||||||
|
func RunTest_mapping_works_with_shift(func)
|
||||||
|
new
|
||||||
|
set timeoutlen=20
|
||||||
|
|
||||||
|
call RunTest_mapping_shift('@', a:func)
|
||||||
|
call RunTest_mapping_shift('A', a:func)
|
||||||
|
call RunTest_mapping_shift('Z', a:func)
|
||||||
|
call RunTest_mapping_shift('^', a:func)
|
||||||
|
call RunTest_mapping_shift('_', a:func)
|
||||||
|
call RunTest_mapping_shift('{', a:func)
|
||||||
|
call RunTest_mapping_shift('|', a:func)
|
||||||
|
call RunTest_mapping_shift('}', a:func)
|
||||||
|
call RunTest_mapping_shift('~', a:func)
|
||||||
|
|
||||||
|
bwipe!
|
||||||
|
set timeoutlen&
|
||||||
|
endfunc
|
||||||
|
|
||||||
|
func Test_mapping_works_with_shift()
|
||||||
|
call RunTest_mapping_works_with_shift(function('GetEscCodeCSI27'))
|
||||||
|
call RunTest_mapping_works_with_shift(function('GetEscCodeCSIu'))
|
||||||
|
endfunc
|
||||||
|
@@ -753,6 +753,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 */
|
||||||
|
/**/
|
||||||
|
2142,
|
||||||
/**/
|
/**/
|
||||||
2141,
|
2141,
|
||||||
/**/
|
/**/
|
||||||
|
Reference in New Issue
Block a user