1
0
forked from aniani/vim

patch 8.2.5047: CurSearch highlight is often wrong

Problem:    CurSearch highlight is often wrong.
Solution:   Remember the last highlighted position and redraw when needed.
This commit is contained in:
Bram Moolenaar
2022-05-31 13:43:12 +01:00
parent 4aaf3e7f4d
commit 368137aa52
7 changed files with 49 additions and 6 deletions

View File

@@ -663,6 +663,10 @@ changed_common(
}
#endif
}
#ifdef FEAT_SEARCH_EXTRA
if (wp == curwin && xtra != 0 && search_hl_has_cursor_lnum >= lnum)
search_hl_has_cursor_lnum += xtra;
#endif
}
// Call update_screen() later, which checks out what needs to be redrawn,

View File

@@ -1618,6 +1618,19 @@ win_update(win_T *wp)
}
#endif
}
#ifdef FEAT_SEARCH_EXTRA
if (search_hl_has_cursor_lnum > 0)
{
// CurSearch was used last time, need to redraw the line with it to
// avoid having two matches highlighted with CurSearch.
if (mod_top == 0 || mod_top > search_hl_has_cursor_lnum)
mod_top = search_hl_has_cursor_lnum;
if (mod_bot == 0 || mod_bot < search_hl_has_cursor_lnum + 1)
mod_bot = search_hl_has_cursor_lnum + 1;
}
#endif
#ifdef FEAT_FOLDING
if (mod_top != 0 && hasAnyFolding(wp))
{
@@ -1684,6 +1697,10 @@ win_update(win_T *wp)
}
wp->w_redraw_top = 0; // reset for next time
wp->w_redraw_bot = 0;
#ifdef FEAT_SEARCH_EXTRA
search_hl_has_cursor_lnum = 0;
#endif
// When only displaying the lines at the top, set top_end. Used when
// window has scrolled down for msg_scrolled.

View File

@@ -75,7 +75,14 @@ EXTERN int screen_cur_row INIT(= 0);
EXTERN int screen_cur_col INIT(= 0);
#ifdef FEAT_SEARCH_EXTRA
EXTERN match_T screen_search_hl; // used for 'hlsearch' highlight matching
// used for 'hlsearch' highlight matching
EXTERN match_T screen_search_hl;
// last lnum where CurSearch was displayed
EXTERN linenr_T search_hl_has_cursor_lnum INIT(= 0);
// don't use 'hlsearch' temporarily
EXTERN int no_hlsearch INIT(= FALSE);
#endif
#ifdef FEAT_FOLDING
@@ -1418,11 +1425,6 @@ EXTERN char_u wim_flags[4];
EXTERN int stl_syntax INIT(= 0);
#endif
#ifdef FEAT_SEARCH_EXTRA
// don't use 'hlsearch' temporarily
EXTERN int no_hlsearch INIT(= FALSE);
#endif
#if defined(FEAT_BEVAL) && !defined(NO_X11_INCLUDES)
EXTERN BalloonEval *balloonEval INIT(= NULL);
EXTERN int balloonEvalForTerm INIT(= FALSE);

View File

@@ -798,7 +798,11 @@ update_search_hl(
// Highlight the match were the cursor is using the CurSearch
// group.
if (shl == search_hl && shl->has_cursor)
{
shl->attr_cur = HL_ATTR(HLF_LC);
if (shl->attr_cur != shl->attr)
search_hl_has_cursor_lnum = lnum;
}
}
else if (col == shl->endcol)

View File

@@ -0,0 +1,9 @@
|-+0&#ffffff0@2| @56
|a+0&#ffff4012|b|c|d|e+0&#ffffff0|f|g| @52
>a+0&#4040ff13|b|c|d|e+0&#ffffff0|f|g| @52
|h|i|j|k|l| @54
|-@2| @56
|a+0&#ffff4012|b|c|d|e+0&#ffffff0|f|g| @52
|h|i|j|k|l| @54
|~+0#4040ff13&| @58
| +0#0000000&@41|3|,|1| @10|A|l@1|

View File

@@ -1079,6 +1079,11 @@ func Test_hlsearch_cursearch()
call term_sendkeys(buf, "h\<C-L>")
call VerifyScreenDump(buf, 'Test_hlsearch_cursearch_multiple_line_5', {})
" check clearing CurSearch when using it for another match
call term_sendkeys(buf, "G?^abcd\<CR>Y")
call term_sendkeys(buf, "kkP")
call VerifyScreenDump(buf, 'Test_hlsearch_cursearch_changed_1', {})
call StopVimInTerminal(buf)
call delete('Xhlsearch_cursearch')
endfunc

View File

@@ -734,6 +734,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
5047,
/**/
5046,
/**/