Patch 8.2.4378
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)
Files:      src/search.c, src/testdir/test_search_stat.vim,
            src/testdir/dumps/Test_searchstat_inc_1.dump,
            src/testdir/dumps/Test_searchstat_inc_2.dump,
            src/testdir/dumps/Test_searchstat_inc_3.dump


*** ../vim-8.2.4377/src/search.c        2022-01-04 17:01:40.598663106 +0000
--- src/search.c        2022-02-14 12:42:31.619703273 +0000
***************
*** 325,330 ****
--- 325,332 ----
  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,375 ****
--- 372,396 ----
      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,4187 ****
--- 4203,4211 ----
      }
  
      save_last_search_pattern();
+ #ifdef FEAT_SEARCH_EXTRA
+     save_incsearch_state();
+ #endif
      if (pattern != NULL)
      {
        if (*pattern == NUL)
***************
*** 4202,4207 ****
--- 4226,4234 ----
  
  the_end:
      restore_last_search_pattern();
+ #ifdef FEAT_SEARCH_EXTRA
+     restore_incsearch_state();
+ #endif
  }
  
  /*
*** ../vim-8.2.4377/src/testdir/test_search_stat.vim    2022-02-10 
19:51:42.549569899 +0000
--- src/testdir/test_search_stat.vim    2022-02-14 12:43:31.759551853 +0000
***************
*** 371,376 ****
--- 371,418 ----
    call delete('Xsearchstatgd')
  endfunc
  
+ func Test_search_stat_and_incsearch()
+   CheckScreendump
+ 
+   let lines =<< trim END
+     call setline(1, ['abc--c', '--------abc', '--abc'])
+     set hlsearch
+     set incsearch
+     set bg=dark
+     set showtabline=2
+ 
+     function MyTabLine()
+     try
+       let a=searchcount(#{recompute: 1, maxcount: -1})
+       return a.current .. '/' .. a.total
+     catch
+       return ''
+     endtry
+     endfunction
+ 
+     set tabline=%!MyTabLine()
+   END
+   call writefile(lines, 'Xsearchstat_inc')
+ 
+   let buf = RunVimInTerminal('-S Xsearchstat_inc', #{rows: 10})
+   call term_sendkeys(buf, "/abc")
+   call TermWait(buf)
+   call VerifyScreenDump(buf, 'Test_searchstat_inc_1', {})
+ 
+   call term_sendkeys(buf, "\<c-g>")
+   call TermWait(buf)
+   call VerifyScreenDump(buf, 'Test_searchstat_inc_2', {})
+ 
+   call term_sendkeys(buf, "\<c-g>")
+   call TermWait(buf)
+   call VerifyScreenDump(buf, 'Test_searchstat_inc_3', {})
+ 
+   call term_sendkeys(buf, "\<esc>:qa\<cr>")
+   call TermWait(buf)
+ 
+   call StopVimInTerminal(buf)
+   call delete('Xsearchstat_inc')
+ endfunc
  
  
  " vim: shiftwidth=2 sts=2 expandtab
*** ../vim-8.2.4377/src/testdir/dumps/Test_searchstat_inc_1.dump        
2022-02-14 12:43:56.531491051 +0000
--- src/testdir/dumps/Test_searchstat_inc_1.dump        2022-02-14 
12:35:15.072656758 +0000
***************
*** 0 ****
--- 1,10 ----
+ | +1&#ffffff0@74
+ |a+0#0000001#ffff4012|b|c|-+0#0000000#ffffff0@1|c| @68
+ |-@7|a+1&&|b|c| +0&&@63
+ |-@1|a+0#0000001#ffff4012|b|c| +0#0000000#ffffff0@69
+ |~+0#4040ff13&| @73
+ |~| @73
+ |~| @73
+ |~| @73
+ |~| @73
+ |/+0#0000000&|a|b|c> @70
*** ../vim-8.2.4377/src/testdir/dumps/Test_searchstat_inc_2.dump        
2022-02-14 12:43:56.535491040 +0000
--- src/testdir/dumps/Test_searchstat_inc_2.dump        2022-02-14 
12:35:15.072656758 +0000
***************
*** 0 ****
--- 1,10 ----
+ |3+1&#ffffff0|/|3| @71
+ |a+0#0000001#ffff4012|b|c|-+0#0000000#ffffff0@1|c| @68
+ |-@7|a+0#0000001#ffff4012|b|c| +0#0000000#ffffff0@63
+ |-@1|a+1&&|b|c| +0&&@69
+ |~+0#4040ff13&| @73
+ |~| @73
+ |~| @73
+ |~| @73
+ |~| @73
+ |/+0#0000000&|a|b|c> @70
*** ../vim-8.2.4377/src/testdir/dumps/Test_searchstat_inc_3.dump        
2022-02-14 12:43:56.539491032 +0000
--- src/testdir/dumps/Test_searchstat_inc_3.dump        2022-02-14 
12:35:15.072656758 +0000
***************
*** 0 ****
--- 1,10 ----
+ |1+1&#ffffff0|/|3| @71
+ |a|b|c|-+0&&@1|c| @68
+ |-@7|a+0#0000001#ffff4012|b|c| +0#0000000#ffffff0@63
+ |-@1|a+0#0000001#ffff4012|b|c| +0#0000000#ffffff0@69
+ |~+0#4040ff13&| @73
+ |~| @73
+ |~| @73
+ |~| @73
+ |~| @73
+ |/+0#0000000&|a|b|c> @70
*** ../vim-8.2.4377/src/version.c       2022-02-14 11:36:53.795908024 +0000
--- src/version.c       2022-02-14 12:38:37.816339239 +0000
***************
*** 752,753 ****
--- 752,755 ----
  {   /* Add new patch number below this line */
+ /**/
+     4378,
  /**/

-- 
The 50-50-90 rule: Anytime you have a 50-50 chance of getting
something right, there's a 90% probability you'll get it wrong.

 /// Bram Moolenaar -- [email protected] -- http://www.Moolenaar.net   \\\
///                                                                      \\\
\\\        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///

-- 
-- 
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php

--- 
You received this message because you are subscribed to the Google Groups 
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/vim_dev/20220214124518.29AD21C0345%40moolenaar.net.

Raspunde prin e-mail lui