fix(terminal): don't send unknown special keys to terminal (#24378)

Special keys are negative integers, so sending them to terminal leads to
strange behavior.
This commit is contained in:
zeertzjq 2023-07-17 21:42:55 +08:00 committed by GitHub
parent 881d17a113
commit d0d132fbd0
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 25 additions and 1 deletions

View File

@ -766,7 +766,7 @@ void terminal_send_key(Terminal *term, int c)
if (key) {
vterm_keyboard_key(term->vt, key, mod);
} else {
} else if (!IS_SPECIAL(c)) {
vterm_keyboard_unichar(term->vt, (uint32_t)c, mod);
}
}

View File

@ -431,6 +431,30 @@ it('terminal truncates number of composing characters to 5', function()
retry(nil, nil, function() eq('a' .. composing:rep(5), meths.get_current_line()) end)
end)
describe('terminal input', function()
before_each(function()
clear()
exec_lua([[
_G.input_data = ''
vim.api.nvim_open_term(0, { on_input = function(_, _, _, data)
_G.input_data = _G.input_data .. data
end })
]])
command('startinsert')
poke_eventloop()
end)
it('<C-Space> is sent as NUL byte', function()
feed('aaa<C-Space>bbb')
eq('aaa\0bbb', exec_lua([[return _G.input_data]]))
end)
it('unknown special keys are not sent', function()
feed('aaa<Help>bbb')
eq('aaabbb', exec_lua([[return _G.input_data]]))
end)
end)
if is_os('win') then
describe(':terminal in Windows', function()
local screen