diff options
author | butwerenotthereyet <58348703+butwerenotthereyet@users.noreply.github.com> | 2020-01-02 06:06:11 -0800 |
---|---|---|
committer | Justin M. Keyes <justinkz@gmail.com> | 2020-01-02 06:06:11 -0800 |
commit | cbc8d72fde4b19176028490934ff7a447afe523c (patch) | |
tree | 80c962c8c65b356e55b9a55e0f67c1ba2b24b78d /src/nvim/window.c | |
parent | 2c62b2fc56b6b86a930356ccf48ba8fb189a7654 (diff) | |
download | rneovim-cbc8d72fde4b19176028490934ff7a447afe523c.tar.gz rneovim-cbc8d72fde4b19176028490934ff7a447afe523c.tar.bz2 rneovim-cbc8d72fde4b19176028490934ff7a447afe523c.zip |
tabpage: track last-used tabpage #11626
In a multi-window scenario, it is possible to return focus to the last
accessed window via n_CTRL-W_p. However, in the case of a multi-tab
scenario, there was previously no way to return focus to the last
accessed *tab*. Here, that ability is added via n_g<tab>.
Additionally, the index of the previous tab is exposed via
tabpagenr('#'), mirroring the existing functionality of winnr('#').
Diffstat (limited to 'src/nvim/window.c')
-rw-r--r-- | src/nvim/window.c | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/src/nvim/window.c b/src/nvim/window.c index 79d7a8acba..4d105dd11e 100644 --- a/src/nvim/window.c +++ b/src/nvim/window.c @@ -519,6 +519,10 @@ wingotofile: do_nv_ident('g', xchar); break; + case TAB: + goto_tabpage_lastused(); + break; + case 'f': /* CTRL-W gf: "gf" in a new tab page */ case 'F': /* CTRL-W gF: "gF" in a new tab page */ cmdmod.tab = tabpage_index(curtab) + 1; @@ -3691,6 +3695,10 @@ void free_tabpage(tabpage_T *tp) hash_init(&tp->tp_vars->dv_hashtab); unref_var_dict(tp->tp_vars); + if (tp == lastused_tabpage) { + lastused_tabpage = NULL; + } + xfree(tp->tp_localdir); xfree(tp); } @@ -3750,6 +3758,8 @@ int win_new_tabpage(int after, char_u *filename) tabpage_check_windows(tp); + lastused_tabpage = tp; + apply_autocmds(EVENT_WINNEW, NULL, NULL, false, curbuf); apply_autocmds(EVENT_WINENTER, NULL, NULL, false, curbuf); apply_autocmds(EVENT_TABNEW, filename, filename, false, curbuf); @@ -3976,6 +3986,7 @@ static void enter_tabpage(tabpage_T *tp, buf_T *old_curbuf, int trigger_enter_au if (curtab->tp_old_Columns != Columns && starting == 0) shell_new_columns(); /* update window widths */ + lastused_tabpage = old_curtab; /* Apply autocommands after updating the display, when 'rows' and * 'columns' have been set correctly. */ @@ -4095,6 +4106,14 @@ void goto_tabpage_tp(tabpage_T *tp, int trigger_enter_autocmds, int trigger_leav } } +// Go to the last accessed tab page, if there is one. +void goto_tabpage_lastused(void) +{ + if (valid_tabpage(lastused_tabpage)) { + goto_tabpage_tp(lastused_tabpage, true, true); + } +} + /* * Enter window "wp" in tab page "tp". * Also updates the GUI tab. |