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('#').
This commit is contained in:
butwerenotthereyet
2020-01-02 06:06:11 -08:00
committed by Justin M. Keyes
parent 2c62b2fc56
commit cbc8d72fde
7 changed files with 502 additions and 9 deletions

View File

@@ -6312,9 +6312,7 @@ static void nv_gomark(cmdarg_T *cap)
}
}
/*
* Handle CTRL-O, CTRL-I, "g;" and "g," commands.
*/
// Handle CTRL-O, CTRL-I, "g;", "g,", and "CTRL-Tab" commands.
static void nv_pcmark(cmdarg_T *cap)
{
pos_T *pos;
@@ -6322,11 +6320,16 @@ static void nv_pcmark(cmdarg_T *cap)
const bool old_KeyTyped = KeyTyped; // getting file may reset it
if (!checkclearopq(cap->oap)) {
if (cap->cmdchar == 'g')
if (cap->cmdchar == TAB && mod_mask == MOD_MASK_CTRL) {
goto_tabpage_lastused();
return;
}
if (cap->cmdchar == 'g') {
pos = movechangelist((int)cap->count1);
else
} else {
pos = movemark((int)cap->count1);
if (pos == (pos_T *)-1) { /* jump to other file */
}
if (pos == (pos_T *)-1) { // jump to other file
curwin->w_set_curswant = true;
check_cursor();
} else if (pos != NULL) /* can jump */
@@ -7059,6 +7062,11 @@ static void nv_g_cmd(cmdarg_T *cap)
if (!checkclearop(oap))
goto_tabpage(-(int)cap->count1);
break;
case TAB:
if (!checkclearop(oap)) {
goto_tabpage_lastused();
}
break;
case '+':
case '-': /* "g+" and "g-": undo or redo along the timeline */