# HG changeset patch # User Christian Brabandt # Date 1524861006 -7200 # Node ID dd6a63e3e7c41a8530eabfd43dce0a6232015b71 # Parent 2df62da42cacb2c59939639fa55d838837a42987 patch 8.0.1767: with 'incsearch' text may jump up and down commit https://github.com/vim/vim/commit/9d34d90210ba52ebaf45973282e5921f5af364c7 Author: Bram Moolenaar Date: Fri Apr 27 22:18:12 2018 +0200 patch 8.0.1767: with 'incsearch' text may jump up and down Problem: With 'incsearch' text may jump up and down. () Solution: Besides w_botline also save and restore w_empty_rows. (closes # 2530) diff --git a/src/ex_getln.c b/src/ex_getln.c --- a/src/ex_getln.c +++ b/src/ex_getln.c @@ -237,8 +237,9 @@ getcmdline( int old_topfill; int init_topfill = curwin->w_topfill; # endif - linenr_T old_botline; + linenr_T old_botline, old_empty_rows; linenr_T init_botline = curwin->w_botline; + linenr_T init_empty_rows = curwin->w_empty_rows; int did_incsearch = FALSE; int incsearch_postponed = FALSE; #endif @@ -291,6 +292,7 @@ getcmdline( old_topfill = curwin->w_topfill; # endif old_botline = curwin->w_botline; + old_empty_rows = curwin->w_empty_rows; #endif /* @@ -1075,6 +1077,7 @@ getcmdline( old_topfill = init_topfill; # endif old_botline = init_botline; + old_empty_rows = init_empty_rows; } #endif redrawcmd(); @@ -1804,6 +1807,7 @@ getcmdline( old_topfill = curwin->w_topfill; # endif old_botline = curwin->w_botline; + old_empty_rows = curwin->w_empty_rows; update_screen(NOT_VALID); redrawcmdline(); } @@ -2020,6 +2024,7 @@ cmdline_changed: curwin->w_topfill = old_topfill; # endif curwin->w_botline = old_botline; + curwin->w_empty_rows = old_empty_rows; changed_cline_bef_curs(); update_topline(); @@ -2114,6 +2119,7 @@ returncmd: curwin->w_topfill = old_topfill; # endif curwin->w_botline = old_botline; + curwin->w_empty_rows = old_empty_rows; highlight_match = FALSE; validate_cursor(); /* needed for TAB */ redraw_all_later(SOME_VALID); diff --git a/src/testdir/dumps/Test_incsearch_scrolling_01.dump b/src/testdir/dumps/Test_incsearch_scrolling_01.dump new file mode 100644 --- /dev/null +++ b/src/testdir/dumps/Test_incsearch_scrolling_01.dump @@ -0,0 +1,9 @@ +|.+0&#ffffff0@69 +@50| @19 +|.@69 +@50| @19 +@70 +|t+1&&|a|r|g|e+0&&|t| @63 +|@+0#4040ff13&@2| @66 +|/+0#0000000&|t|a|r|g> @64 +@70 diff --git a/src/testdir/test_search.vim b/src/testdir/test_search.vim --- a/src/testdir/test_search.vim +++ b/src/testdir/test_search.vim @@ -1,6 +1,7 @@ " Test for the search command source shared.vim +source screendump.vim func Test_search_cmdline() if !exists('+incsearch') @@ -690,6 +691,36 @@ func Test_search_cmdline_incsearch_highl bwipe! endfunc +func Test_incsearch_scrolling() + if !CanRunVimInTerminal() + return + endif + call assert_equal(0, &scrolloff) + call writefile([ + \ 'let dots = repeat(".", 120)', + \ 'set incsearch cmdheight=2 scrolloff=0', + \ 'call setline(1, [dots, dots, dots, "", "target", dots, dots])', + \ 'normal gg', + \ 'redraw', + \ ], 'Xscript') + let buf = RunVimInTerminal('-S Xscript', {'rows': 9, 'cols': 70}) + " Need to send one key at a time to force a redraw + call term_sendkeys(buf, '/') + sleep 100m + call term_sendkeys(buf, 't') + sleep 100m + call term_sendkeys(buf, 'a') + sleep 100m + call term_sendkeys(buf, 'r') + sleep 100m + call term_sendkeys(buf, 'g') + call VerifyScreenDump(buf, 'Test_incsearch_scrolling_01', {}) + + call term_sendkeys(buf, "\") + call StopVimInTerminal(buf) + call delete('Xscript') +endfunc + func Test_search_undefined_behaviour() if !has("terminal") return diff --git a/src/version.c b/src/version.c --- a/src/version.c +++ b/src/version.c @@ -762,6 +762,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 1767, +/**/ 1766, /**/ 1765,