summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2020-01-19 15:45:17 +0100
committerBram Moolenaar <Bram@vim.org>2020-01-19 15:45:17 +0100
commit479950f6c9aee4806f28a2b2fe5471e18a034cff (patch)
tree6b535f41e4ae3870326ca8d491fdf2edad30aacd
parent904edabb64422467bf79f48f3a6305e0eddeea94 (diff)
downloadvim-git-479950f6c9aee4806f28a2b2fe5471e18a034cff.tar.gz
patch 8.2.0131: command line is not cleared when switching tabsv8.2.0131
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)
-rw-r--r--src/testdir/dumps/Test_cmdlineclear_tabenter.dump10
-rw-r--r--src/testdir/test_cmdline.vim18
-rw-r--r--src/version.c2
-rw-r--r--src/window.c10
4 files changed, 39 insertions, 1 deletions
diff --git a/src/testdir/dumps/Test_cmdlineclear_tabenter.dump b/src/testdir/dumps/Test_cmdlineclear_tabenter.dump
new file mode 100644
index 000000000..27dcca570
--- /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
index 6dc6c89ff..36067d1d9 100644
--- 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\<cr>\<C-w>-\<C-w>-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
index 572346525..2d5439809 100644
--- 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
index b66fb34fe..1096b6017 100644
--- 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 '<C-w>-', 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()