patch 9.1.1136: Match highlighting marks a buffer region as changed Commit: https://github.com/vim/vim/commit/7bbb0f357e9f9d3a737dac75e4b5ba7dfbf3ecc1 Author: Luuk van Baal <luukvb...@gmail.com> Date: Sat Feb 22 09:19:04 2025 +0100
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 <luukvb...@gmail.com> Signed-off-by: Christian Brabandt <c...@256bit.org> diff --git a/src/drawscreen.c b/src/drawscreen.c index a08cea3d6..4736bf112 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 64f9447b7..b165dc9b0 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 bc50757b3..ef2587947 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 6fa5e2c45..6f1d3e37a 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 4a9af920b..792747e55 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, /**/ -- -- 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 vim_dev+unsubscr...@googlegroups.com. To view this discussion visit https://groups.google.com/d/msgid/vim_dev/E1tlktf-0062Du-Dw%40256bit.org.