]> git.ipfire.org Git - thirdparty/vim.git/commitdiff
patch 9.1.1238: wrong cursor column with 'set splitkeep=screen' v9.1.1238
authorphanium <91544758+phanen@users.noreply.github.com>
Tue, 25 Mar 2025 19:15:31 +0000 (20:15 +0100)
committerChristian Brabandt <cb@256bit.org>
Tue, 25 Mar 2025 19:15:31 +0000 (20:15 +0100)
Problem:  With ':set splitkeep=screen', cursor did't restore column
          correctly when splitting a window on a line longer than the
          last line on the screen (after v9.1.0707)
Solution: Restore cursor column in `win_fix_scroll()` since it may be
          changed in `getvcol()` after 396fd1ec2956 (phanium).

Example:
```
echo longlonglongling\nshort | vim - -u NONE --cmd 'set
splitkeep=screen' +'norm $' +new +q
```

fixes: #16968
closes: #16971

Signed-off-by: phanium <91544758+phanen@users.noreply.github.com>
Signed-off-by: Christian Brabandt <cb@256bit.org>
src/testdir/test_window_cmd.vim
src/version.c
src/window.c

index b6381a33b7a1ca7bcd7eaafecf6347529a5143a4..c5edb0d4a871c7cad6e5cc8cba8736d7a6af66a5 100644 (file)
@@ -1979,6 +1979,18 @@ func Test_splitkeep_misc()
   set splitkeep&
 endfunc
 
+func Test_splitkeep_screen_cursor_pos()
+  new
+  set splitkeep=screen
+  call setline(1, ["longer than the last", "shorter"])
+  norm! $
+  wincmd s
+  close
+  call assert_equal([0, 1, 20, 0], getpos('.'))
+  %bwipeout!
+  set splitkeep&
+endfunc
+
 func Test_splitkeep_cursor()
   CheckScreendump
   let lines =<< trim END
index ac7d719a5ac75cd93c7a8282d2e5c1c8e80877b4..2f4c3b3111ee4e3a530dd8c8e1a33710c1582fb0 100644 (file)
@@ -704,6 +704,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    1238,
 /**/
     1237,
 /**/
index 4fb7054e5b28691370402f9241e311d0695676b5..21f81e5fc041ee216cd95ddefe0b7fd88bac4c4b 100644 (file)
@@ -7038,7 +7038,7 @@ win_fix_scroll(int resize)
            {
                int diff = (wp->w_winrow - wp->w_prev_winrow)
                                          + (wp->w_height - wp->w_prev_height);
-               linenr_T lnum = wp->w_cursor.lnum;
+               pos_T cursor = wp->w_cursor;
                wp->w_cursor.lnum = wp->w_botline - 1;
 
                //  Add difference in height and row to botline.
@@ -7052,7 +7052,8 @@ win_fix_scroll(int resize)
                wp->w_fraction = FRACTION_MULT;
                scroll_to_fraction(wp, wp->w_prev_height);
 
-               wp->w_cursor.lnum = lnum;
+               wp->w_cursor = cursor;
+               wp->w_valid &= ~VALID_WCOL;
            }
            else if (wp == curwin)
                wp->w_valid &= ~VALID_CROW;