aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorNacho Nieva <83428506+NachoNievaG@users.noreply.github.com>2024-02-18 23:49:33 -0300
committerGitHub <noreply@github.com>2024-02-19 10:49:33 +0800
commitfa131de9adb74ac1f9f46eaecd5613f38d9c2ed7 (patch)
treed158b5004184783d7de4a8467b6bf3d1460176db /src
parent8f1f2a1d9f6af56ae928f6cdc29055a0ba13baea (diff)
downloadrneovim-fa131de9adb74ac1f9f46eaecd5613f38d9c2ed7.tar.gz
rneovim-fa131de9adb74ac1f9f46eaecd5613f38d9c2ed7.tar.bz2
rneovim-fa131de9adb74ac1f9f46eaecd5613f38d9c2ed7.zip
feat(tabline): middle mouse button now closes tab (#27522)
Diffstat (limited to 'src')
-rw-r--r--src/nvim/mouse.c69
1 files changed, 39 insertions, 30 deletions
diff --git a/src/nvim/mouse.c b/src/nvim/mouse.c
index f4d1be5b2f..506a428243 100644
--- a/src/nvim/mouse.c
+++ b/src/nvim/mouse.c
@@ -136,6 +136,26 @@ static void move_tab_to_mouse(void)
tabpage_move(tabnr);
}
}
+/// Close the current or specified tab page.
+///
+/// @param c1 tabpage number, or 999 for the current tabpage
+static void mouse_tab_close(int c1)
+{
+ tabpage_T *tp;
+
+ if (c1 == 999) {
+ tp = curtab;
+ } else {
+ tp = find_tabpage(c1);
+ }
+ if (tp == curtab) {
+ if (first_tabpage->tp_next != NULL) {
+ tabpage_close(false);
+ }
+ } else if (tp != NULL) {
+ tabpage_close_other(tp, false);
+ }
+}
static bool got_click = false; // got a click some time back
@@ -487,43 +507,32 @@ bool do_mouse(oparg_T *oap, int c, int dir, int count, bool fixindent)
if (is_click && cmdwin_type == 0 && mouse_col < Columns) {
in_tab_line = true;
c1 = tab_page_click_defs[mouse_col].tabnr;
+
switch (tab_page_click_defs[mouse_col].type) {
case kStlClickDisabled:
break;
- case kStlClickTabClose: {
- tabpage_T *tp;
-
- // Close the current or specified tab page.
- if (c1 == 999) {
- tp = curtab;
- } else {
- tp = find_tabpage(c1);
- }
- if (tp == curtab) {
- if (first_tabpage->tp_next != NULL) {
- tabpage_close(false);
- }
- } else if (tp != NULL) {
- tabpage_close_other(tp, false);
- }
- break;
- }
case kStlClickTabSwitch:
- if ((mod_mask & MOD_MASK_MULTI_CLICK) == MOD_MASK_2CLICK) {
- // double click opens new page
- end_visual_mode();
- tabpage_new();
- tabpage_move(c1 == 0 ? 9999 : c1 - 1);
- } else {
- // Go to specified tab page, or next one if not clicking
- // on a label.
- goto_tabpage(c1);
-
- // It's like clicking on the status line of a window.
- if (curwin != old_curwin) {
+ if (which_button != MOUSE_MIDDLE) {
+ if ((mod_mask & MOD_MASK_MULTI_CLICK) == MOD_MASK_2CLICK) {
+ // double click opens new page
end_visual_mode();
+ tabpage_new();
+ tabpage_move(c1 == 0 ? 9999 : c1 - 1);
+ } else {
+ // Go to specified tab page, or next one if not clicking
+ // on a label.
+ goto_tabpage(c1);
+
+ // It's like clicking on the status line of a window.
+ if (curwin != old_curwin) {
+ end_visual_mode();
+ }
}
+ break;
}
+ FALLTHROUGH;
+ case kStlClickTabClose:
+ mouse_tab_close(c1);
break;
case kStlClickFuncRun:
call_click_def_func(tab_page_click_defs, mouse_col, which_button);