mirror of
https://github.com/neovim/neovim
synced 2025-07-16 17:21:49 +00:00
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:
@ -766,7 +766,7 @@ void terminal_send_key(Terminal *term, int c)
|
|||||||
|
|
||||||
if (key) {
|
if (key) {
|
||||||
vterm_keyboard_key(term->vt, key, mod);
|
vterm_keyboard_key(term->vt, key, mod);
|
||||||
} else {
|
} else if (!IS_SPECIAL(c)) {
|
||||||
vterm_keyboard_unichar(term->vt, (uint32_t)c, mod);
|
vterm_keyboard_unichar(term->vt, (uint32_t)c, mod);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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)
|
retry(nil, nil, function() eq('a' .. composing:rep(5), meths.get_current_line()) end)
|
||||||
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
|
if is_os('win') then
|
||||||
describe(':terminal in Windows', function()
|
describe(':terminal in Windows', function()
|
||||||
local screen
|
local screen
|
||||||
|
Reference in New Issue
Block a user