summaryrefslogtreecommitdiff
path: root/data/vim/patches/8.1.0265
diff options
context:
space:
mode:
Diffstat (limited to 'data/vim/patches/8.1.0265')
-rw-r--r--data/vim/patches/8.1.0265875
1 files changed, 875 insertions, 0 deletions
diff --git a/data/vim/patches/8.1.0265 b/data/vim/patches/8.1.0265
new file mode 100644
index 000000000..bd59897ea
--- /dev/null
+++ b/data/vim/patches/8.1.0265
@@ -0,0 +1,875 @@
+To: vim_dev@googlegroups.com
+Subject: Patch 8.1.0265
+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.0265
+Problem: The getcmdline() function is way too big.
+Solution: Factor out the incremental search highlighting.
+Files: src/ex_getln.c
+
+
+*** ../vim-8.1.0264/src/ex_getln.c 2018-08-01 19:05:59.286223185 +0200
+--- src/ex_getln.c 2018-08-10 22:05:38.646652603 +0200
+***************
+*** 141,149 ****
+ #endif
+ sort_func_compare(const void *s1, const void *s2);
+ #endif
+- #ifdef FEAT_SEARCH_EXTRA
+- static void set_search_match(pos_T *t);
+- #endif
+
+
+ static void
+--- 141,146 ----
+***************
+*** 185,193 ****
+ n -= 2;
+ return n == 0 || (n >= 2 && p[n - 2] == '\\' && p[n - 1] == '|');
+ }
+- #endif
+
+! #ifdef FEAT_SEARCH_EXTRA
+ typedef struct {
+ colnr_T vs_curswant;
+ colnr_T vs_leftcol;
+--- 182,189 ----
+ n -= 2;
+ return n == 0 || (n >= 2 && p[n - 2] == '\\' && p[n - 1] == '|');
+ }
+
+! // Struct to store the viewstate during 'incsearch' highlighting.
+ typedef struct {
+ colnr_T vs_curswant;
+ colnr_T vs_leftcol;
+***************
+*** 224,229 ****
+--- 220,553 ----
+ curwin->w_botline = vs->vs_botline;
+ curwin->w_empty_rows = vs->vs_empty_rows;
+ }
++
++ // Struct to store the state of 'incsearch' highlighting.
++ typedef struct {
++ pos_T search_start; // where 'incsearch' starts searching
++ pos_T save_cursor;
++ viewstate_T init_viewstate;
++ viewstate_T old_viewstate;
++ pos_T match_start;
++ pos_T match_end;
++ int did_incsearch;
++ int incsearch_postponed;
++ } incsearch_state_T;
++
++ static void
++ init_incsearch_state(incsearch_state_T *is_state)
++ {
++ is_state->match_start = curwin->w_cursor;
++ is_state->did_incsearch = FALSE;
++ is_state->incsearch_postponed = FALSE;
++ CLEAR_POS(&is_state->match_end);
++ is_state->save_cursor = curwin->w_cursor; // may be restored later
++ is_state->search_start = curwin->w_cursor;
++ save_viewstate(&is_state->init_viewstate);
++ save_viewstate(&is_state->old_viewstate);
++ }
++
++ /*
++ * First move cursor to end of match, then to the start. This
++ * moves the whole match onto the screen when 'nowrap' is set.
++ */
++ static void
++ set_search_match(pos_T *t)
++ {
++ t->lnum += search_match_lines;
++ t->col = search_match_endcol;
++ if (t->lnum > curbuf->b_ml.ml_line_count)
++ {
++ t->lnum = curbuf->b_ml.ml_line_count;
++ coladvance((colnr_T)MAXCOL);
++ }
++ }
++
++ /*
++ * Return TRUE when 'incsearch' highlighting is to be done.
++ */
++ static int
++ do_incsearch_highlighting(int firstc)
++ {
++ return p_is && !cmd_silent && (firstc == '/' || firstc == '?');
++ }
++
++ /*
++ * Do 'incsearch' highlighting if desired.
++ */
++ static void
++ may_do_incsearch_highlighting(
++ int firstc,
++ long count,
++ incsearch_state_T *is_state)
++ {
++ int i;
++ pos_T end_pos;
++ struct cmdline_info save_ccline;
++ #ifdef FEAT_RELTIME
++ proftime_T tm;
++ #endif
++
++ if (!do_incsearch_highlighting(firstc))
++ return;
++
++ // If there is a character waiting, search and redraw later.
++ if (char_avail())
++ {
++ is_state->incsearch_postponed = TRUE;
++ return;
++ }
++ is_state->incsearch_postponed = FALSE;
++
++ // start at old position
++ curwin->w_cursor = is_state->search_start;
++ save_last_search_pattern();
++
++ // If there is no command line, don't do anything.
++ if (ccline.cmdlen == 0)
++ {
++ i = 0;
++ set_no_hlsearch(TRUE); // turn off previous highlight
++ redraw_all_later(SOME_VALID);
++ }
++ else
++ {
++ int search_flags = SEARCH_OPT + SEARCH_NOOF + SEARCH_PEEK;
++
++ cursor_off(); // so the user knows we're busy
++ out_flush();
++ ++emsg_off; // so it doesn't beep if bad expr
++ #ifdef FEAT_RELTIME
++ // Set the time limit to half a second.
++ profile_setlimit(500L, &tm);
++ #endif
++ if (!p_hls)
++ search_flags += SEARCH_KEEP;
++ i = do_search(NULL, firstc, ccline.cmdbuff, count, search_flags,
++ #ifdef FEAT_RELTIME
++ &tm, NULL
++ #else
++ NULL, NULL
++ #endif
++ );
++ --emsg_off;
++
++ // if interrupted while searching, behave like it failed
++ if (got_int)
++ {
++ (void)vpeekc(); // remove <C-C> from input stream
++ got_int = FALSE; // don't abandon the command line
++ i = 0;
++ }
++ else if (char_avail())
++ // cancelled searching because a char was typed
++ is_state->incsearch_postponed = TRUE;
++ }
++ if (i != 0)
++ highlight_match = TRUE; // highlight position
++ else
++ highlight_match = FALSE; // remove highlight
++
++ // First restore the old curwin values, so the screen is positioned in the
++ // same way as the actual search command.
++ restore_viewstate(&is_state->old_viewstate);
++ changed_cline_bef_curs();
++ update_topline();
++
++ if (i != 0)
++ {
++ pos_T save_pos = curwin->w_cursor;
++
++ is_state->match_start = curwin->w_cursor;
++ set_search_match(&curwin->w_cursor);
++ validate_cursor();
++ end_pos = curwin->w_cursor;
++ is_state->match_end = end_pos;
++ curwin->w_cursor = save_pos;
++ }
++ else
++ end_pos = curwin->w_cursor; // shutup gcc 4
++
++ // Disable 'hlsearch' highlighting if the pattern matches everything.
++ // Avoids a flash when typing "foo\|".
++ if (empty_pattern(ccline.cmdbuff))
++ set_no_hlsearch(TRUE);
++
++ validate_cursor();
++ // May redraw the status line to show the cursor position.
++ if (p_ru && curwin->w_status_height > 0)
++ curwin->w_redr_status = TRUE;
++
++ save_cmdline(&save_ccline);
++ update_screen(SOME_VALID);
++ restore_cmdline(&save_ccline);
++ restore_last_search_pattern();
++
++ // Leave it at the end to make CTRL-R CTRL-W work.
++ if (i != 0)
++ curwin->w_cursor = end_pos;
++
++ msg_starthere();
++ redrawcmdline();
++ is_state->did_incsearch = TRUE;
++ }
++
++ /*
++ * May adjust 'incsearch' highlighting for typing CTRL-G and CTRL-T, go to next
++ * or previous match.
++ * Returns FAIL when jumping to cmdline_not_changed;
++ */
++ static int
++ may_adjust_incsearch_highlighting(
++ int firstc,
++ long count,
++ incsearch_state_T *is_state,
++ int c)
++ {
++ pos_T t;
++ char_u *pat;
++ int search_flags = SEARCH_NOOF;
++ int i;
++
++ if (!do_incsearch_highlighting(firstc))
++ return OK;
++ if (ccline.cmdlen == 0)
++ return FAIL;
++
++ if (firstc == ccline.cmdbuff[0])
++ pat = last_search_pattern();
++ else
++ pat = ccline.cmdbuff;
++
++ save_last_search_pattern();
++ cursor_off();
++ out_flush();
++ if (c == Ctrl_G)
++ {
++ t = is_state->match_end;
++ if (LT_POS(is_state->match_start, is_state->match_end))
++ // Start searching at the end of the match not at the beginning of
++ // the next column.
++ (void)decl(&t);
++ search_flags += SEARCH_COL;
++ }
++ else
++ t = is_state->match_start;
++ if (!p_hls)
++ search_flags += SEARCH_KEEP;
++ ++emsg_off;
++ i = searchit(curwin, curbuf, &t,
++ c == Ctrl_G ? FORWARD : BACKWARD,
++ pat, count, search_flags,
++ RE_SEARCH, 0, NULL, NULL);
++ --emsg_off;
++ if (i)
++ {
++ is_state->search_start = is_state->match_start;
++ is_state->match_end = t;
++ is_state->match_start = t;
++ if (c == Ctrl_T && firstc == '/')
++ {
++ // Move just before the current match, so that when nv_search
++ // finishes the cursor will be put back on the match.
++ is_state->search_start = t;
++ (void)decl(&is_state->search_start);
++ }
++ else if (c == Ctrl_G && firstc == '?')
++ {
++ // Move just after the current match, so that when nv_search
++ // finishes the cursor will be put back on the match.
++ is_state->search_start = t;
++ (void)incl(&is_state->search_start);
++ }
++ if (LT_POS(t, is_state->search_start) && c == Ctrl_G)
++ {
++ // wrap around
++ is_state->search_start = t;
++ if (firstc == '?')
++ (void)incl(&is_state->search_start);
++ else
++ (void)decl(&is_state->search_start);
++ }
++
++ set_search_match(&is_state->match_end);
++ curwin->w_cursor = is_state->match_start;
++ changed_cline_bef_curs();
++ update_topline();
++ validate_cursor();
++ highlight_match = TRUE;
++ save_viewstate(&is_state->old_viewstate);
++ update_screen(NOT_VALID);
++ redrawcmdline();
++ }
++ else
++ vim_beep(BO_ERROR);
++ restore_last_search_pattern();
++ return FAIL;
++ }
++
++ /*
++ * When CTRL-L typed: add character from the match to the pattern.
++ * May set "*c" to the added character.
++ * Return OK when jumping to cmdline_not_changed.
++ */
++ static int
++ may_add_char_to_search(int firstc, int *c, incsearch_state_T *is_state)
++ {
++ if (!do_incsearch_highlighting(firstc))
++ return FAIL;
++
++ // Add a character from under the cursor for 'incsearch'.
++ if (is_state->did_incsearch)
++ {
++ curwin->w_cursor = is_state->match_end;
++ if (!EQUAL_POS(curwin->w_cursor, is_state->search_start))
++ {
++ *c = gchar_cursor();
++
++ // If 'ignorecase' and 'smartcase' are set and the
++ // command line has no uppercase characters, convert
++ // the character to lowercase.
++ if (p_ic && p_scs && !pat_has_uppercase(ccline.cmdbuff))
++ *c = MB_TOLOWER(*c);
++ if (*c != NUL)
++ {
++ if (*c == firstc || vim_strchr((char_u *)(
++ p_magic ? "\\~^$.*[" : "\\^$"), *c) != NULL)
++ {
++ // put a backslash before special characters
++ stuffcharReadbuff(*c);
++ *c = '\\';
++ }
++ return FAIL;
++ }
++ }
++ }
++ 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
+
+ /*
+***************
+*** 262,275 ****
+ int histype; /* history type to be used */
+ #endif
+ #ifdef FEAT_SEARCH_EXTRA
+! pos_T search_start; /* where 'incsearch' starts searching */
+! pos_T save_cursor;
+! viewstate_T init_viewstate;
+! viewstate_T old_viewstate;
+! pos_T match_start = curwin->w_cursor;
+! pos_T match_end;
+! int did_incsearch = FALSE;
+! int incsearch_postponed = FALSE;
+ #endif
+ int did_wild_list = FALSE; /* did wild_list() recently */
+ int wim_index = 0; /* index in wim_flags[] */
+--- 586,592 ----
+ int histype; /* history type to be used */
+ #endif
+ #ifdef FEAT_SEARCH_EXTRA
+! incsearch_state_T is_state;
+ #endif
+ int did_wild_list = FALSE; /* did wild_list() recently */
+ int wim_index = 0; /* index in wim_flags[] */
+***************
+*** 287,293 ****
+ #endif
+ expand_T xpc;
+ long *b_im_ptr = NULL;
+! #if defined(FEAT_WILDMENU) || defined(FEAT_EVAL) || defined(FEAT_SEARCH_EXTRA)
+ /* Everything that may work recursively should save and restore the
+ * current command line in save_ccline. That includes update_screen(), a
+ * custom status line may invoke ":normal". */
+--- 604,610 ----
+ #endif
+ expand_T xpc;
+ long *b_im_ptr = NULL;
+! #if defined(FEAT_WILDMENU) || defined(FEAT_EVAL)
+ /* Everything that may work recursively should save and restore the
+ * current command line in save_ccline. That includes update_screen(), a
+ * custom status line may invoke ":normal". */
+***************
+*** 309,320 ****
+ #endif
+
+ ccline.overstrike = FALSE; /* always start in insert mode */
+ #ifdef FEAT_SEARCH_EXTRA
+! CLEAR_POS(&match_end);
+! save_cursor = curwin->w_cursor; /* may be restored later */
+! search_start = curwin->w_cursor;
+! save_viewstate(&init_viewstate);
+! save_viewstate(&old_viewstate);
+ #endif
+
+ /*
+--- 626,634 ----
+ #endif
+
+ ccline.overstrike = FALSE; /* always start in insert mode */
++
+ #ifdef FEAT_SEARCH_EXTRA
+! init_incsearch_state(&is_state);
+ #endif
+
+ /*
+***************
+*** 1089,1098 ****
+ #ifdef FEAT_SEARCH_EXTRA
+ if (ccline.cmdlen == 0)
+ {
+! search_start = save_cursor;
+ /* save view settings, so that the screen
+ * won't be restored at the wrong position */
+! old_viewstate = init_viewstate;
+ }
+ #endif
+ redrawcmd();
+--- 1403,1412 ----
+ #ifdef FEAT_SEARCH_EXTRA
+ if (ccline.cmdlen == 0)
+ {
+! is_state.search_start = is_state.save_cursor;
+ /* save view settings, so that the screen
+ * won't be restored at the wrong position */
+! is_state.old_viewstate = is_state.init_viewstate;
+ }
+ #endif
+ redrawcmd();
+***************
+*** 1121,1127 ****
+ }
+ #ifdef FEAT_SEARCH_EXTRA
+ if (ccline.cmdlen == 0)
+! search_start = save_cursor;
+ #endif
+ redraw_cmdline = TRUE;
+ goto returncmd; /* back to cmd mode */
+--- 1435,1441 ----
+ }
+ #ifdef FEAT_SEARCH_EXTRA
+ if (ccline.cmdlen == 0)
+! is_state.search_start = is_state.save_cursor;
+ #endif
+ redraw_cmdline = TRUE;
+ goto returncmd; /* back to cmd mode */
+***************
+*** 1208,1214 ****
+ ccline.cmdbuff[ccline.cmdlen] = NUL;
+ #ifdef FEAT_SEARCH_EXTRA
+ if (ccline.cmdlen == 0)
+! search_start = save_cursor;
+ #endif
+ redrawcmd();
+ goto cmdline_changed;
+--- 1522,1528 ----
+ ccline.cmdbuff[ccline.cmdlen] = NUL;
+ #ifdef FEAT_SEARCH_EXTRA
+ if (ccline.cmdlen == 0)
+! is_state.search_start = is_state.save_cursor;
+ #endif
+ redrawcmd();
+ goto cmdline_changed;
+***************
+*** 1545,1582 ****
+
+ case Ctrl_L:
+ #ifdef FEAT_SEARCH_EXTRA
+! if (p_is && !cmd_silent && (firstc == '/' || firstc == '?'))
+! {
+! /* Add a character from under the cursor for 'incsearch' */
+! if (did_incsearch)
+! {
+! curwin->w_cursor = match_end;
+! if (!EQUAL_POS(curwin->w_cursor, search_start))
+! {
+! c = gchar_cursor();
+! /* If 'ignorecase' and 'smartcase' are set and the
+! * command line has no uppercase characters, convert
+! * the character to lowercase */
+! if (p_ic && p_scs
+! && !pat_has_uppercase(ccline.cmdbuff))
+! c = MB_TOLOWER(c);
+! if (c != NUL)
+! {
+! if (c == firstc || vim_strchr((char_u *)(
+! p_magic ? "\\~^$.*[" : "\\^$"), c)
+! != NULL)
+! {
+! /* put a backslash before special
+! * characters */
+! stuffcharReadbuff(c);
+! c = '\\';
+! }
+! break;
+! }
+! }
+! }
+ goto cmdline_not_changed;
+- }
+ #endif
+
+ /* completion: longest common part */
+--- 1859,1866 ----
+
+ case Ctrl_L:
+ #ifdef FEAT_SEARCH_EXTRA
+! if (may_add_char_to_search(firstc, &c, &is_state) == OK)
+ goto cmdline_not_changed;
+ #endif
+
+ /* completion: longest common part */
+***************
+*** 1742,1829 ****
+ #ifdef FEAT_SEARCH_EXTRA
+ case Ctrl_G: /* next match */
+ case Ctrl_T: /* previous match */
+! if (p_is && !cmd_silent && (firstc == '/' || firstc == '?'))
+! {
+! pos_T t;
+! char_u *pat;
+! int search_flags = SEARCH_NOOF;
+!
+! if (ccline.cmdlen == 0)
+! goto cmdline_not_changed;
+!
+! if (firstc == ccline.cmdbuff[0])
+! pat = last_search_pattern();
+! else
+! pat = ccline.cmdbuff;
+!
+! save_last_search_pattern();
+! cursor_off();
+! out_flush();
+! if (c == Ctrl_G)
+! {
+! t = match_end;
+! if (LT_POS(match_start, match_end))
+! /* start searching at the end of the match
+! * not at the beginning of the next column */
+! (void)decl(&t);
+! search_flags += SEARCH_COL;
+! }
+! else
+! t = match_start;
+! if (!p_hls)
+! search_flags += SEARCH_KEEP;
+! ++emsg_off;
+! i = searchit(curwin, curbuf, &t,
+! c == Ctrl_G ? FORWARD : BACKWARD,
+! pat, count, search_flags,
+! RE_SEARCH, 0, NULL, NULL);
+! --emsg_off;
+! if (i)
+! {
+! search_start = match_start;
+! match_end = t;
+! match_start = t;
+! if (c == Ctrl_T && firstc == '/')
+! {
+! /* move just before the current match, so that
+! * when nv_search finishes the cursor will be
+! * put back on the match */
+! search_start = t;
+! (void)decl(&search_start);
+! }
+! else if (c == Ctrl_G && firstc == '?')
+! {
+! /* move just after the current match, so that
+! * when nv_search finishes the cursor will be
+! * put back on the match */
+! search_start = t;
+! (void)incl(&search_start);
+! }
+! if (LT_POS(t, search_start) && c == Ctrl_G)
+! {
+! /* wrap around */
+! search_start = t;
+! if (firstc == '?')
+! (void)incl(&search_start);
+! else
+! (void)decl(&search_start);
+! }
+!
+! set_search_match(&match_end);
+! curwin->w_cursor = match_start;
+! changed_cline_bef_curs();
+! update_topline();
+! validate_cursor();
+! highlight_match = TRUE;
+! save_viewstate(&old_viewstate);
+! update_screen(NOT_VALID);
+! redrawcmdline();
+! }
+! else
+! vim_beep(BO_ERROR);
+! restore_last_search_pattern();
+ goto cmdline_not_changed;
+- }
+ break;
+ #endif
+
+--- 2026,2034 ----
+ #ifdef FEAT_SEARCH_EXTRA
+ case Ctrl_G: /* next match */
+ case Ctrl_T: /* previous match */
+! if (may_adjust_incsearch_highlighting(
+! firstc, count, &is_state, c) == FAIL)
+ goto cmdline_not_changed;
+ break;
+ #endif
+
+***************
+*** 1951,1957 ****
+ */
+ cmdline_not_changed:
+ #ifdef FEAT_SEARCH_EXTRA
+! if (!incsearch_postponed)
+ continue;
+ #endif
+
+--- 2156,2162 ----
+ */
+ cmdline_not_changed:
+ #ifdef FEAT_SEARCH_EXTRA
+! if (!is_state.incsearch_postponed)
+ continue;
+ #endif
+
+***************
+*** 1960,2074 ****
+ trigger_cmd_autocmd(cmdline_type, EVENT_CMDLINECHANGED);
+
+ #ifdef FEAT_SEARCH_EXTRA
+! /*
+! * 'incsearch' highlighting.
+! */
+! if (p_is && !cmd_silent && (firstc == '/' || firstc == '?'))
+! {
+! pos_T end_pos;
+! #ifdef FEAT_RELTIME
+! proftime_T tm;
+! #endif
+!
+! /* if there is a character waiting, search and redraw later */
+! if (char_avail())
+! {
+! incsearch_postponed = TRUE;
+! continue;
+! }
+! incsearch_postponed = FALSE;
+! curwin->w_cursor = search_start; /* start at old position */
+! save_last_search_pattern();
+!
+! /* If there is no command line, don't do anything */
+! if (ccline.cmdlen == 0)
+! {
+! i = 0;
+! set_no_hlsearch(TRUE); /* turn off previous highlight */
+! redraw_all_later(SOME_VALID);
+! }
+! else
+! {
+! int search_flags = SEARCH_OPT + SEARCH_NOOF + SEARCH_PEEK;
+! cursor_off(); /* so the user knows we're busy */
+! out_flush();
+! ++emsg_off; /* So it doesn't beep if bad expr */
+! #ifdef FEAT_RELTIME
+! /* Set the time limit to half a second. */
+! profile_setlimit(500L, &tm);
+! #endif
+! if (!p_hls)
+! search_flags += SEARCH_KEEP;
+! i = do_search(NULL, firstc, ccline.cmdbuff, count,
+! search_flags,
+! #ifdef FEAT_RELTIME
+! &tm, NULL
+! #else
+! NULL, NULL
+! #endif
+! );
+! --emsg_off;
+! /* if interrupted while searching, behave like it failed */
+! if (got_int)
+! {
+! (void)vpeekc(); /* remove <C-C> from input stream */
+! got_int = FALSE; /* don't abandon the command line */
+! i = 0;
+! }
+! else if (char_avail())
+! /* cancelled searching because a char was typed */
+! incsearch_postponed = TRUE;
+! }
+! if (i != 0)
+! highlight_match = TRUE; /* highlight position */
+! else
+! highlight_match = FALSE; /* remove highlight */
+!
+! /* first restore the old curwin values, so the screen is
+! * positioned in the same way as the actual search command */
+! restore_viewstate(&old_viewstate);
+! changed_cline_bef_curs();
+! update_topline();
+!
+! if (i != 0)
+! {
+! pos_T save_pos = curwin->w_cursor;
+!
+! match_start = curwin->w_cursor;
+! set_search_match(&curwin->w_cursor);
+! validate_cursor();
+! end_pos = curwin->w_cursor;
+! match_end = end_pos;
+! curwin->w_cursor = save_pos;
+! }
+! else
+! end_pos = curwin->w_cursor; /* shutup gcc 4 */
+!
+! /* Disable 'hlsearch' highlighting if the pattern matches
+! * everything. Avoids a flash when typing "foo\|". */
+! if (empty_pattern(ccline.cmdbuff))
+! set_no_hlsearch(TRUE);
+!
+! validate_cursor();
+! /* May redraw the status line to show the cursor position. */
+! if (p_ru && curwin->w_status_height > 0)
+! curwin->w_redr_status = TRUE;
+!
+! save_cmdline(&save_ccline);
+! update_screen(SOME_VALID);
+! restore_cmdline(&save_ccline);
+! restore_last_search_pattern();
+!
+! /* Leave it at the end to make CTRL-R CTRL-W work. */
+! if (i != 0)
+! curwin->w_cursor = end_pos;
+!
+! msg_starthere();
+! redrawcmdline();
+! did_incsearch = TRUE;
+! }
+! #else /* FEAT_SEARCH_EXTRA */
+! ;
+ #endif
+
+ #ifdef FEAT_RIGHTLEFT
+--- 2165,2171 ----
+ trigger_cmd_autocmd(cmdline_type, EVENT_CMDLINECHANGED);
+
+ #ifdef FEAT_SEARCH_EXTRA
+! may_do_incsearch_highlighting(firstc, count, &is_state);
+ #endif
+
+ #ifdef FEAT_RIGHTLEFT
+***************
+*** 2100,2124 ****
+ ccline.xpc = NULL;
+
+ #ifdef FEAT_SEARCH_EXTRA
+! if (did_incsearch)
+! {
+! if (gotesc)
+! curwin->w_cursor = save_cursor;
+! else
+! {
+! if (!EQUAL_POS(save_cursor, search_start))
+! {
+! /* put the '" mark at the original position */
+! curwin->w_cursor = save_cursor;
+! setpcmark();
+! }
+! curwin->w_cursor = search_start;
+! }
+! restore_viewstate(&old_viewstate);
+! highlight_match = FALSE;
+! validate_cursor(); /* needed for TAB */
+! redraw_all_later(SOME_VALID);
+! }
+ #endif
+
+ if (ccline.cmdbuff != NULL)
+--- 2197,2203 ----
+ ccline.xpc = NULL;
+
+ #ifdef FEAT_SEARCH_EXTRA
+! finish_incsearch_highlighting(gotesc, &is_state);
+ #endif
+
+ if (ccline.cmdbuff != NULL)
+***************
+*** 7239,7259 ****
+
+ return (char_u *)ga.ga_data;
+ }
+-
+- #ifdef FEAT_SEARCH_EXTRA
+- static void
+- set_search_match(pos_T *t)
+- {
+- /*
+- * First move cursor to end of match, then to the start. This
+- * moves the whole match onto the screen when 'nowrap' is set.
+- */
+- t->lnum += search_match_lines;
+- t->col = search_match_endcol;
+- if (t->lnum > curbuf->b_ml.ml_line_count)
+- {
+- t->lnum = curbuf->b_ml.ml_line_count;
+- coladvance((colnr_T)MAXCOL);
+- }
+- }
+- #endif
+--- 7318,7320 ----
+*** ../vim-8.1.0264/src/version.c 2018-08-09 22:26:34.259501130 +0200
+--- src/version.c 2018-08-10 22:07:22.817944576 +0200
+***************
+*** 796,797 ****
+--- 796,799 ----
+ { /* Add new patch number below this line */
++ /**/
++ 265,
+ /**/
+
+--
+Sorry, no fortune today.
+
+ /// 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 ///