diff options
author | Nacho Nieva <83428506+NachoNievaG@users.noreply.github.com> | 2024-02-18 23:49:33 -0300 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-02-19 10:49:33 +0800 |
commit | fa131de9adb74ac1f9f46eaecd5613f38d9c2ed7 (patch) | |
tree | d158b5004184783d7de4a8467b6bf3d1460176db /src | |
parent | 8f1f2a1d9f6af56ae928f6cdc29055a0ba13baea (diff) | |
download | rneovim-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.c | 69 |
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); |