]> git.ipfire.org Git - thirdparty/vim.git/commitdiff
patch 9.0.1691: wrong viewport restored for incsearch and smoothscroll v9.0.1691
authorzeertzjq <zeertzjq@outlook.com>
Fri, 11 Aug 2023 21:48:27 +0000 (23:48 +0200)
committerChristian Brabandt <cb@256bit.org>
Fri, 11 Aug 2023 21:48:27 +0000 (23:48 +0200)
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>
src/ex_getln.c
src/testdir/dumps/Test_incsearch_restore_view_01.dump [new file with mode: 0644]
src/testdir/dumps/Test_incsearch_restore_view_02.dump [new file with mode: 0644]
src/testdir/test_search.vim
src/version.c

index 00d32920b67fb8912bf6b2e46c1063df1694c280..55b4632ac3c282fae323fd317b07393067a785e5 100644 (file)
@@ -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 (file)
index 0000000..6ad0b24
--- /dev/null
@@ -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 (file)
index 0000000..2a2c9a2
--- /dev/null
@@ -0,0 +1,6 @@
+| +0&#ffffff0@19
+@20
+@20
+@20
+|x+1&&@2| +0&&@16
+|/|x@2> @15
index ef4475165982b33c1505c0c15c771615d4a699a8..f3bc6bff7078e08d23c92644342713ea22f6016a 100644 (file)
@@ -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']
index d8b9f0ef98a92fbb5bbd396ddcbc8c49c9263d52..f0ec4bc2d1e59f9c3ada6c0b69e2d9de09cbc063 100644 (file)
@@ -695,6 +695,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    1691,
 /**/
     1690,
 /**/