# HG changeset patch # User Bram Moolenaar # Date 1579446004 -3600 # Node ID bfcafd1a3e379999046d8caa65df3414328b2096 # Parent 3b7117916bb993bdda1f3be1fcd2526f8fa669a8 patch 8.2.0131: command line is not cleared when switching tabs Commit: https://github.com/vim/vim/commit/479950f6c9aee4806f28a2b2fe5471e18a034cff Author: Bram Moolenaar Date: Sun Jan 19 15:45:17 2020 +0100 patch 8.2.0131: command line is not cleared when switching tabs Problem: Command line is not cleared when switching tabs and the command line height differs. Solution: Set the "clear_cmdline" flag when needed. (Naruhiko Nishino, closes #5495) diff --git a/src/testdir/dumps/Test_cmdlineclear_tabenter.dump b/src/testdir/dumps/Test_cmdlineclear_tabenter.dump new file mode 100644 --- /dev/null +++ b/src/testdir/dumps/Test_cmdlineclear_tabenter.dump @@ -0,0 +1,10 @@ +| +8#0000001#e0e0e08|+| |[|N|o| |N|a|m|e|]| | +2#0000000#ffffff0|[|N|o| |N|a|m|e|]| | +1&&@49|X+8#0000001#e0e0e08 +> +0#0000000#ffffff0@74 +|~+0#4040ff13&| @73 +|~| @73 +|~| @73 +|~| @73 +|~| @73 +| +0#0000000&@74 +@75 +@57|0|,|0|-|1| @8|A|l@1| diff --git a/src/testdir/test_cmdline.vim b/src/testdir/test_cmdline.vim --- a/src/testdir/test_cmdline.vim +++ b/src/testdir/test_cmdline.vim @@ -905,4 +905,22 @@ func Test_cmdwin_cedit() delfunc CmdWinType endfunc +func Test_cmdlineclear_tabenter() + CheckScreendump + + let lines =<< trim [SCRIPT] + call setline(1, range(30)) + [SCRIPT] + + call writefile(lines, 'XtestCmdlineClearTabenter') + let buf = RunVimInTerminal('-S XtestCmdlineClearTabenter', #{rows: 10}) + call term_wait(buf, 50) + " in one tab make the command line higher with CTRL-W - + call term_sendkeys(buf, ":tabnew\\-\-gtgt") + call VerifyScreenDump(buf, 'Test_cmdlineclear_tabenter', {}) + + call StopVimInTerminal(buf) + call delete('XtestCmdlineClearTabenter') +endfunc + " vim: shiftwidth=2 sts=2 expandtab diff --git a/src/version.c b/src/version.c --- a/src/version.c +++ b/src/version.c @@ -743,6 +743,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 131, +/**/ 130, /**/ 129, diff --git a/src/window.c b/src/window.c --- a/src/window.c +++ b/src/window.c @@ -4093,6 +4093,7 @@ enter_tabpage( int trigger_enter_autocmds, int trigger_leave_autocmds) { + int row; int old_off = tp->tp_firstwin->w_winrow; win_T *next_prevwin = tp->tp_prevwin; @@ -4109,7 +4110,7 @@ enter_tabpage( prevwin = next_prevwin; last_status(FALSE); // status line may appear or disappear - (void)win_comp_pos(); // recompute w_winrow for all windows + row = win_comp_pos(); // recompute w_winrow for all windows #ifdef FEAT_DIFF diff_need_scrollbind = TRUE; #endif @@ -4121,6 +4122,13 @@ enter_tabpage( if (p_ch != curtab->tp_ch_used) clear_cmdline = TRUE; p_ch = curtab->tp_ch_used; + + // When cmdheight is changed in a tab page with '-', cmdline_row is + // changed but p_ch and tp_ch_used are not changed. Thus we also need to + // check cmdline_row. + if ((row < cmdline_row) && (cmdline_row <= Rows - p_ch)) + clear_cmdline = TRUE; + if (curtab->tp_old_Rows != Rows || (old_off != firstwin->w_winrow #ifdef FEAT_GUI_TABLINE && !gui_use_tabline()