]> granicus.if.org Git - vim/commitdiff
patch 9.0.1312: Cursor position wrong when splitting window in insert mode v9.0.1312
authorLuuk van Baal <luukvbaal@gmail.com>
Wed, 15 Feb 2023 16:45:27 +0000 (16:45 +0000)
committerBram Moolenaar <Bram@vim.org>
Wed, 15 Feb 2023 16:45:27 +0000 (16:45 +0000)
Problem:    Cursor position wrong when splitting window in insert mode.
Solution:   Pass the actual mode to win_fix_cursor(). (Luuk van Baal,
            closes #11999,

src/testdir/test_window_cmd.vim
src/version.c
src/window.c

index 1441db5845f3bde8ead21a2cf3ce52b9e2f5a351..969edff26fcbe46808884174d74b1c3b3202a9d2 100644 (file)
@@ -1753,14 +1753,7 @@ func Test_splitkeep_options()
 
     " Scroll when cursor becomes invalid in insert mode.
     norm Lic
-    call assert_equal(curpos[0], getcurpos()[0], 'run ' .. run)
-
-    " The line number might be one less because of round-off.
-    call assert_inrange(curpos[1] - 1, curpos[1], getcurpos()[1], 'run ' .. run)
-
-    call assert_equal(curpos[2], getcurpos()[2], 'run ' .. run)
-    call assert_equal(curpos[3], getcurpos()[3], 'run ' .. run)
-    call assert_equal(curpos[4], getcurpos()[4], 'run ' .. run)
+    call assert_equal(curpos, getcurpos(), 'run ' .. run)
 
     " No scroll when topline not equal to 1
     only | execute "norm gg5\<C-e>" | split | wincmd k
index c59a3a1df4b9eedbb88f60ce1c3a16b55732a845..080c3ad0c35febe904627110d34178a9dac0f473 100644 (file)
@@ -695,6 +695,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    1312,
 /**/
     1311,
 /**/
index 234d2a87f9469d6e27fdbf5db5e68f2658b46fbd..e9033324943f9ee4fa022699fc258e7fdbfd137e 100644 (file)
@@ -5328,7 +5328,10 @@ win_enter_ext(win_T *wp, int flags)
     if (*p_spk == 'c')         // assume cursor position needs updating
        changed_line_abv_curs();
     else
-       win_fix_cursor(TRUE);
+       // Make sure the cursor position is valid, either by moving the cursor
+       // or by scrolling the text.
+       win_fix_cursor(
+               get_real_state() & (MODE_NORMAL|MODE_CMDLINE|MODE_TERMINAL));
 
     // Now it is OK to parse messages again, which may be needed in
     // autocommands.
@@ -6782,7 +6785,8 @@ win_fix_scroll(int resize)
 /*
  * Make sure the cursor position is valid for 'splitkeep'.
  * If it is not, put the cursor position in the jumplist and move it.
- * If we are not in normal mode, scroll to make valid instead.
+ * If we are not in normal mode ("normal" is zero), make it valid by scrolling
+ * instead.
  */
     static void
 win_fix_cursor(int normal)