forked from aniani/vim
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)
This commit is contained in:
parent
0cd3e94e2c
commit
6dd7424c7e
27
src/search.c
27
src/search.c
@ -325,6 +325,8 @@ static spat_T saved_last_search_spat;
|
|||||||
static int did_save_last_search_spat = 0;
|
static int did_save_last_search_spat = 0;
|
||||||
static int saved_last_idx = 0;
|
static int saved_last_idx = 0;
|
||||||
static int saved_no_hlsearch = 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
|
* 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);
|
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 *
|
char_u *
|
||||||
last_search_pattern(void)
|
last_search_pattern(void)
|
||||||
{
|
{
|
||||||
@ -4182,6 +4203,9 @@ f_searchcount(typval_T *argvars, typval_T *rettv)
|
|||||||
}
|
}
|
||||||
|
|
||||||
save_last_search_pattern();
|
save_last_search_pattern();
|
||||||
|
#ifdef FEAT_SEARCH_EXTRA
|
||||||
|
save_incsearch_state();
|
||||||
|
#endif
|
||||||
if (pattern != NULL)
|
if (pattern != NULL)
|
||||||
{
|
{
|
||||||
if (*pattern == NUL)
|
if (*pattern == NUL)
|
||||||
@ -4202,6 +4226,9 @@ f_searchcount(typval_T *argvars, typval_T *rettv)
|
|||||||
|
|
||||||
the_end:
|
the_end:
|
||||||
restore_last_search_pattern();
|
restore_last_search_pattern();
|
||||||
|
#ifdef FEAT_SEARCH_EXTRA
|
||||||
|
restore_incsearch_state();
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
10
src/testdir/dumps/Test_searchstat_inc_1.dump
Normal file
10
src/testdir/dumps/Test_searchstat_inc_1.dump
Normal file
@ -0,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
|
10
src/testdir/dumps/Test_searchstat_inc_2.dump
Normal file
10
src/testdir/dumps/Test_searchstat_inc_2.dump
Normal file
@ -0,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
|
10
src/testdir/dumps/Test_searchstat_inc_3.dump
Normal file
10
src/testdir/dumps/Test_searchstat_inc_3.dump
Normal file
@ -0,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
|
@ -371,6 +371,48 @@ func Test_search_stat_then_gd()
|
|||||||
call delete('Xsearchstatgd')
|
call delete('Xsearchstatgd')
|
||||||
endfunc
|
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: shiftwidth=2 sts=2 expandtab
|
||||||
|
@ -750,6 +750,8 @@ static char *(features[]) =
|
|||||||
|
|
||||||
static int included_patches[] =
|
static int included_patches[] =
|
||||||
{ /* Add new patch number below this line */
|
{ /* Add new patch number below this line */
|
||||||
|
/**/
|
||||||
|
4378,
|
||||||
/**/
|
/**/
|
||||||
4377,
|
4377,
|
||||||
/**/
|
/**/
|
||||||
|
Loading…
x
Reference in New Issue
Block a user