aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorzeertzjq <zeertzjq@outlook.com>2023-09-11 08:29:33 +0800
committerGitHub <noreply@github.com>2023-09-11 08:29:33 +0800
commit2b475cb5cc2196a32085fbbdfd7357cbb02a1cb0 (patch)
treeefbc40dc8fdb5391ce81b70afbfa81df7518c080
parentaf0684f0d578631dae7d857cd065d81288be3cf2 (diff)
downloadrneovim-2b475cb5cc2196a32085fbbdfd7357cbb02a1cb0.tar.gz
rneovim-2b475cb5cc2196a32085fbbdfd7357cbb02a1cb0.tar.bz2
rneovim-2b475cb5cc2196a32085fbbdfd7357cbb02a1cb0.zip
fix(mouse): click on 'statuscolumn' with 'rightleft' (#25090)
-rw-r--r--src/nvim/mouse.c14
-rw-r--r--test/functional/ui/statuscolumn_spec.lua18
2 files changed, 30 insertions, 2 deletions
diff --git a/src/nvim/mouse.c b/src/nvim/mouse.c
index 76ac191a68..b8c80cadf5 100644
--- a/src/nvim/mouse.c
+++ b/src/nvim/mouse.c
@@ -220,7 +220,10 @@ static int get_fpos_of_mouse(pos_T *mpos)
// compute the position in the buffer line from the posn on the screen
bool below_buffer = mouse_comp_pos(wp, &row, &col, &mpos->lnum);
- if (!below_buffer && *wp->w_p_stc != NUL && mouse_col < win_col_off(wp)) {
+ if (!below_buffer && *wp->w_p_stc != NUL
+ && (wp->w_p_rl
+ ? wincol >= wp->w_width_inner - win_col_off(wp)
+ : wincol < win_col_off(wp))) {
return MOUSE_STATUSCOL;
}
@@ -675,6 +678,10 @@ popupexit:
click_col = mouse_col;
}
+ if (in_statuscol && wp->w_p_rl) {
+ click_col = wp->w_width_inner - click_col - 1;
+ }
+
if (click_defs != NULL) {
switch (click_defs[click_col].type) {
case kStlClickDisabled:
@@ -1254,7 +1261,10 @@ retnomove:
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_statuscol = !below_window && !on_status_line && !on_sep_line && !on_winbar
- && *wp->w_p_stc != NUL && col < win_col_off(wp);
+ && *wp->w_p_stc != NUL
+ && (wp->w_p_rl
+ ? col >= wp->w_width_inner - win_col_off(wp)
+ : col < win_col_off(wp));
// The rightmost character of the status line might be a vertical
// separator character if there is no connecting window to the right.
diff --git a/test/functional/ui/statuscolumn_spec.lua b/test/functional/ui/statuscolumn_spec.lua
index ee235cd6b5..742976cbe2 100644
--- a/test/functional/ui/statuscolumn_spec.lua
+++ b/test/functional/ui/statuscolumn_spec.lua
@@ -532,6 +532,24 @@ describe('statuscolumn', function()
eq('0 3 r 7', eval("g:testvar"))
meths.input_mouse('right', 'press', '', 0, 3, 0)
eq('0 4 r 7', eval("g:testvar"))
+
+ command('rightbelow vsplit')
+ meths.input_mouse('left', 'press', '', 0, 0, 27)
+ eq('0 1 l 4', eval("g:testvar"))
+ meths.input_mouse('right', 'press', '', 0, 3, 27)
+ eq('0 1 r 7', eval("g:testvar"))
+ command('setlocal rightleft')
+ meths.input_mouse('left', 'press', '', 0, 0, 52)
+ eq('0 1 l 4', eval("g:testvar"))
+ meths.input_mouse('right', 'press', '', 0, 3, 52)
+ eq('0 1 r 7', eval("g:testvar"))
+ command('wincmd H')
+ meths.input_mouse('left', 'press', '', 0, 0, 25)
+ eq('0 1 l 4', eval("g:testvar"))
+ meths.input_mouse('right', 'press', '', 0, 3, 25)
+ eq('0 1 r 7', eval("g:testvar"))
+ command('close')
+
command('set laststatus=2 winbar=%f')
command('let g:testvar = ""')
-- Check that winbar click doesn't register as statuscolumn click