From: Luuk van Baal Date: Tue, 28 Apr 2026 21:09:45 +0000 (+0000) Subject: patch 9.2.0413: Scrolling wrong with 'splitkeep' when changing 'cmdheight' X-Git-Tag: v9.2.0413^0 X-Git-Url: http://git.ipfire.org/gitweb/?a=commitdiff_plain;h=bd0f3e6da5df70ab2250264d0a7efc7db83c3dc8;p=thirdparty%2Fvim.git patch 9.2.0413: Scrolling wrong with 'splitkeep' when changing 'cmdheight' Problem: Cursor is not adjusted when 'cmdheight' is changed to cover the cursor with 'splitkeep' ~= "cursor". Solution: Handle window resize for 'splitkeep' after changing 'cmdheight'. Ensure previous window height is set when changing 'splitkeep' (Luuk van Baal). closes: #20043 Signed-off-by: Luuk van Baal Signed-off-by: Christian Brabandt --- diff --git a/src/optionstr.c b/src/optionstr.c index 72f5dd3ced..0390d2dac7 100644 --- a/src/optionstr.c +++ b/src/optionstr.c @@ -4384,6 +4384,10 @@ expand_set_spellsuggest(optexpand_T *args, int *numMatches, char_u ***matches) char * did_set_splitkeep(optset_T *args UNUSED) { + win_T *wp; + tabpage_T *tp; + FOR_ALL_TAB_WINDOWS(tp, wp) + wp->w_prev_height = wp->w_height; return did_set_opt_strings(p_spk, p_spk_values, FALSE); } diff --git a/src/testdir/test_window_cmd.vim b/src/testdir/test_window_cmd.vim index 98e9ba83db..b1305c77e1 100644 --- a/src/testdir/test_window_cmd.vim +++ b/src/testdir/test_window_cmd.vim @@ -1992,6 +1992,16 @@ func Test_splitkeep_screen_cursor_pos() set splitkeep& endfunc +func Test_splitkeep_cmdheight() + set splitkeep=screen + call setline(1, range(&lines)) + norm! G + set cmdheight=2 + call assert_equal(&lines - 1, line('.')) + %bwipeout! + set splitkeep& cmdheight& +endfunc + func Test_splitkeep_cursor() CheckScreendump let lines =<< trim END diff --git a/src/version.c b/src/version.c index 778a227b7a..824a80de9c 100644 --- a/src/version.c +++ b/src/version.c @@ -729,6 +729,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 413, /**/ 412, /**/ diff --git a/src/window.c b/src/window.c index c3acd7af33..8813ffa808 100644 --- a/src/window.c +++ b/src/window.c @@ -7591,6 +7591,7 @@ command_height(void) } if (p_ch < old_p_ch && command_frame_height && frp != NULL) frame_add_height(frp, (int)(old_p_ch - p_ch)); + win_fix_scroll(true); // Recompute window positions. win_comp_pos();