]> git.ipfire.org Git - thirdparty/vim.git/commitdiff
patch 8.2.0131: command line is not cleared when switching tabs v8.2.0131
authorBram Moolenaar <Bram@vim.org>
Sun, 19 Jan 2020 14:45:17 +0000 (15:45 +0100)
committerBram Moolenaar <Bram@vim.org>
Sun, 19 Jan 2020 14:45:17 +0000 (15:45 +0100)
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)

src/testdir/dumps/Test_cmdlineclear_tabenter.dump [new file with mode: 0644]
src/testdir/test_cmdline.vim
src/version.c
src/window.c

diff --git a/src/testdir/dumps/Test_cmdlineclear_tabenter.dump b/src/testdir/dumps/Test_cmdlineclear_tabenter.dump
new file mode 100644 (file)
index 0000000..27dcca5
--- /dev/null
@@ -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| 
index 6dc6c89ff665de110848368e9706e637c8392078..36067d1d9f22fe0e2d36970aa6efb9e739923f6f 100644 (file)
@@ -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
index 5723465254c5ad35554d7d488d927530555fd89d..2d54398090383bf523279fbc56614af7e2ea9376 100644 (file)
@@ -742,6 +742,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    131,
 /**/
     130,
 /**/
index b66fb34febd5eec7da9583f24e4d053cef08807b..1096b60173b812711f2e481db1c5ce811c807630 100644 (file)
@@ -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()