# HG changeset patch # User Bram Moolenaar # Date 1664981104 -7200 # Node ID 57ebc2a4d2ca1f98b43f4af8a127a22b86a9a8c9 # Parent 98e49ec3e3ba2d898be8534e39de7c2dc2278c6c patch 9.0.0665: setting 'cmdheight' has no effect if last window was resized Commit: https://github.com/vim/vim/commit/0816f473ab2f6cf7d8311c0f97371cada7f20d18 Author: Bram Moolenaar Date: Wed Oct 5 15:42:32 2022 +0100 patch 9.0.0665: setting 'cmdheight' has no effect if last window was resized 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) diff --git a/src/option.c b/src/option.c --- a/src/option.c +++ b/src/option.c @@ -3577,11 +3577,12 @@ set_num_option( // 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(); } diff --git a/src/testdir/dumps/Test_changing_cmdheight_6.dump b/src/testdir/dumps/Test_changing_cmdheight_6.dump new file mode 100644 --- /dev/null +++ b/src/testdir/dumps/Test_changing_cmdheight_6.dump @@ -0,0 +1,8 @@ +> +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 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 @@ -248,6 +248,13 @@ func Test_changing_cmdheight() 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') @@ -272,6 +279,10 @@ func Test_changing_cmdheight() call term_sendkeys(buf, ":set cmdheight=1\") call VerifyScreenDump(buf, 'Test_changing_cmdheight_5', {}) + " setting 'cmdheight' works after outputting two messages + call term_sendkeys(buf, ":call EchoTwo()\") + call VerifyScreenDump(buf, 'Test_changing_cmdheight_6', {}) + " clean up call StopVimInTerminal(buf) endfunc diff --git a/src/version.c b/src/version.c --- a/src/version.c +++ b/src/version.c @@ -700,6 +700,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 665, +/**/ 664, /**/ 663, diff --git a/src/window.c b/src/window.c --- a/src/window.c +++ b/src/window.c @@ -6644,7 +6644,7 @@ win_comp_scroll(win_T *wp) } /* - * command_height: called whenever p_ch has been changed + * Command_height: called whenever p_ch has been changed. */ void command_height(void) @@ -6663,6 +6663,9 @@ 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.