mirror of
https://github.com/vim/vim
synced 2025-07-16 01:01:58 +00:00
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
|
||||
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;
|
||||
|
||||
|
@ -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
|
||||
|
@ -753,6 +753,8 @@ static char *(features[]) =
|
||||
|
||||
static int included_patches[] =
|
||||
{ /* Add new patch number below this line */
|
||||
/**/
|
||||
2142,
|
||||
/**/
|
||||
2141,
|
||||
/**/
|
||||
|
Reference in New Issue
Block a user