]> git.ipfire.org Git - thirdparty/vim.git/commitdiff
patch 9.2.0871: screen line is lost when splitting a 'winfixheight' window v9.2.0871
authorHirohito Higashi <h.east.727@gmail.com>
Tue, 28 Jul 2026 20:45:27 +0000 (20:45 +0000)
committerChristian Brabandt <cb@256bit.org>
Tue, 28 Jul 2026 20:45:27 +0000 (20:45 +0000)
Problem:  When the only window has 'winfixheight' set and 'laststatus'
          is one, splitting it leaves one screen line unused.  This
          happens for example when jumping to an item from a maximized
          quickfix window (rendcrx)
Solution: Do not subtract the height of the status line twice
          (Hirohito Higashi)

fixes:  #20495
closes: #20871

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Signed-off-by: Hirohito Higashi <h.east.727@gmail.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
src/testdir/test_window_cmd.vim
src/version.c
src/window.c

index e7f391ed9c984d509f5c2f64efb61b4bf77795ed..bf524030f9141b01fb455a885ea50a6ce9690fc7 100644 (file)
@@ -2481,6 +2481,23 @@ func Test_winfixheight_resize_wmh_zero()
   set winminheight& laststatus&
 endfunc
 
+" Splitting the only window while it has 'winfixheight' set and 'laststatus' is
+" one must not leave a screen line unused.
+func Test_winfixheight_split_only_window()
+  set laststatus=1
+  new
+  only!
+  setlocal winfixheight
+  split
+  " Two windows, both with a status line, and the command line.
+  call assert_equal(&lines - &cmdheight - 2, winheight(1) + winheight(2))
+
+  only!
+  setlocal winfixheight&
+  set laststatus&
+  bwipe!
+endfunc
+
 " Test that setting 'laststatus' from 0 to 2 gives all windows in a vertical
 " split (FR_ROW) the same height and correct status line position.
 func Test_laststatus_vsplit_row_height()
index 167dd49382f940cc2685f34dcb846ed98b83b2aa..725d66af7fba6e90f67f9c6a806baf43edba37fc 100644 (file)
@@ -758,6 +758,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    871,
 /**/
     870,
 /**/
index 3933f4e88430bc3a217d5310426a28fb9b9d2815..f2ee69071d5599c3218b559fb04d16f291a68e2e 100644 (file)
@@ -1232,9 +1232,8 @@ win_split_ins(
 
            win_setheight_win(oldwin->w_height + new_size
                    + statusline_height(oldwin), oldwin);
+           // w_height now excludes the status line
            oldwin_height = oldwin->w_height;
-           if (need_status)
-               oldwin_height -= statusline_height(oldwin);
        }
 
        // Only make all windows the same height if one of them (except oldwin)