patch 9.1.1136: Match highlighting marks a buffer region as changed
Commit:
https://github.com/vim/vim/commit/7bbb0f357e9f9d3a737dac75e4b5ba7dfbf3ecc1
Author: Luuk van Baal <[email protected]>
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 <[email protected]>
Signed-off-by: Christian Brabandt <[email protected]>
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 [email protected].
To view this discussion visit
https://groups.google.com/d/msgid/vim_dev/E1tlktf-0062Du-Dw%40256bit.org.