1
0
forked from aniani/vim

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)
This commit is contained in:
Bram Moolenaar 2020-01-19 15:45:17 +01:00
parent 904edabb64
commit 479950f6c9
4 changed files with 39 additions and 1 deletions

View File

@ -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|

View 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

View File

@ -742,6 +742,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
131,
/**/
130,
/**/

View 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()