From 3735f11050616652525bf80b4fbcb2b3bfeab113 Mon Sep 17 00:00:00 2001 From: Luuk van Baal Date: Thu, 15 Sep 2022 12:43:26 +0100 Subject: 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) --- src/ex_getln.c | 6 ++---- src/globals.h | 5 +++++ src/version.c | 2 ++ src/window.c | 4 ++++ 4 files changed, 13 insertions(+), 4 deletions(-) diff --git a/src/ex_getln.c b/src/ex_getln.c index 4a5ac318e..70436b31f 100644 --- 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 index 521832428..568d3b3c8 100644 --- a/src/globals.h +++ b/src/globals.h @@ -1737,3 +1737,8 @@ EXTERN int channel_need_redraw INIT(= FALSE); // 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 index 82a21df03..8b4efd7db 100644 --- a/src/version.c +++ b/src/version.c @@ -703,6 +703,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 469, /**/ 468, /**/ diff --git a/src/window.c b/src/window.c index 6fefcac75..fc7b8df3b 100644 --- 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. -- cgit v1.2.1