1
0
forked from aniani/vim

patch 9.0.0985: when using kitty keyboard protocol function keys may not work

Problem:    When using kitty keyboard protocol function keys may not work.
            (Kovid Goyal)
Solution:   Recognize CSI ending in [ABCDEFHPQRS] also when the termcap
            entries are not specified. (closes #11648)
This commit is contained in:
Bram Moolenaar
2022-12-02 12:28:47 +00:00
parent 023930d62e
commit 1a173409ae
4 changed files with 252 additions and 71 deletions

View File

@@ -2483,6 +2483,80 @@ func Test_mapping_works_with_unknown_modifiers()
set timeoutlen&
endfunc
func RunTest_mapping_funckey(map, func, key, code)
call setline(1, '')
exe 'inoremap ' .. a:map .. ' xyz'
call feedkeys('a' .. a:func(a:key, a:code) .. "\<Esc>", 'Lx!')
call assert_equal("xyz", getline(1), 'mapping ' .. a:map)
exe 'iunmap ' .. a:map
endfunc
func Test_mapping_kitty_function_keys()
new
set timeoutlen=10
" Function keys made with CSI and ending in [ABCDEFHPQRS].
" 'E' is keypad BEGIN, not supported
let maps = [
\ ['<Up>', 'A', 0],
\ ['<S-Up>', 'A', 2],
\ ['<C-Up>', 'A', 5],
\ ['<C-S-Up>', 'A', 6],
\
\ ['<Down>', 'B', 0],
\ ['<S-Down>', 'B', 2],
\ ['<C-Down>', 'B', 5],
\ ['<C-S-Down>', 'B', 6],
\
\ ['<Right>', 'C', 0],
\ ['<S-Right>', 'C', 2],
\ ['<C-Right>', 'C', 5],
\ ['<C-S-Right>', 'C', 6],
\
\ ['<Left>', 'D', 0],
\ ['<S-Left>', 'D', 2],
\ ['<C-Left>', 'D', 5],
\ ['<C-S-Left>', 'D', 6],
\
\ ['<End>', 'F', 0],
\ ['<S-End>', 'F', 2],
\ ['<C-End>', 'F', 5],
\ ['<C-S-End>', 'F', 6],
\
\ ['<Home>', 'H', 0],
\ ['<S-Home>', 'H', 2],
\ ['<C-Home>', 'H', 5],
\ ['<C-S-Home>', 'H', 6],
\
\ ['<F1>', 'P', 0],
\ ['<S-F1>', 'P', 2],
\ ['<C-F1>', 'P', 5],
\ ['<C-S-F1>', 'P', 6],
\
\ ['<F2>', 'Q', 0],
\ ['<S-F2>', 'Q', 2],
\ ['<C-F2>', 'Q', 5],
\ ['<C-S-F2>', 'Q', 6],
\
\ ['<F3>', 'R', 0],
\ ['<S-F3>', 'R', 2],
\ ['<C-F3>', 'R', 5],
\ ['<C-S-F3>', 'R', 6],
\
\ ['<F4>', 'S', 0],
\ ['<S-F4>', 'S', 2],
\ ['<C-F4>', 'S', 5],
\ ['<C-S-F4>', 'S', 6],
\ ]
for map in maps
call RunTest_mapping_funckey(map[0], function('GetEscCodeFunckey'), map[1], map[2])
endfor
bwipe!
set timeoutlen&
endfunc
func Test_insert_literal()
set timeoutlen=10