mirror of
https://github.com/vim/vim.git
synced 2025-09-27 04:14:06 -04:00
patch 8.2.4504: when there is a partially matching map full map may not work
Problem: When there is a partially matching map and modifyOtherKeys is active a full map may not work. Solution: Only simplify modifiers when there is no matching mapping. (closes #8792)
This commit is contained in:
@@ -2598,7 +2598,7 @@ handle_mapping(
|
||||
}
|
||||
|
||||
// If no partly match found, use the longest full match.
|
||||
if (keylen != KEYLEN_PART_MAP)
|
||||
if (keylen != KEYLEN_PART_MAP && mp_match != NULL)
|
||||
{
|
||||
mp = mp_match;
|
||||
keylen = mp_match_len;
|
||||
@@ -2643,7 +2643,7 @@ handle_mapping(
|
||||
max_mlen = mlen + 1;
|
||||
}
|
||||
|
||||
if ((mp == NULL || max_mlen >= mp_match_len) && keylen != KEYLEN_PART_MAP)
|
||||
if ((mp == NULL || max_mlen > mp_match_len) && keylen != KEYLEN_PART_MAP)
|
||||
{
|
||||
int save_keylen = keylen;
|
||||
|
||||
|
@@ -2098,6 +2098,23 @@ func Test_modifyOtherKeys_mapped()
|
||||
set timeoutlen&
|
||||
endfunc
|
||||
|
||||
func Test_modifyOtherKeys_ambiguous_mapping()
|
||||
new
|
||||
set timeoutlen=10
|
||||
map <C-J> a
|
||||
map <C-J>x <Nop>
|
||||
call setline(1, 'x')
|
||||
|
||||
" CTRL-J b should have trigger the <C-J> mapping and then insert "b"
|
||||
call feedkeys(GetEscCodeCSI27('J', 5) .. "b\<Esc>", 'Lx!')
|
||||
call assert_equal('xb', getline(1))
|
||||
|
||||
unmap <C-J>
|
||||
unmap <C-J>x
|
||||
set timeoutlen&
|
||||
bwipe!
|
||||
endfunc
|
||||
|
||||
" Whether Shift-Tab sends "ESC [ Z" or "ESC [ 27 ; 2 ; 9 ~" is unpredictable,
|
||||
" both should work.
|
||||
func Test_modifyOtherKeys_shift_tab()
|
||||
|
@@ -754,6 +754,8 @@ static char *(features[]) =
|
||||
|
||||
static int included_patches[] =
|
||||
{ /* Add new patch number below this line */
|
||||
/**/
|
||||
4504,
|
||||
/**/
|
||||
4503,
|
||||
/**/
|
||||
|
Reference in New Issue
Block a user