]> granicus.if.org Git - vim/commitdiff
patch 9.0.0665: setting 'cmdheight' has no effect if last window was resized v9.0.0665
authorBram Moolenaar <Bram@vim.org>
Wed, 5 Oct 2022 14:42:32 +0000 (15:42 +0100)
committerBram Moolenaar <Bram@vim.org>
Wed, 5 Oct 2022 14:42:32 +0000 (15:42 +0100)
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)

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

index 7d6b9547f6515e04e963631b832c1d202c75d034..1b8c3eae8c6f93ec0df88ebf3d6cc7cd9b3e3b97 100644 (file)
@@ -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 (file)
index 0000000..fb2a521
--- /dev/null
@@ -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
index 00939f9105f8ec0432fd0d094af355756fa3e050..3cfdd7648070b942bb14d84b34c15486c2b00159 100644 (file)
@@ -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\<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
index ed91d277ab99b3e39648276c13d66cb08bac7963..0f49ac275b1547ba48de13f862fcb67aa57af9e4 100644 (file)
@@ -699,6 +699,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    665,
 /**/
     664,
 /**/
index 52c458e033ebeedbea81161989825b16b6ad1c6c..79ff5a4269505d97979ed48b9973832f0de0d8e3 100644 (file)
@@ -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.