diff options
-rw-r--r-- | src/nvim/window.c | 5 | ||||
-rw-r--r-- | test/functional/autocmd/tabnewentered_spec.lua | 76 |
2 files changed, 59 insertions, 22 deletions
diff --git a/src/nvim/window.c b/src/nvim/window.c index 8feedf2de6..e913d33de0 100644 --- a/src/nvim/window.c +++ b/src/nvim/window.c @@ -4113,8 +4113,9 @@ 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); + int index = tabpage_index(lastused_tabpage); + if (index < tabpage_index(NULL)) { + goto_tabpage(index); } } diff --git a/test/functional/autocmd/tabnewentered_spec.lua b/test/functional/autocmd/tabnewentered_spec.lua index 6240db2042..949786d8ff 100644 --- a/test/functional/autocmd/tabnewentered_spec.lua +++ b/test/functional/autocmd/tabnewentered_spec.lua @@ -439,32 +439,32 @@ describe('tabpage/previous', function() does_not_switch_to_previous_after_closing_current_tab('<C-Tab>')) local function does_not_switch_to_previous_after_entering_operator_pending(characters) - return function() - -- Add three tabs for a total of four - command('tabnew') - command('tabnew') - command('tabnew') + return function() + -- Add three tabs for a total of four + command('tabnew') + command('tabnew') + command('tabnew') - -- The previous tab is now the third. - eq(3, eval('tabpagenr(\'#\')')) + -- The previous tab is now the third. + eq(3, eval('tabpagenr(\'#\')')) - -- Enter operator pending mode. - feed('d') - eq('no', eval('mode(1)')) + -- Enter operator pending mode. + feed('d') + eq('no', eval('mode(1)')) - -- At this point switching to the previous tab should have no effect - -- other than leaving operator pending mode. - feed(characters) + -- At this point switching to the previous tab should have no effect + -- other than leaving operator pending mode. + feed(characters) - -- Attempting to switch tabs returns us to normal mode. - eq('n', eval('mode()')) + -- Attempting to switch tabs returns us to normal mode. + eq('n', eval('mode()')) - -- The current tab is still the fourth. - eq(4, eval('tabpagenr()')) + -- The current tab is still the fourth. + eq(4, eval('tabpagenr()')) - -- The previous tab is still the third. - eq(3, eval('tabpagenr(\'#\')')) - end + -- The previous tab is still the third. + eq(3, eval('tabpagenr(\'#\')')) + end end it('does not switch to previous via g<Tab> after entering operator pending', does_not_switch_to_previous_after_entering_operator_pending('g<Tab>')) @@ -480,4 +480,40 @@ describe('tabpage/previous', function() -- does_not_switch_to_previous_after_entering_operator_pending('<C-W>g<Tab>')) it('does not switch to previous via <C-Tab> after entering operator pending', does_not_switch_to_previous_after_entering_operator_pending('<C-Tab>')) + + local function cmdline_win_prevents_tab_switch(characters, completion_visible) + return function() + -- Add three tabs for a total of four + command('tabnew') + command('tabnew') + command('tabnew') + + -- The previous tab is now the third. + eq(3, eval('tabpagenr(\'#\')')) + + -- Edit : command line in command-line window + feed('q:') + + local cmdline_win_id = eval('win_getid()') + + -- At this point switching to the previous tab should have no effect. + feed(characters) + + -- Attempting to switch tabs maintains the current window. + eq(cmdline_win_id, eval('win_getid()')) + eq(completion_visible, eval('complete_info().pum_visible')) + + -- The current tab is still the fourth. + eq(4, eval('tabpagenr()')) + + -- The previous tab is still the third. + eq(3, eval('tabpagenr(\'#\')')) + end + end + it('cmdline-win prevents tab switch via g<Tab>', + cmdline_win_prevents_tab_switch('g<Tab>', 0)) + it('cmdline-win prevents tab switch via <C-W>g<Tab>', + cmdline_win_prevents_tab_switch('<C-W>g<Tab>', 1)) + it('cmdline-win prevents tab switch via <C-Tab>', + cmdline_win_prevents_tab_switch('<C-Tab>', 0)) end) |