patch 9.0.1772: Cursor may be adjusted in 'splitkeep'ed windows
Problem: Cursor is adjusted in window that did not change in size by
'splitkeep'.
Solution: Only check that cursor position is valid in a window that
has changed in size.
closes: #12509
Signed-off-by: Christian Brabandt <cb@256bit.org>
Co-authored-by: Luuk van Baal <luukvbaal@gmail.com>
diff --git a/src/testdir/dumps/Test_splitkeep_cursor_1.dump b/src/testdir/dumps/Test_splitkeep_cursor_1.dump
new file mode 100644
index 0000000..3b30e82
--- /dev/null
+++ b/src/testdir/dumps/Test_splitkeep_cursor_1.dump
@@ -0,0 +1,8 @@
+|9+0&#ffffff0@1| @72
+>1|0@1| @71
+|1|0|1| @71
+|[+3&&|N|o| |N|a|m|e|]| |[|+|]| @43|1|0@1|,|1| @9|4|9|%
+|5+0&&| @73
+|6| @73
+|[+1&&|N|o| |N|a|m|e|]| |[|+|]| @43|5|,|1| @12|2|%
+| +0&&@74
diff --git a/src/testdir/dumps/Test_splitkeep_cursor_2.dump b/src/testdir/dumps/Test_splitkeep_cursor_2.dump
new file mode 100644
index 0000000..bff6940
--- /dev/null
+++ b/src/testdir/dumps/Test_splitkeep_cursor_2.dump
@@ -0,0 +1,8 @@
+|1+0&#ffffff0|0@1| @71
+>1|0|1| @71
+|1|0|2| @71
+|[+3&&|N|o| |N|a|m|e|]| |[|+|]| @43|1|0|1|,|1| @9|5|0|%
+|5+0&&| @73
+|6| @73
+|[+1&&|N|o| |N|a|m|e|]| |[|+|]| @43|5|,|1| @12|2|%
+| +0&&@74
diff --git a/src/testdir/dumps/Test_splitkeep_cursor_3.dump b/src/testdir/dumps/Test_splitkeep_cursor_3.dump
new file mode 100644
index 0000000..979cd00
--- /dev/null
+++ b/src/testdir/dumps/Test_splitkeep_cursor_3.dump
@@ -0,0 +1,8 @@
+|1+0&#ffffff0|9|8| @71
+|1|9@1| @71
+>2|0@1| @71
+|[+3&&|N|o| |N|a|m|e|]| |[|+|]| @43|2|0@1|,|1| @9|B|o|t
+|5+0&&| @73
+|6| @73
+|[+1&&|N|o| |N|a|m|e|]| |[|+|]| @43|5|,|1| @12|2|%
+|:+0&&|s|e|t| |s|c|r|o|l@1|o|f@1|=|0| @58
diff --git a/src/testdir/test_window_cmd.vim b/src/testdir/test_window_cmd.vim
index 03c51e8..818fef0 100644
--- a/src/testdir/test_window_cmd.vim
+++ b/src/testdir/test_window_cmd.vim
@@ -1861,6 +1861,33 @@
set splitkeep&
endfunc
+func Test_splitkeep_cursor()
+ CheckScreendump
+ let lines =<< trim END
+ set splitkeep=screen
+ autocmd CursorMoved * wincmd p | wincmd p
+ call setline(1, range(1, 200))
+ func CursorEqualize()
+ call cursor(100, 1)
+ wincmd =
+ endfunc
+ wincmd s
+ call CursorEqualize()
+ END
+ call writefile(lines, 'XTestSplitkeepCallback', 'D')
+ let buf = RunVimInTerminal('-S XTestSplitkeepCallback', #{rows: 8})
+
+ call VerifyScreenDump(buf, 'Test_splitkeep_cursor_1', {})
+
+ call term_sendkeys(buf, "j")
+ call VerifyScreenDump(buf, 'Test_splitkeep_cursor_2', {})
+
+ call term_sendkeys(buf, ":set scrolloff=0\<CR>G")
+ call VerifyScreenDump(buf, 'Test_splitkeep_cursor_3', {})
+
+ call StopVimInTerminal(buf)
+endfunc
+
func Test_splitkeep_callback()
CheckScreendump
let lines =<< trim END