diff src/search.c @ 27704:4c68fb88b73f v8.2.4378

patch 8.2.4378: incsearch HL broken when calling searchcount in 'tabLine' Commit: https://github.com/vim/vim/commit/6dd7424c7e6ab81998c29ca3526c41b75cfde5a1 Author: Christian Brabandt <cb@256bit.org> Date: Mon Feb 14 12:44:32 2022 +0000 patch 8.2.4378: incsearch HL broken when calling searchcount in 'tabLine' Problem: Incsearch highlight broken when calling searchcount() in 'tabLine' function. (Mirko Palmer) Solution: Save and restore the incsearch state. (Christian Brabandt, closes #9763, closes #9633)
author Bram Moolenaar <Bram@vim.org>
date Mon, 14 Feb 2022 13:45:02 +0100
parents 8dbdd68627bd
children c1d1639b52dd
line wrap: on
line diff
--- a/src/search.c
+++ b/src/search.c
@@ -325,6 +325,8 @@ static spat_T	    saved_last_search_spat
 static int	    did_save_last_search_spat = 0;
 static int	    saved_last_idx = 0;
 static int	    saved_no_hlsearch = 0;
+static int	    saved_search_match_endcol;
+static int	    saved_search_match_lines;
 
 /*
  * Save and restore the search pattern for incremental highlight search
@@ -370,6 +372,25 @@ restore_last_search_pattern(void)
     set_no_hlsearch(saved_no_hlsearch);
 }
 
+/*
+ * Save and restore the incsearch highlighting variables.
+ * This is required so that calling searchcount() at does not invalidate the
+ * incsearch highlighting.
+ */
+    static void
+save_incsearch_state(void)
+{
+    saved_search_match_endcol = search_match_endcol;
+    saved_search_match_lines  = search_match_lines;
+}
+
+    static void
+restore_incsearch_state(void)
+{
+    search_match_endcol = saved_search_match_endcol;
+    search_match_lines  = saved_search_match_lines;
+}
+
     char_u *
 last_search_pattern(void)
 {
@@ -4182,6 +4203,9 @@ f_searchcount(typval_T *argvars, typval_
     }
 
     save_last_search_pattern();
+#ifdef FEAT_SEARCH_EXTRA
+    save_incsearch_state();
+#endif
     if (pattern != NULL)
     {
 	if (*pattern == NUL)
@@ -4202,6 +4226,9 @@ f_searchcount(typval_T *argvars, typval_
 
 the_end:
     restore_last_search_pattern();
+#ifdef FEAT_SEARCH_EXTRA
+    restore_incsearch_state();
+#endif
 }
 
 /*