diff options
-rw-r--r-- | src/nvim/getchar.c | 4 | ||||
-rw-r--r-- | test/functional/ui/input_spec.lua | 11 |
2 files changed, 13 insertions, 2 deletions
diff --git a/src/nvim/getchar.c b/src/nvim/getchar.c index 42044f6378..555eadb5d4 100644 --- a/src/nvim/getchar.c +++ b/src/nvim/getchar.c @@ -1972,7 +1972,7 @@ static int handle_mapping(int *keylenp, bool *timedout, int *mapdepth) } // 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; } @@ -2011,7 +2011,7 @@ static int handle_mapping(int *keylenp, bool *timedout, int *mapdepth) } } - if ((mp == NULL || max_mlen >= mp_match_len) && keylen != KEYLEN_PART_MAP) { + if ((mp == NULL || max_mlen > mp_match_len) && keylen != KEYLEN_PART_MAP) { // When no matching mapping found or found a non-matching mapping that // matches at least what the matching mapping matched: // Try to include the modifier into the key, when: diff --git a/test/functional/ui/input_spec.lua b/test/functional/ui/input_spec.lua index d137049d55..25fc9cdcd1 100644 --- a/test/functional/ui/input_spec.lua +++ b/test/functional/ui/input_spec.lua @@ -275,6 +275,17 @@ it('mixing simplified and unsimplified keys can trigger mapping vim-patch:8.2.09 expect('c-a') end) +it('unsimplified mapping works when there was a partial match vim-patch:8.2.4504', function() + command('set timeoutlen=10') + command('nnoremap <C-J> a') + command('nnoremap <NL> x') + command('nnoremap <C-J>x <Nop>') + funcs.setline(1, 'x') + -- CTRL-J b should have trigger the <C-J> mapping and then insert "b" + feed('<C-J>b<Esc>') + expect('xb') +end) + describe('input non-printable chars', function() after_each(function() os.remove('Xtest-overwrite') |