patch 9.1.1238: wrong cursor column with 'set splitkeep=screen'
Commit:
https://github.com/vim/vim/commit/7746348c5d0f4c4707503f856d0335d8921e8d50
Author: phanium <[email protected]>
Date: Tue Mar 25 20:15:31 2025 +0100
patch 9.1.1238: wrong cursor column with 'set splitkeep=screen'
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
short | vim - -u NONE --cmd 'set
splitkeep=screen' +'norm $' +new +q
```
fixes: #16968
closes: #16971
Signed-off-by: phanium <[email protected]>
Signed-off-by: Christian Brabandt <[email protected]>
diff --git a/src/testdir/test_window_cmd.vim b/src/testdir/test_window_cmd.vim
index b6381a33b..c5edb0d4a 100644
--- a/src/testdir/test_window_cmd.vim
+++ b/src/testdir/test_window_cmd.vim
@@ -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
diff --git a/src/version.c b/src/version.c
index ac7d719a5..2f4c3b311 100644
--- 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 */
+/**/
+ 1238,
/**/
1237,
/**/
diff --git a/src/window.c b/src/window.c
index 4fb7054e5..21f81e5fc 100644
--- a/src/window.c
+++ b/src/window.c
@@ -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;
--
--
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php
---
You received this message because you are subscribed to the Google Groups
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion visit
https://groups.google.com/d/msgid/vim_dev/E1tx9yO-00FIxG-UH%40256bit.org.