aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/nvim/drawscreen.c59
-rw-r--r--src/nvim/fold.c5
-rw-r--r--src/nvim/match.c28
3 files changed, 31 insertions, 61 deletions
diff --git a/src/nvim/drawscreen.c b/src/nvim/drawscreen.c
index 4d7f80bf76..162bcb910b 100644
--- a/src/nvim/drawscreen.c
+++ b/src/nvim/drawscreen.c
@@ -2695,18 +2695,36 @@ void redraw_buf_line_later(buf_T *buf, linenr_T line, bool force)
}
}
-void redraw_buf_range_later(buf_T *buf, linenr_T firstline, linenr_T lastline)
+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_later(wp, UPD_VALID);
+ }
+}
+
+/// Changed something in the current window, at buffer line "lnum", that
+/// requires that line and possibly other lines to be redrawn.
+/// Used when entering/leaving Insert mode with the cursor on a folded line.
+/// Used to remove the "$" from a change command.
+/// Note that when also inserting/deleting lines w_redraw_top and w_redraw_bot
+/// may become invalid and the whole window will have to be redrawn.
+void redrawWinline(win_T *wp, linenr_T lnum)
+ FUNC_ATTR_NONNULL_ALL
+{
+ redraw_win_range_later(wp, lnum, lnum);
+}
+
+void redraw_buf_range_later(buf_T *buf, linenr_T first, linenr_T last)
{
FOR_ALL_WINDOWS_IN_TAB(wp, curtab) {
- if (wp->w_buffer == buf
- && lastline >= wp->w_topline && firstline < wp->w_botline) {
- if (wp->w_redraw_top == 0 || wp->w_redraw_top > firstline) {
- wp->w_redraw_top = firstline;
- }
- if (wp->w_redraw_bot == 0 || wp->w_redraw_bot < lastline) {
- wp->w_redraw_bot = lastline;
- }
- redraw_later(wp, UPD_VALID);
+ if (wp->w_buffer == buf) {
+ redraw_win_range_later(wp, first, last);
}
}
}
@@ -2805,27 +2823,6 @@ void win_redraw_last_status(const frame_T *frp)
}
}
-/// Changed something in the current window, at buffer line "lnum", that
-/// requires that line and possibly other lines to be redrawn.
-/// Used when entering/leaving Insert mode with the cursor on a folded line.
-/// Used to remove the "$" from a change command.
-/// Note that when also inserting/deleting lines w_redraw_top and w_redraw_bot
-/// may become invalid and the whole window will have to be redrawn.
-void redrawWinline(win_T *wp, linenr_T lnum)
- FUNC_ATTR_NONNULL_ALL
-{
- if (lnum >= wp->w_topline
- && lnum < wp->w_botline) {
- 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_later(wp, UPD_VALID);
- }
-}
-
/// Return true if the cursor line in window "wp" may be concealed, according
/// to the 'concealcursor' option.
bool conceal_cursor_line(const win_T *wp)
diff --git a/src/nvim/fold.c b/src/nvim/fold.c
index b59933d600..45cc327444 100644
--- a/src/nvim/fold.c
+++ b/src/nvim/fold.c
@@ -2098,10 +2098,7 @@ static void foldUpdateIEMS(win_T *const 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;
- }
- wp->w_redraw_bot = MAX(wp->w_redraw_bot, end);
+ redraw_win_range_later(wp, top, end);
}
invalid_top = 0;
diff --git a/src/nvim/match.c b/src/nvim/match.c
index 86cab5221d..a1126fbbcd 100644
--- a/src/nvim/match.c
+++ b/src/nvim/match.c
@@ -190,19 +190,7 @@ static int match_add(win_T *wp, const char *const grp, const char *const pat, in
// 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;
@@ -268,19 +256,7 @@ static int match_delete(win_T *wp, int id, bool perr)
vim_regfree(cur->mit_match.regprog);
xfree(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;
}
xfree(cur->mit_pos_array);