neovim

Neovim text editor
git clone https://git.dasho.dev/neovim.git
Log | Files | Refs | README

commit c881092ffe9d6760d08efcd4dfb02efcb60cc706
parent 6d1a2f2c3c51560555ea6f7867273635d07eb287
Author: zeertzjq <zeertzjq@outlook.com>
Date:   Tue, 31 Oct 2023 12:05:37 +0800

fix(terminal): don't lose focus on <MouseMove> (#25845)


Diffstat:
Msrc/nvim/terminal.c | 9+++++----
Mtest/functional/terminal/mouse_spec.lua | 19+++++++++++++++++--
2 files changed, 22 insertions(+), 6 deletions(-)

diff --git a/src/nvim/terminal.c b/src/nvim/terminal.c @@ -1506,13 +1506,14 @@ static bool send_mouse_event(Terminal *term, int c) return mouse_win == curwin; } - // ignore left release action if it was not processed above - // to prevent leaving Terminal mode after entering to it using a mouse - if (c == K_LEFTRELEASE && mouse_win->w_buffer->terminal == term) { +end: + // Ignore left release action if it was not forwarded to prevent + // leaving Terminal mode after entering to it using a mouse. + if ((c == K_LEFTRELEASE && mouse_win != NULL && mouse_win->w_buffer->terminal == term) + || c == K_MOUSEMOVE) { return false; } -end: ins_char_typebuf(vgetc_char, vgetc_mod_mask); return true; } diff --git a/test/functional/terminal/mouse_spec.lua b/test/functional/terminal/mouse_spec.lua @@ -67,8 +67,23 @@ describe(':terminal mouse', function() eq('nt', eval('mode(1)')) end) - it('does not leave terminal mode on left-release', function() - feed('<LeftRelease>') + it('will not exit focus on left-release', function() + eq('t', eval('mode(1)')) + feed('<LeftRelease><0,0>') + eq('t', eval('mode(1)')) + command('setlocal number') + eq('t', eval('mode(1)')) + feed('<LeftRelease><0,0>') + eq('t', eval('mode(1)')) + end) + + it('will not exit focus on mouse movement', function() + eq('t', eval('mode(1)')) + feed('<MouseMove><0,0>') + eq('t', eval('mode(1)')) + command('setlocal number') + eq('t', eval('mode(1)')) + feed('<MouseMove><0,0>') eq('t', eval('mode(1)')) end)