# HG changeset patch # User Bram Moolenaar # Date 1663242303 -7200 # Node ID be97adfeac3afd5de4d689fed24dbf8d480ecaa1 # Parent 80e69919b10d637d9303adbf727b63ae1e43abef patch 9.0.0469: cursor moves if cmdwin is closed when 'splitscroll' is off Commit: https://github.com/vim/vim/commit/3735f11050616652525bf80b4fbcb2b3bfeab113 Author: Luuk van Baal Date: Thu Sep 15 12:43:26 2022 +0100 patch 9.0.0469: cursor moves if cmdwin is closed when 'splitscroll' is off Problem: Cursor moves if cmdwin is closed when 'splitscroll' is off. Solution: Skip win_fix_cursor if called when cmdwin is open or closing. (Luuk van Baal, closes #11134) diff --git a/src/ex_getln.c b/src/ex_getln.c --- a/src/ex_getln.c +++ b/src/ex_getln.c @@ -4405,7 +4405,6 @@ open_cmdwin(void) int save_restart_edit = restart_edit; int save_State = State; int save_exmode = exmode_active; - int save_p_spsc; #ifdef FEAT_RIGHTLEFT int save_cmdmsg_rl = cmdmsg_rl; #endif @@ -4645,10 +4644,8 @@ open_cmdwin(void) wp = curwin; set_bufref(&bufref, curbuf); - save_p_spsc = p_spsc; - p_spsc = TRUE; + skip_win_fix_cursor = TRUE; win_goto(old_curwin); - p_spsc = save_p_spsc; // win_goto() may trigger an autocommand that already closes the // cmdline window. @@ -4662,6 +4659,7 @@ open_cmdwin(void) // Restore window sizes. win_size_restore(&winsizes); + skip_win_fix_cursor = FALSE; } ga_clear(&winsizes); diff --git a/src/globals.h b/src/globals.h --- a/src/globals.h +++ b/src/globals.h @@ -1737,3 +1737,8 @@ EXTERN int channel_need_redraw INIT(= FA // While executing a regexp and set to OPTION_MAGIC_ON or OPTION_MAGIC_OFF this // overrules p_magic. Otherwise set to OPTION_MAGIC_NOT_SET. EXTERN optmagic_T magic_overruled INIT(= OPTION_MAGIC_NOT_SET); + +#ifdef FEAT_CMDWIN +// Skip win_fix_cursor() call for 'nosplitscroll' when cmdwin is closed. +EXTERN int skip_win_fix_cursor INIT(= FALSE); +#endif diff --git a/src/version.c b/src/version.c --- a/src/version.c +++ b/src/version.c @@ -704,6 +704,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 469, +/**/ 468, /**/ 467, diff --git a/src/window.c b/src/window.c --- a/src/window.c +++ b/src/window.c @@ -6410,6 +6410,10 @@ win_fix_cursor(int normal) if (wp->w_buffer->b_ml.ml_line_count < wp->w_height) return; +#ifdef FEAT_CMDWIN + if (skip_win_fix_cursor) + return; +#endif so = MIN(wp->w_height / 2, so); // Check if cursor position is above topline or below botline.