diff options
author | bfredl <bjorn.linse@gmail.com> | 2025-01-09 14:05:40 +0100 |
---|---|---|
committer | bfredl <bjorn.linse@gmail.com> | 2025-01-13 11:55:16 +0100 |
commit | 913e81c35f162c1e2647565397608f63f38d7043 (patch) | |
tree | 33504d3677805bf8224b6ec1ac2386575c6a056f /test/functional/terminal/buffer_spec.lua | |
parent | dcaf8bef08d094889ef5fac24d123871dd0e6a6f (diff) | |
download | rneovim-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.lua | 68 |
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 |