diff options
Diffstat (limited to 'src/nvim/mouse.c')
-rw-r--r-- | src/nvim/mouse.c | 26 |
1 files changed, 22 insertions, 4 deletions
diff --git a/src/nvim/mouse.c b/src/nvim/mouse.c index b4d6a533f1..88103d1888 100644 --- a/src/nvim/mouse.c +++ b/src/nvim/mouse.c @@ -291,6 +291,7 @@ bool do_mouse(oparg_T *oap, int c, int dir, long count, bool fixindent) pos_T start_visual; bool moved; // Has cursor moved? bool in_winbar; // mouse in window bar + bool in_statuscol; // mouse in status column bool in_status_line; // mouse in status line static bool in_tab_line = false; // mouse clicked in tab line bool in_sep_line; // mouse in vertical separator line @@ -645,10 +646,11 @@ bool do_mouse(oparg_T *oap, int c, int dir, long count, bool fixindent) moved = (jump_flags & CURSOR_MOVED); in_winbar = (jump_flags & MOUSE_WINBAR); + in_statuscol = (jump_flags & MOUSE_STATUSCOL); in_status_line = (jump_flags & IN_STATUS_LINE); in_sep_line = (jump_flags & IN_SEP_LINE); - if ((in_winbar || in_status_line) && is_click) { + if ((in_winbar || in_status_line || in_statuscol) && is_click) { // Handle click event on window bar or status lin int click_grid = mouse_grid; int click_row = mouse_row; @@ -659,7 +661,8 @@ bool do_mouse(oparg_T *oap, int c, int dir, long count, bool fixindent) } StlClickDefinition *click_defs = in_status_line ? wp->w_status_click_defs - : wp->w_winbar_click_defs; + : in_winbar ? wp->w_winbar_click_defs + : wp->w_statuscol_click_defs; if (in_status_line && global_stl_height() > 0) { // global statusline is displayed for the current window, @@ -682,8 +685,8 @@ bool do_mouse(oparg_T *oap, int c, int dir, long count, bool fixindent) } return false; - } else if (in_winbar) { - // A drag or release event in the window bar has no side effects. + } else if (in_winbar || in_statuscol) { + // A drag or release event in the window bar and status column has no side effects. return false; } @@ -1027,6 +1030,7 @@ int jump_to_mouse(int flags, bool *inclusive, int which_button) static bool on_status_line = false; static bool on_sep_line = false; static bool on_winbar = false; + static bool on_statuscol = false; static int prev_row = -1; static int prev_col = -1; static int did_drag = false; // drag was noticed @@ -1069,6 +1073,9 @@ retnomove: if (on_winbar) { return IN_OTHER_WIN | MOUSE_WINBAR; } + if (on_statuscol) { + return IN_OTHER_WIN | MOUSE_STATUSCOL; + } if (flags & MOUSE_MAY_STOP_VIS) { end_visual_mode(); redraw_curbuf_later(UPD_INVERTED); // delete the inversion @@ -1103,6 +1110,10 @@ retnomove: ? wp->w_winbar_height != 0 : false; + on_statuscol = grid == (col < win_col_off(wp)) + ? *wp->w_p_stc != NUL + : false; + on_sep_line = grid == DEFAULT_GRID_HANDLE && col >= wp->w_width ? col - wp->w_width + 1 == 1 : false; @@ -1130,6 +1141,10 @@ retnomove: return IN_OTHER_WIN | MOUSE_WINBAR; } + if (on_statuscol) { + return IN_OTHER_WIN | MOUSE_STATUSCOL; + } + fdc = win_fdccol_count(wp); dragwin = NULL; @@ -1230,6 +1245,9 @@ retnomove: } else if (on_winbar && which_button == MOUSE_RIGHT) { // After a click on the window bar don't start Visual mode. return IN_OTHER_WIN | MOUSE_WINBAR; + } else if (on_statuscol && which_button == MOUSE_RIGHT) { + // After a click on the status column don't start Visual mode. + return IN_OTHER_WIN | MOUSE_STATUSCOL; } else { // keep_window_focus must be true // before moving the cursor for a left click, stop Visual mode |