aboutsummaryrefslogtreecommitdiff
path: root/test/functional/terminal/buffer_spec.lua
diff options
context:
space:
mode:
authorbfredl <bjorn.linse@gmail.com>2025-01-09 14:05:40 +0100
committerbfredl <bjorn.linse@gmail.com>2025-01-13 11:55:16 +0100
commit913e81c35f162c1e2647565397608f63f38d7043 (patch)
tree33504d3677805bf8224b6ec1ac2386575c6a056f /test/functional/terminal/buffer_spec.lua
parentdcaf8bef08d094889ef5fac24d123871dd0e6a6f (diff)
downloadrneovim-913e81c35f162c1e2647565397608f63f38d7043.tar.gz
rneovim-913e81c35f162c1e2647565397608f63f38d7043.tar.bz2
rneovim-913e81c35f162c1e2647565397608f63f38d7043.zip
fix(getchar): do not simplify keycodes in terminal mode
The code represents a useful pattern in normal mode where remapping `<tab>` will implicitly also remap `<c-i>` unless you remap that explicitly. This relies on the _unmapped_ behavior being identical which is not true in terminal mode, as vterm can distinguish these keys. Vim seems to entangle this with kitty keyboard mode detection which is irrelevant for us. Conditional fallbacks depending on keyboard mode could be done completely inside `vterm/` without getchar.c getting involved, I would think.
Diffstat (limited to 'test/functional/terminal/buffer_spec.lua')
-rw-r--r--test/functional/terminal/buffer_spec.lua68
1 files changed, 68 insertions, 0 deletions
diff --git a/test/functional/terminal/buffer_spec.lua b/test/functional/terminal/buffer_spec.lua
index cc807ba555..50e23d9e23 100644
--- a/test/functional/terminal/buffer_spec.lua
+++ b/test/functional/terminal/buffer_spec.lua
@@ -625,6 +625,74 @@ describe('terminal input', function()
]]):format(key))
end
end)
+
+ -- TODO(bfredl): getcharstr() erases the distinction between <C-I> and <Tab>.
+ -- If it was enhanced or replaced this could get folded into the test above.
+ it('can send TAB/C-I and ESC/C-[ separately', function()
+ clear()
+ local screen = tt.setup_child_nvim({
+ '-u',
+ 'NONE',
+ '-i',
+ 'NONE',
+ '--cmd',
+ 'colorscheme vim',
+ '--cmd',
+ 'set notermguicolors',
+ '--cmd',
+ 'noremap <Tab> <cmd>echo "Tab!"<cr>',
+ '--cmd',
+ 'noremap <C-i> <cmd>echo "Ctrl-I!"<cr>',
+ '--cmd',
+ 'noremap <Esc> <cmd>echo "Esc!"<cr>',
+ '--cmd',
+ 'noremap <C-[> <cmd>echo "Ctrl-[!"<cr>',
+ })
+
+ screen:expect([[
+ ^ |
+ {4:~ }|*3
+ {5:[No Name] 0,0-1 All}|
+ |
+ {3:-- TERMINAL --} |
+ ]])
+
+ feed('<tab>')
+ screen:expect([[
+ ^ |
+ {4:~ }|*3
+ {5:[No Name] 0,0-1 All}|
+ Tab! |
+ {3:-- TERMINAL --} |
+ ]])
+
+ feed('<c-i>')
+ screen:expect([[
+ ^ |
+ {4:~ }|*3
+ {5:[No Name] 0,0-1 All}|
+ Ctrl-I! |
+ {3:-- TERMINAL --} |
+ ]])
+
+ feed('<Esc>')
+ screen:expect([[
+ ^ |
+ {4:~ }|*3
+ {5:[No Name] 0,0-1 All}|
+ Esc! |
+ {3:-- TERMINAL --} |
+ ]])
+
+ feed('<c-[>')
+ screen:expect([[
+ ^ |
+ {4:~ }|*3
+ {5:[No Name] 0,0-1 All}|
+ Ctrl-[! |
+ {3:-- TERMINAL --} |
+ ]])
+ end)
end)
if is_os('win') then