From: Luuk van Baal Date: Sat, 22 Feb 2025 08:19:04 +0000 (+0100) Subject: patch 9.1.1136: Match highlighting marks a buffer region as changed X-Git-Tag: v9.1.1136^0 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=7bbb0f357e9f9d3a737dac75e4b5ba7dfbf3ecc1;p=thirdparty%2Fvim.git patch 9.1.1136: Match highlighting marks a buffer region as changed Problem: Match highlighting marks a buffer region to be redrawn as if its buffer text was changed, unnecessarily invoking syntax code. Solution: Set the `w_redraw_top/bot` variables instead of the b_mod_* ones (Luuk van Baal) closes: #16697 Signed-off-by: Luuk van Baal Signed-off-by: Christian Brabandt --- diff --git a/src/drawscreen.c b/src/drawscreen.c index a08cea3d61..4736bf1120 100644 --- a/src/drawscreen.c +++ b/src/drawscreen.c @@ -3365,9 +3365,21 @@ redrawWinline( win_T *wp, linenr_T lnum) { - if (wp->w_redraw_top == 0 || wp->w_redraw_top > lnum) - wp->w_redraw_top = lnum; - if (wp->w_redraw_bot == 0 || wp->w_redraw_bot < lnum) - wp->w_redraw_bot = lnum; - redraw_win_later(wp, UPD_VALID); + redraw_win_range_later(wp, lnum, lnum); +} + + void +redraw_win_range_later( + win_T *wp, + linenr_T first, + linenr_T last) +{ + if (last >= wp->w_topline && first < wp->w_botline) + { + if (wp->w_redraw_top == 0 || wp->w_redraw_top > first) + wp->w_redraw_top = first; + if (wp->w_redraw_bot == 0 || wp->w_redraw_bot < last) + wp->w_redraw_bot = last; + redraw_win_later(wp, UPD_VALID); + } } diff --git a/src/fold.c b/src/fold.c index 64f9447b72..b165dc9b0e 100644 --- a/src/fold.c +++ b/src/fold.c @@ -2384,12 +2384,7 @@ foldUpdateIEMS(win_T *wp, linenr_T top, linenr_T bot) // this in other situations, the changed lines will be redrawn anyway and // this method can cause the whole window to be updated. if (end != bot) - { - if (wp->w_redraw_top == 0 || wp->w_redraw_top > top) - wp->w_redraw_top = top; - if (wp->w_redraw_bot < end) - wp->w_redraw_bot = end; - } + redraw_win_range_later(wp, top, end); invalid_top = (linenr_T)0; } diff --git a/src/match.c b/src/match.c index bc50757b37..ef2587947d 100644 --- a/src/match.c +++ b/src/match.c @@ -187,20 +187,7 @@ match_add( // Calculate top and bottom lines for redrawing area if (toplnum != 0) { - if (wp->w_buffer->b_mod_set) - { - if (wp->w_buffer->b_mod_top > toplnum) - wp->w_buffer->b_mod_top = toplnum; - if (wp->w_buffer->b_mod_bot < botlnum) - wp->w_buffer->b_mod_bot = botlnum; - } - else - { - wp->w_buffer->b_mod_set = TRUE; - wp->w_buffer->b_mod_top = toplnum; - wp->w_buffer->b_mod_bot = botlnum; - wp->w_buffer->b_mod_xlines = 0; - } + redraw_win_range_later(wp, toplnum, botlnum); m->mit_toplnum = toplnum; m->mit_botlnum = botlnum; rtype = UPD_VALID; @@ -269,20 +256,7 @@ match_delete(win_T *wp, int id, int perr) vim_free(cur->mit_pattern); if (cur->mit_toplnum != 0) { - if (wp->w_buffer->b_mod_set) - { - if (wp->w_buffer->b_mod_top > cur->mit_toplnum) - wp->w_buffer->b_mod_top = cur->mit_toplnum; - if (wp->w_buffer->b_mod_bot < cur->mit_botlnum) - wp->w_buffer->b_mod_bot = cur->mit_botlnum; - } - else - { - wp->w_buffer->b_mod_set = TRUE; - wp->w_buffer->b_mod_top = cur->mit_toplnum; - wp->w_buffer->b_mod_bot = cur->mit_botlnum; - wp->w_buffer->b_mod_xlines = 0; - } + redraw_win_range_later(wp, cur->mit_toplnum, cur->mit_botlnum); rtype = UPD_VALID; } vim_free(cur->mit_pos_array); diff --git a/src/proto/drawscreen.pro b/src/proto/drawscreen.pro index 6fa5e2c451..6f1d3e37a9 100644 --- a/src/proto/drawscreen.pro +++ b/src/proto/drawscreen.pro @@ -24,4 +24,5 @@ void status_redraw_curbuf(void); void redraw_statuslines(void); void win_redraw_last_status(frame_T *frp); void redrawWinline(win_T *wp, linenr_T lnum); +void redraw_win_range_later(win_T *wp, linenr_T first, linenr_T last); /* vim: set ft=c : */ diff --git a/src/version.c b/src/version.c index 4a9af920b2..792747e55d 100644 --- a/src/version.c +++ b/src/version.c @@ -704,6 +704,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 1136, /**/ 1135, /**/