Problem: Setting 'cmdheight' has no effect if last window was resized.
Solution: Do apply 'cmdheight' when told to. Use the frame height instead
of the cmdline_row. (closes #11286)
// Only compute the new window layout when startup has been
// completed. Otherwise the frame sizes may be wrong.
- if (p_ch != old_value && full_screen
+ if ((p_ch != old_value || topframe->fr_height != Rows - p_ch)
+ && full_screen
#ifdef FEAT_GUI
&& !gui.starting
#endif
- )
+ )
command_height();
}
--- /dev/null
+> +0&#ffffff0@74
+|~+0#4040ff13&| @73
+|~| @73
+|~| @73
+|~| @73
+|~| @73
+|[+3#0000000&|N|o| |N|a|m|e|]| @47|0|,|0|-|1| @9|A|l@1
+| +0&&@74
let lines =<< trim END
set cmdheight=1 laststatus=2
+ func EchoTwo()
+ set laststatus=2
+ set cmdheight=5
+ echo 'foo'
+ echo 'bar'
+ set cmdheight=1
+ endfunc
END
call writefile(lines, 'XTest_cmdheight', 'D')
call term_sendkeys(buf, ":set cmdheight=1\<CR>")
call VerifyScreenDump(buf, 'Test_changing_cmdheight_5', {})
+ " setting 'cmdheight' works after outputting two messages
+ call term_sendkeys(buf, ":call EchoTwo()\<CR>")
+ call VerifyScreenDump(buf, 'Test_changing_cmdheight_6', {})
+
" clean up
call StopVimInTerminal(buf)
endfunc
static int included_patches[] =
{ /* Add new patch number below this line */
+/**/
+ 665,
/**/
664,
/**/
}
/*
- * command_height: called whenever p_ch has been changed
+ * Command_height: called whenever p_ch has been changed.
*/
void
command_height(void)
if (p_ch > old_p_ch && cmdline_row <= Rows - p_ch)
return;
+ // Update cmdline_row to what it should be: just below the last window.
+ cmdline_row = topframe->fr_height;
+
// If cmdline_row is smaller than what it is supposed to be for 'cmdheight'
// then set old_p_ch to what it would be, so that the windows get resized
// properly for the new value.