changeset 30259:48db7f8f1b44 v9.0.0465

patch 9.0.0465: cursor moves when cmdwin is closed when 'splitscroll' is off Commit: https://github.com/vim/vim/commit/e697d488901b6321ddaad68b553f0a434c97d849 Author: mityu <mityu.mail@gmail.com> Date: Wed Sep 14 17:27:36 2022 +0100 patch 9.0.0465: cursor moves when cmdwin is closed when 'splitscroll' is off Problem: Cursor moves when cmdwin is closed when 'splitscroll' is off. Solution: Temporarily set 'splitscroll' when jumping back to the original window. (closes #11128)
author Bram Moolenaar <Bram@vim.org>
date Wed, 14 Sep 2022 18:30:03 +0200
parents 562fc4cd9569
children 742a12140d60
files src/ex_getln.c src/testdir/test_window_cmd.vim src/version.c
diffstat 3 files changed, 13 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/src/ex_getln.c
+++ b/src/ex_getln.c
@@ -4405,6 +4405,7 @@ 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
@@ -4643,7 +4644,11 @@ open_cmdwin(void)
 	// First go back to the original window.
 	wp = curwin;
 	set_bufref(&bufref, curbuf);
+
+	save_p_spsc = p_spsc;
+	p_spsc = TRUE;
 	win_goto(old_curwin);
+	p_spsc = save_p_spsc;
 
 	// win_goto() may trigger an autocommand that already closes the
 	// cmdline window.
--- a/src/testdir/test_window_cmd.vim
+++ b/src/testdir/test_window_cmd.vim
@@ -1734,9 +1734,13 @@ func Test_splitscroll_with_splits()
               above copen | wincmd j
               call assert_equal(win_screenpos(0)[0] - tabline, line("w0"))
 
-              " No scroll when opening cmdwin
-              only | norm ggLq:
+              " No scroll when opening cmdwin, and no cursor move when closing
+              " cmdwin.
+              only | norm ggL
+              let curpos = getcurpos()
+              norm q:
               call assert_equal(1, line("w0"))
+              call assert_equal(curpos, getcurpos())
 
               " Scroll when cursor becomes invalid in insert mode
               norm Lic
--- 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 */
 /**/
+    465,
+/**/
     464,
 /**/
     463,