summaryrefslogtreecommitdiff
path: root/data/vim/patches/8.1.0277
diff options
context:
space:
mode:
Diffstat (limited to 'data/vim/patches/8.1.0277')
-rw-r--r--data/vim/patches/8.1.0277316
1 files changed, 316 insertions, 0 deletions
diff --git a/data/vim/patches/8.1.0277 b/data/vim/patches/8.1.0277
new file mode 100644
index 000000000..a084393e4
--- /dev/null
+++ b/data/vim/patches/8.1.0277
@@ -0,0 +1,316 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0277
+Fcc: outbox
+From: Bram Moolenaar <Bram@moolenaar.net>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 8.1.0277
+Problem: 'incsearch' highlighting wrong in a few cases.
+Solution: Fix using last search pattern. Restore highlighting when changing
+ command. (issue #3321)
+Files: src/ex_getln.c, src/testdir/test_search.vim,
+ src/testdir/dumps/Test_incsearch_substitute_02.dump,
+ src/testdir/dumps/Test_incsearch_substitute_03.dump
+
+
+*** ../vim-8.1.0276/src/ex_getln.c 2018-08-12 15:49:33.551438415 +0200
+--- src/ex_getln.c 2018-08-12 17:27:32.113306665 +0200
+***************
+*** 300,306 ****
+ {
+ delim = *p++;
+ end = skip_regexp(p, delim, p_magic, NULL);
+! if (end > p)
+ {
+ char_u *dummy;
+ exarg_T ea;
+--- 300,306 ----
+ {
+ delim = *p++;
+ end = skip_regexp(p, delim, p_magic, NULL);
+! if (end > p || *end == delim)
+ {
+ char_u *dummy;
+ exarg_T ea;
+***************
+*** 341,346 ****
+--- 341,377 ----
+ return FALSE;
+ }
+
++ static void
++ finish_incsearch_highlighting(
++ int gotesc,
++ incsearch_state_T *is_state,
++ int call_update_screen)
++ {
++ if (is_state->did_incsearch)
++ {
++ is_state->did_incsearch = FALSE;
++ if (gotesc)
++ curwin->w_cursor = is_state->save_cursor;
++ else
++ {
++ if (!EQUAL_POS(is_state->save_cursor, is_state->search_start))
++ {
++ // put the '" mark at the original position
++ curwin->w_cursor = is_state->save_cursor;
++ setpcmark();
++ }
++ curwin->w_cursor = is_state->search_start;
++ }
++ restore_viewstate(&is_state->old_viewstate);
++ highlight_match = FALSE;
++ validate_cursor(); /* needed for TAB */
++ if (call_update_screen)
++ update_screen(SOME_VALID);
++ else
++ redraw_all_later(SOME_VALID);
++ }
++ }
++
+ /*
+ * Do 'incsearch' highlighting if desired.
+ */
+***************
+*** 357,366 ****
+ #ifdef FEAT_RELTIME
+ proftime_T tm;
+ #endif
+! int c;
+
+ if (!do_incsearch_highlighting(firstc, is_state, &skiplen, &patlen))
+ return;
+
+ // If there is a character waiting, search and redraw later.
+ if (char_avail())
+--- 388,401 ----
+ #ifdef FEAT_RELTIME
+ proftime_T tm;
+ #endif
+! int next_char;
+! int use_last_pat;
+
+ if (!do_incsearch_highlighting(firstc, is_state, &skiplen, &patlen))
++ {
++ finish_incsearch_highlighting(FALSE, is_state, TRUE);
+ return;
++ }
+
+ // If there is a character waiting, search and redraw later.
+ if (char_avail())
+***************
+*** 381,388 ****
+ }
+ save_last_search_pattern();
+
+! // If there is no command line, don't do anything.
+! if (patlen == 0)
+ {
+ i = 0;
+ set_no_hlsearch(TRUE); // turn off previous highlight
+--- 416,428 ----
+ }
+ save_last_search_pattern();
+
+! // Use the previous pattern for ":s//".
+! next_char = ccline.cmdbuff[skiplen + patlen];
+! use_last_pat = patlen == 0 && skiplen > 0
+! && ccline.cmdbuff[skiplen - 1] == next_char;
+!
+! // If there is no pattern, don't do anything.
+! if (patlen == 0 && !use_last_pat)
+ {
+ i = 0;
+ set_no_hlsearch(TRUE); // turn off previous highlight
+***************
+*** 403,409 ****
+ search_flags += SEARCH_KEEP;
+ if (search_first_line != 0)
+ search_flags += SEARCH_START;
+- c = ccline.cmdbuff[skiplen + patlen];
+ ccline.cmdbuff[skiplen + patlen] = NUL;
+ i = do_search(NULL, firstc == ':' ? '/' : firstc,
+ ccline.cmdbuff + skiplen, count, search_flags,
+--- 443,448 ----
+***************
+*** 413,419 ****
+ NULL, NULL
+ #endif
+ );
+! ccline.cmdbuff[skiplen + patlen] = c;
+ --emsg_off;
+
+ if (curwin->w_cursor.lnum < search_first_line
+--- 452,458 ----
+ NULL, NULL
+ #endif
+ );
+! ccline.cmdbuff[skiplen + patlen] = next_char;
+ --emsg_off;
+
+ if (curwin->w_cursor.lnum < search_first_line
+***************
+*** 459,469 ****
+
+ // Disable 'hlsearch' highlighting if the pattern matches everything.
+ // Avoids a flash when typing "foo\|".
+! c = ccline.cmdbuff[skiplen + patlen];
+! ccline.cmdbuff[skiplen + patlen] = NUL;
+! if (empty_pattern(ccline.cmdbuff))
+! set_no_hlsearch(TRUE);
+! ccline.cmdbuff[skiplen + patlen] = c;
+
+ validate_cursor();
+ // May redraw the status line to show the cursor position.
+--- 498,511 ----
+
+ // Disable 'hlsearch' highlighting if the pattern matches everything.
+ // Avoids a flash when typing "foo\|".
+! if (!use_last_pat)
+! {
+! next_char = ccline.cmdbuff[skiplen + patlen];
+! ccline.cmdbuff[skiplen + patlen] = NUL;
+! if (empty_pattern(ccline.cmdbuff))
+! set_no_hlsearch(TRUE);
+! ccline.cmdbuff[skiplen + patlen] = next_char;
+! }
+
+ validate_cursor();
+ // May redraw the status line to show the cursor position.
+***************
+*** 628,657 ****
+ }
+ return OK;
+ }
+-
+- static void
+- finish_incsearch_highlighting(int gotesc, incsearch_state_T *is_state)
+- {
+- if (is_state->did_incsearch)
+- {
+- if (gotesc)
+- curwin->w_cursor = is_state->save_cursor;
+- else
+- {
+- if (!EQUAL_POS(is_state->save_cursor, is_state->search_start))
+- {
+- // put the '" mark at the original position
+- curwin->w_cursor = is_state->save_cursor;
+- setpcmark();
+- }
+- curwin->w_cursor = is_state->search_start;
+- }
+- restore_viewstate(&is_state->old_viewstate);
+- highlight_match = FALSE;
+- validate_cursor(); /* needed for TAB */
+- redraw_all_later(SOME_VALID);
+- }
+- }
+ #endif
+
+ /*
+--- 670,675 ----
+***************
+*** 2301,2307 ****
+ ccline.xpc = NULL;
+
+ #ifdef FEAT_SEARCH_EXTRA
+! finish_incsearch_highlighting(gotesc, &is_state);
+ #endif
+
+ if (ccline.cmdbuff != NULL)
+--- 2319,2325 ----
+ ccline.xpc = NULL;
+
+ #ifdef FEAT_SEARCH_EXTRA
+! finish_incsearch_highlighting(gotesc, &is_state, FALSE);
+ #endif
+
+ if (ccline.cmdbuff != NULL)
+*** ../vim-8.1.0276/src/testdir/test_search.vim 2018-08-12 16:26:43.427713531 +0200
+--- src/testdir/test_search.vim 2018-08-12 17:33:19.978924077 +0200
+***************
+*** 839,844 ****
+--- 839,845 ----
+ sleep 100m
+
+ " Need to send one key at a time to force a redraw.
++ " Select three lines at the cursor with typed pattern.
+ call term_sendkeys(buf, ':.,.+2s/')
+ sleep 100m
+ call term_sendkeys(buf, 'f')
+***************
+*** 846,852 ****
+--- 847,867 ----
+ call term_sendkeys(buf, 'o')
+ sleep 100m
+ call term_sendkeys(buf, 'o')
++ sleep 100m
+ call VerifyScreenDump(buf, 'Test_incsearch_substitute_01', {})
++ call term_sendkeys(buf, "\<Esc>")
++
++ " Select three lines at the cursor using previous pattern.
++ call term_sendkeys(buf, "/foo\<CR>")
++ sleep 100m
++ call term_sendkeys(buf, ':.,.+2s//')
++ sleep 100m
++ call VerifyScreenDump(buf, 'Test_incsearch_substitute_02', {})
++
++ " Deleting last slash should remove the match.
++ call term_sendkeys(buf, "\<BS>")
++ sleep 100m
++ call VerifyScreenDump(buf, 'Test_incsearch_substitute_03', {})
+
+ call term_sendkeys(buf, "\<Esc>")
+ call StopVimInTerminal(buf)
+*** ../vim-8.1.0276/src/testdir/dumps/Test_incsearch_substitute_02.dump 2018-08-12 17:37:49.457116653 +0200
+--- src/testdir/dumps/Test_incsearch_substitute_02.dump 2018-08-12 17:02:58.756857477 +0200
+***************
+*** 0 ****
+--- 1,9 ----
++ |f+0&#ffffff0|o@1| |1| @64
++ |f|o@1| |2| @64
++ |f|o@1| |3| @64
++ |f+1&&|o@1| +0&&|4| @64
++ |f+0&#ffff4012|o@1| +0&#ffffff0|5| @64
++ |f+0&#ffff4012|o@1| +0&#ffffff0|6| @64
++ |f|o@1| |7| @64
++ |f|o@1| |8| @64
++ |:|.|,|.|+|2|s|/@1> @60
+*** ../vim-8.1.0276/src/testdir/dumps/Test_incsearch_substitute_03.dump 2018-08-12 17:37:49.465116598 +0200
+--- src/testdir/dumps/Test_incsearch_substitute_03.dump 2018-08-12 17:33:35.062824462 +0200
+***************
+*** 0 ****
+--- 1,9 ----
++ |f+0&#ffff4012|o@1| +0&#ffffff0|1| @64
++ |f+0&#ffff4012|o@1| +0&#ffffff0|2| @64
++ |f+0&#ffff4012|o@1| +0&#ffffff0|3| @64
++ |f+0&#ffff4012|o@1| +0&#ffffff0|4| @64
++ |f+0&#ffff4012|o@1| +0&#ffffff0|5| @64
++ |f+0&#ffff4012|o@1| +0&#ffffff0|6| @64
++ |f+0&#ffff4012|o@1| +0&#ffffff0|7| @64
++ |f+0&#ffff4012|o@1| +0&#ffffff0|8| @64
++ |:|.|,|.|+|2|s|/> @61
+*** ../vim-8.1.0276/src/version.c 2018-08-12 16:26:43.427713531 +0200
+--- src/version.c 2018-08-12 16:57:04.292430111 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 277,
+ /**/
+
+--
+Citizens are not allowed to attend a movie house or theater nor ride in a
+public streetcar within at least four hours after eating garlic.
+ [real standing law in Indiana, United States of America]
+
+ /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\
+/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
+\\\ an exciting new programming language -- http://www.Zimbu.org ///
+ \\\ help me help AIDS victims -- http://ICCF-Holland.org ///