diff options
Diffstat (limited to 'data/vim/patches/8.1.0277')
-rw-r--r-- | data/vim/patches/8.1.0277 | 316 |
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 /// |