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:
Bram Moolenaar
2019-10-12 18:22:50 +02:00
parent e8070987c6
commit d1e2f3984a
3 changed files with 51 additions and 1 deletions

View File

@ -4847,8 +4847,17 @@ not_enough:
else
key = arg[2];
// insert modifiers with KS_MODIFIER
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);
slen = csi_len;

View File

@ -909,3 +909,42 @@ endfunc
func Test_modifyOtherKeys_CSIu()
call RunTest_modifyOtherKeys(function('GetEscCodeCSIu'))
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

View File

@ -753,6 +753,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
2142,
/**/
2141,
/**/