From 7b7b4cb6f274e7bace127107b0d2752133c4020b Mon Sep 17 00:00:00 2001 From: zeertzjq Date: Fri, 11 Aug 2023 23:48:27 +0200 Subject: patch 9.0.1691: wrong viewport restored for incsearch and smoothscroll Problem: wrong viewport restored for incsearch and smoothscroll Solution: Save and restore skipcol as well closes: #12713 Signed-off-by: Christian Brabandt Co-authored-by: zeertzjq --- src/ex_getln.c | 3 +++ .../dumps/Test_incsearch_restore_view_01.dump | 6 ++++++ .../dumps/Test_incsearch_restore_view_02.dump | 6 ++++++ src/testdir/test_search.vim | 22 ++++++++++++++++++++++ src/version.c | 2 ++ 5 files changed, 39 insertions(+) create mode 100644 src/testdir/dumps/Test_incsearch_restore_view_01.dump create mode 100644 src/testdir/dumps/Test_incsearch_restore_view_02.dump 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\", '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, "\") + 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 @@ -695,6 +695,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 1691, /**/ 1690, /**/ -- cgit v1.2.3