diff options
| Commit | a38b507cf9ede0fe357e248b09b549418a20e5ae (patch) | |
|---|---|---|
| Author | 2024-08-06 17:48:55 +0300 | |
| Committer | 2024-08-06 17:48:55 +0300 | |
| Files | fe968c92f31d20312fea9b0c6931d1a2189ab877 | |
| nix-a38b507cf9ede0fe357e248b09b549418a20e5ae.tar nix-a38b507cf9ede0fe357e248b09b549418a20e5ae.tar.gz nix-a38b507cf9ede0fe357e248b09b549418a20e5ae.zip | ||
| Parent | 105d70318e7620cd2596791711f17e5a7ab6b275 (diff) | |
fix(neovim): Added a 0.9.5 patch for mouse functionality in terminal insert mode
2 files changed, 201 insertions, 0 deletions
| -rw-r--r-- | overlays/neovim/26892.patch | 195 | ||||
| -rw-r--r-- | overlays/neovim/default.nix | 6 |
diff --git a/overlays/neovim/26892.patch b/overlays/neovim/26892.patch new file mode 100644 index 0000000..8a66d54 --- /dev/null +++ b/overlays/neovim/26892.patch @@ -0,0 +1,195 @@ +From 16a6ccbff41538d8370b6c231d05c0fc1198989c Mon Sep 17 00:00:00 2001 +From: zeertzjq <zeertzjq@outlook.com> +Date: Tue, 6 Aug 2024 17:16:48 +0300 +Subject: [PATCH] [PATCH] fix(terminal): check if mouse on + +Modified to work with with v0.9.5 by Syndamia +--- + src/nvim/mouse.c | 4 +- + src/nvim/terminal.c | 6 +- + test/functional/terminal/mouse_spec.lua | 129 ++++++++++++++++++++++++ + 3 files changed, 135 insertions(+), 4 deletions(-) + +diff --git a/src/nvim/mouse.c b/src/nvim/mouse.c +index a4f4a49fc..a23a15e49 100644 +--- a/src/nvim/mouse.c ++++ b/src/nvim/mouse.c +@@ -234,7 +234,7 @@ static int get_fpos_of_mouse(pos_T *mpos) + return IN_STATUS_LINE; + } + +- if (winrow == -1 && wp->w_winbar_height != 0) { ++ if (winrow < 0 && winrow + wp->w_winbar_height >= 0) { + return MOUSE_WINBAR; + } + +@@ -1118,7 +1118,7 @@ retnomove: + bool below_window = grid == DEFAULT_GRID_HANDLE && row + wp->w_winbar_height >= wp->w_height; + on_status_line = below_window && row + wp->w_winbar_height - wp->w_height + 1 == 1; + on_sep_line = grid == DEFAULT_GRID_HANDLE && col >= wp->w_width && col - wp->w_width + 1 == 1; +- on_winbar = row == -1 && wp->w_winbar_height != 0; ++ on_winbar = row < 0 && row + wp->w_winbar_height >= 0; + on_statuscol = !below_window && !on_status_line && !on_sep_line && !on_winbar + && *wp->w_p_stc != NUL + && (wp->w_p_rl +diff --git a/src/nvim/terminal.c b/src/nvim/terminal.c +index ac29dbc0e..e1efeed61 100644 +--- a/src/nvim/terminal.c ++++ b/src/nvim/terminal.c +@@ -1422,8 +1422,10 @@ static bool send_mouse_event(Terminal *term, int c) + } + + int offset; +- if (term->forward_mouse && mouse_win->w_buffer->terminal == term +- && col >= (offset = win_col_off(mouse_win))) { ++ if (term->forward_mouse && mouse_win->w_buffer->terminal == term && row >= 0 ++ && (grid > 1 || row + mouse_win->w_winbar_height < mouse_win->w_height) ++ && col >= (offset = win_col_off(mouse_win)) ++ && (grid > 1 || col < mouse_win->w_width)) { + // event in the terminal window and mouse events was enabled by the + // program. translate and forward the event + int button; +diff --git a/test/functional/terminal/mouse_spec.lua b/test/functional/terminal/mouse_spec.lua +index 944fc4f48..d2c55b368 100644 +--- a/test/functional/terminal/mouse_spec.lua ++++ b/test/functional/terminal/mouse_spec.lua +@@ -245,6 +245,135 @@ describe(':terminal mouse', function() + end) + end) + ++ it('will lose focus if statusline is clicked', function() ++ command('set laststatus=2') ++ screen:expect([[ ++ line29 | ++ line30 | ++ mouse enabled | ++ rows: 5, cols: 50 | ++ {1: } | ++ ========== | ++ {3:-- TERMINAL --} | ++ ]]) ++ feed('<LeftMouse><0,5>') ++ screen:expect([[ ++ line29 | ++ line30 | ++ mouse enabled | ++ rows: 5, cols: 50 | ++ {2:^ } | ++ ========== | ++ | ++ ]]) ++ feed('<LeftDrag><0,4>') ++ screen:expect([[ ++ mouse enabled | ++ rows: 5, cols: 50 | ++ rows: 4, cols: 50 | ++ {2:^ } | ++ ========== | ++ |*2 ++ ]]) ++ end) ++ ++ it('will lose focus if right separator is clicked', function() ++ command('rightbelow vnew | wincmd p | startinsert') ++ screen:expect([[ ++ line29 │ | ++ line30 │{4:~ }| ++ mouse enabled │{4:~ }| ++ rows: 5, cols: 24 │{4:~ }| ++ {1: } │{4:~ }| ++ ========== ========== | ++ {3:-- TERMINAL --} | ++ ]]) ++ feed('<LeftMouse><24,0>') ++ screen:expect([[ ++ line29 │ | ++ line30 │{4:~ }| ++ mouse enabled │{4:~ }| ++ rows: 5, cols: 24 │{4:~ }| ++ {2:^ } │{4:~ }| ++ ========== ========== | ++ | ++ ]]) ++ feed('<LeftDrag><23,0>') ++ screen:expect([[ ++ line30 │ | ++ mouse enabled │{4:~ }| ++ rows: 5, cols: 24 │{4:~ }| ++ rows: 5, cols: 23 │{4:~ }| ++ {2:^ } │{4:~ }| ++ ========== ========== | ++ | ++ ]]) ++ end) ++ ++ it('will lose focus if winbar/tabline is clicked', function() ++ command('setlocal winbar=WINBAR') ++ screen:expect([[ ++ {3:WINBAR }| ++ line29 | ++ line30 | ++ mouse enabled | ++ rows: 5, cols: 50 | ++ {1: } | ++ {3:-- TERMINAL --} | ++ ]]) ++ feed('<LeftMouse><0,0>') ++ screen:expect([[ ++ {3:WINBAR }| ++ line29 | ++ line30 | ++ mouse enabled | ++ rows: 5, cols: 50 | ++ {2:^ } | ++ | ++ ]]) ++ command('set showtabline=2 tabline=TABLINE | startinsert') ++ screen:expect([[ ++ {1:TABLINE }| ++ {3:WINBAR }| ++ mouse enabled | ++ rows: 5, cols: 50 | ++ rows: 4, cols: 50 | ++ {1: } | ++ {3:-- TERMINAL --} | ++ ]]) ++ feed('<LeftMouse><0,0>') ++ screen:expect([[ ++ {1:TABLINE }| ++ {3:WINBAR }| ++ mouse enabled | ++ rows: 5, cols: 50 | ++ rows: 4, cols: 50 | ++ {2:^ } | ++ | ++ ]]) ++ command('setlocal winbar= | startinsert') ++ screen:expect([[ ++ {1:TABLINE }| ++ mouse enabled | ++ rows: 5, cols: 50 | ++ rows: 4, cols: 50 | ++ rows: 5, cols: 50 | ++ {1: } | ++ {3:-- TERMINAL --} | ++ ]]) ++ feed('<LeftMouse><0,0>') ++ screen:expect([[ ++ {1:TABLINE }| ++ mouse enabled | ++ rows: 5, cols: 50 | ++ rows: 4, cols: 50 | ++ rows: 5, cols: 50 | ++ {2:^ } | ++ | ++ ]]) ++ end) ++ ++ + describe('with a split window and other buffer', function() + before_each(function() + feed('<c-\\><c-n>:vsp<cr>') +-- +2.44.1 + + diff --git a/overlays/neovim/default.nix b/overlays/neovim/default.nix new file mode 100644 index 0000000..b2436ca --- /dev/null +++ b/overlays/neovim/default.nix @@ -0,0 +1,6 @@ +final: prev: { + neovim-unwrapped = prev.neovim-unwrapped.overrideAttrs (prevAttrs: { + patches = (prevAttrs.patches or []) ++ + (if prevAttrs.version == "0.9.5" then [ ./26892.patch ] else []); # Terminal insert-mode mouse check patch + }); +} |
