diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/nvim/drawscreen.c | 59 | ||||
-rw-r--r-- | src/nvim/fold.c | 5 | ||||
-rw-r--r-- | src/nvim/match.c | 28 |
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); |