summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLuuk van Baal <luukvbaal@gmail.com>2022-09-23 12:57:09 +0100
committerBram Moolenaar <Bram@vim.org>2022-09-23 12:57:09 +0100
commit20e58561abc4116f3bfbafaef242d886dd77b303 (patch)
tree9dbca95dc3d3d4a36a2e99cf3c0362b2d6966e2d
parentf8addf1ca1d8c7801f6dded2341b7084d2b93e5e (diff)
downloadvim-git-20e58561abc4116f3bfbafaef242d886dd77b303.tar.gz
patch 9.0.0555: scrolling with 'nosplitscroll' in callback changing curwinv9.0.0555
Problem: Scrolling with 'nosplitscroll' in callback changing curwin. Solution: Invalidate w_cline_row in the right place. (Luuk van Baal, closes #11185)
-rw-r--r--src/testdir/dumps/Test_nosplitscroll_callback_1.dump8
-rw-r--r--src/testdir/dumps/Test_nosplitscroll_callback_2.dump8
-rw-r--r--src/testdir/dumps/Test_nosplitscroll_callback_3.dump8
-rw-r--r--src/testdir/dumps/Test_nosplitscroll_callback_4.dump8
-rw-r--r--src/testdir/test_window_cmd.vim31
-rw-r--r--src/version.c2
-rw-r--r--src/window.c4
7 files changed, 68 insertions, 1 deletions
diff --git a/src/testdir/dumps/Test_nosplitscroll_callback_1.dump b/src/testdir/dumps/Test_nosplitscroll_callback_1.dump
new file mode 100644
index 000000000..4f3a85103
--- /dev/null
+++ b/src/testdir/dumps/Test_nosplitscroll_callback_1.dump
@@ -0,0 +1,8 @@
+|0+0&#ffffff0| @73
+|1| @73
+|2| @73
+|[+1&&|N|o| |N|a|m|e|]| |[|+|]| @43|1|,|1| @11|T|o|p
+>4+0&&| @73
+|5| @73
+|[+3&&|N|o| |N|a|m|e|]| |[|+|]| @43|5|,|1| @11|6@1|%
+| +0&&@74
diff --git a/src/testdir/dumps/Test_nosplitscroll_callback_2.dump b/src/testdir/dumps/Test_nosplitscroll_callback_2.dump
new file mode 100644
index 000000000..1537db5c7
--- /dev/null
+++ b/src/testdir/dumps/Test_nosplitscroll_callback_2.dump
@@ -0,0 +1,8 @@
+>0+0&#ffffff0| @73
+|1| @73
+|2| @73
+|[+3&&|N|o| |N|a|m|e|]| |[|+|]| @43|1|,|1| @11|T|o|p
+|4+0&&| @73
+|5| @73
+|[+1&&|N|o| |N|a|m|e|]| |[|+|]| @43|1|,|1| @11|6@1|%
+| +0&&@74
diff --git a/src/testdir/dumps/Test_nosplitscroll_callback_3.dump b/src/testdir/dumps/Test_nosplitscroll_callback_3.dump
new file mode 100644
index 000000000..7f265b9d2
--- /dev/null
+++ b/src/testdir/dumps/Test_nosplitscroll_callback_3.dump
@@ -0,0 +1,8 @@
+>1+0&#ffffff0| @73
+|2| @73
+|[+3&&|N|o| |N|a|m|e|]| |[|+|]| @43|2|,|1| @11|1|6|%
+|4+0&&| @73
+|5| @73
+|6| @73
+|[+1&&|N|o| |N|a|m|e|]| |[|+|]| @43|6|,|1| @11|8|0|%
+| +0&&@74
diff --git a/src/testdir/dumps/Test_nosplitscroll_callback_4.dump b/src/testdir/dumps/Test_nosplitscroll_callback_4.dump
new file mode 100644
index 000000000..25da180ae
--- /dev/null
+++ b/src/testdir/dumps/Test_nosplitscroll_callback_4.dump
@@ -0,0 +1,8 @@
+|1+0&#ffffff0| @73
+|2| @73
+|[+1&&|N|o| |N|a|m|e|]| |[|+|]| @43|8|,|1| @11|1|6|%
+|4+0&&| @73
+>5| @73
+|6| @73
+|[+3&&|N|o| |N|a|m|e|]| |[|+|]| @43|6|,|1| @11|8|0|%
+| +0&&@74
diff --git a/src/testdir/test_window_cmd.vim b/src/testdir/test_window_cmd.vim
index 21e9906db..2ee441787 100644
--- a/src/testdir/test_window_cmd.vim
+++ b/src/testdir/test_window_cmd.vim
@@ -1,6 +1,7 @@
" Tests for window cmd (:wincmd, :split, :vsplit, :resize and etc...)
source check.vim
+source screendump.vim
func Test_window_cmd_ls0_with_split()
set ls=0
@@ -1817,4 +1818,34 @@ function Test_nosplitscroll_misc()
set splitscroll&
endfunc
+function Test_nosplitscroll_callback()
+ CheckScreendump
+ let lines =<< trim END
+ set nosplitscroll
+ call setline(1, range(&lines))
+ function WincmdCb(a, b)
+ split | wincmd p
+ endfunction
+ function TermCb(a, b)
+ close | split
+ endfunction
+ nnoremap t <cmd>call popup_create(term_start(&shell, { 'hidden': 1, 'exit_cb': 'TermCb' }), {})<CR>
+ nnoremap j <cmd>call job_start([&shell, &shellcmdflag, "echo"], { 'exit_cb': 'WincmdCb' })<CR>
+ END
+ call writefile(lines, 'XTestNosplitscrollCallback', 'D')
+ let buf = RunVimInTerminal('-S XTestNosplitscrollCallback', #{rows: 8})
+
+ call term_sendkeys(buf, "j")
+ call VerifyScreenDump(buf, 'Test_nosplitscroll_callback_1', {})
+
+ call term_sendkeys(buf, ":quit\<CR>Htexit\<CR>")
+ call VerifyScreenDump(buf, 'Test_nosplitscroll_callback_2', {})
+
+ call term_sendkeys(buf, ":set sb\<CR>:quit\<CR>Gj")
+ call VerifyScreenDump(buf, 'Test_nosplitscroll_callback_3', {})
+
+ call term_sendkeys(buf, ":quit\<CR>Gtexit\<CR>")
+ call VerifyScreenDump(buf, 'Test_nosplitscroll_callback_4', {})
+endfunc
+
" vim: shiftwidth=2 sts=2 expandtab
diff --git a/src/version.c b/src/version.c
index 23f822c17..617b76c2f 100644
--- a/src/version.c
+++ b/src/version.c
@@ -700,6 +700,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 555,
+/**/
554,
/**/
553,
diff --git a/src/window.c b/src/window.c
index d73dfd9fd..755848e43 100644
--- a/src/window.c
+++ b/src/window.c
@@ -6360,7 +6360,7 @@ win_fix_scroll(int resize)
win_T *wp;
linenr_T lnum;
- skip_update_topline = TRUE; // avoid scrolling in curs_rows()
+ skip_update_topline = TRUE; // avoid scrolling in curs_columns()
FOR_ALL_WINDOWS(wp)
{
// Skip when window height has not changed.
@@ -6378,6 +6378,8 @@ win_fix_scroll(int resize)
scroll_to_fraction(wp, wp->w_prev_height);
wp->w_cursor.lnum = lnum;
}
+ else if (wp == curwin)
+ wp->w_valid &= ~VALID_CROW;
invalidate_botline_win(wp);
validate_botline_win(wp);
}