Mercurial > vim
changeset 28053:f615d89a5351 v8.2.4551
patch 8.2.4551: when mapping <Esc> terminal codes are not recognized
Commit: https://github.com/vim/vim/commit/bbf84e2737daf3479e059dc7e7da0c50a07a4bf4
Author: Bram Moolenaar <Bram@vim.org>
Date: Sat Mar 12 13:48:39 2022 +0000
patch 8.2.4551: when mapping <Esc> terminal codes are not recognized
Problem: When mapping <Esc> terminal codes are not recognized.
Solution: Specifically recognize a mapping with just <Esc> and check for
terminal codes even though there is no partial mapping.
(closes #9903)
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Sat, 12 Mar 2022 15:00:04 +0100 |
parents | ecbf6ee5ba2c |
children | b31d4f3d2af9 |
files | src/getchar.c src/testdir/test_termcodes.vim src/version.c |
diffstat | 3 files changed, 24 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/src/getchar.c +++ b/src/getchar.c @@ -2643,7 +2643,12 @@ handle_mapping( max_mlen = mlen + 1; } - if ((mp == NULL || max_mlen > mp_match_len) && keylen != KEYLEN_PART_MAP) + // May check for a terminal code when there is no mapping or only a partial + // mapping. Also check if there is a full mapping with <Esc>, unless timed + // out, since that is nearly always a partial match with a terminal code. + if ((mp == NULL || max_mlen > mp_match_len + || (mp_match_len == 1 && *mp->m_keys == ESC && !*timedout)) + && keylen != KEYLEN_PART_MAP) { int save_keylen = keylen;
--- a/src/testdir/test_termcodes.vim +++ b/src/testdir/test_termcodes.vim @@ -2331,6 +2331,22 @@ func Test_cmdline_literal() set timeoutlen& endfunc +func Test_mapping_esc() + set timeoutlen=10 + + new + nnoremap <Up> iHello<Esc> + nnoremap <Esc> <Nop> + + call feedkeys(substitute(&t_ku, '\*', '', 'g'), 'Lx!') + call assert_equal("Hello", getline(1)) + + bwipe! + nunmap <Up> + nunmap <Esc> + set timeoutlen& +endfunc + " Test for translation of special key codes (<xF1>, <xF2>, etc.) func Test_Keycode_Translation() let keycodes = [