summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorzeertzjq <zeertzjq@outlook.com>2023-08-11 23:48:27 +0200
committerChristian Brabandt <cb@256bit.org>2023-08-11 23:48:27 +0200
commit7b7b4cb6f274e7bace127107b0d2752133c4020b (patch)
treeee793096314a3470ac2caa835ef2ed06ad15c4e6 /src
parentf6cdab3704959379086d6a097fabdf6c55d73779 (diff)
patch 9.0.1691: wrong viewport restored for incsearch and smoothscrollv9.0.1691
Problem: wrong viewport restored for incsearch and smoothscroll Solution: Save and restore skipcol as well closes: #12713 Signed-off-by: Christian Brabandt <cb@256bit.org> Co-authored-by: zeertzjq <zeertzjq@outlook.com>
Diffstat (limited to 'src')
-rw-r--r--src/ex_getln.c3
-rw-r--r--src/testdir/dumps/Test_incsearch_restore_view_01.dump6
-rw-r--r--src/testdir/dumps/Test_incsearch_restore_view_02.dump6
-rw-r--r--src/testdir/test_search.vim22
-rw-r--r--src/version.c2
5 files changed, 39 insertions, 0 deletions
diff --git a/src/ex_getln.c b/src/ex_getln.c
index 00d32920b6..55b4632ac3 100644
--- a/src/ex_getln.c
+++ b/src/ex_getln.c
@@ -122,6 +122,7 @@ empty_pattern_magic(char_u *p, size_t len, magic_T magic_val)
typedef struct {
colnr_T vs_curswant;
colnr_T vs_leftcol;
+ colnr_T vs_skipcol;
linenr_T vs_topline;
# ifdef FEAT_DIFF
int vs_topfill;
@@ -135,6 +136,7 @@ save_viewstate(viewstate_T *vs)
{
vs->vs_curswant = curwin->w_curswant;
vs->vs_leftcol = curwin->w_leftcol;
+ vs->vs_skipcol = curwin->w_skipcol;
vs->vs_topline = curwin->w_topline;
# ifdef FEAT_DIFF
vs->vs_topfill = curwin->w_topfill;
@@ -148,6 +150,7 @@ restore_viewstate(viewstate_T *vs)
{
curwin->w_curswant = vs->vs_curswant;
curwin->w_leftcol = vs->vs_leftcol;
+ curwin->w_skipcol = vs->vs_skipcol;
curwin->w_topline = vs->vs_topline;
# ifdef FEAT_DIFF
curwin->w_topfill = vs->vs_topfill;
diff --git a/src/testdir/dumps/Test_incsearch_restore_view_01.dump b/src/testdir/dumps/Test_incsearch_restore_view_01.dump
new file mode 100644
index 0000000000..6ad0b245f7
--- /dev/null
+++ b/src/testdir/dumps/Test_incsearch_restore_view_01.dump
@@ -0,0 +1,6 @@
+|<+0#4040ff13#ffffff0@2| +0#0000000&|1|8| |1|9| |2|0| |2|1| |2@1| |2
+>3| |2|4| @15
+@20
+@20
+@20
+@10|1|,|6|1| @1|T|o|p|
diff --git a/src/testdir/dumps/Test_incsearch_restore_view_02.dump b/src/testdir/dumps/Test_incsearch_restore_view_02.dump
new file mode 100644
index 0000000000..2a2c9a2b8b
--- /dev/null
+++ b/src/testdir/dumps/Test_incsearch_restore_view_02.dump
@@ -0,0 +1,6 @@
+| +0&#ffffff0@19
+@20
+@20
+@20
+|x+1&&@2| +0&&@16
+|/|x@2> @15
diff --git a/src/testdir/test_search.vim b/src/testdir/test_search.vim
index ef44751659..f3bc6bff70 100644
--- a/src/testdir/test_search.vim
+++ b/src/testdir/test_search.vim
@@ -2080,6 +2080,28 @@ func Test_incsearch_substitute_dump2()
call StopVimInTerminal(buf)
endfunc
+func Test_incsearch_restore_view()
+ CheckOption incsearch
+ CheckScreendump
+
+ let lines =<< trim [CODE]
+ set incsearch nohlsearch
+ setlocal scrolloff=0 smoothscroll
+ call setline(1, [join(range(25), ' '), '', '', '', '', 'xxx'])
+ call feedkeys("2\<C-E>", 't')
+ [CODE]
+ call writefile(lines, 'Xincsearch_restore_view', 'D')
+ let buf = RunVimInTerminal('-S Xincsearch_restore_view', {'rows': 6, 'cols': 20})
+
+ call VerifyScreenDump(buf, 'Test_incsearch_restore_view_01', {})
+ call term_sendkeys(buf, '/xxx')
+ call VerifyScreenDump(buf, 'Test_incsearch_restore_view_02', {})
+ call term_sendkeys(buf, "\<Esc>")
+ call VerifyScreenDump(buf, 'Test_incsearch_restore_view_01', {})
+
+ call StopVimInTerminal(buf)
+endfunc
+
func Test_pattern_is_uppercase_smartcase()
new
let input=['abc', 'ABC', 'Abc', 'abC']
diff --git a/src/version.c b/src/version.c
index d8b9f0ef98..f0ec4bc2d1 100644
--- a/src/version.c
+++ b/src/version.c
@@ -696,6 +696,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 1691,
+/**/
1690,
/**/
1689,