aboutsummaryrefslogtreecommitdiff
path: root/src/nvim/screen.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/nvim/screen.c')
-rw-r--r--src/nvim/screen.c77
1 files changed, 42 insertions, 35 deletions
diff --git a/src/nvim/screen.c b/src/nvim/screen.c
index e8dbc11710..9f0d8a5080 100644
--- a/src/nvim/screen.c
+++ b/src/nvim/screen.c
@@ -507,6 +507,7 @@ void update_single_line(win_T *wp, linenr_T lnum)
init_search_hl(wp);
start_search_hl();
prepare_search_hl(wp, lnum);
+ update_window_hl(wp, false);
win_line(wp, lnum, row, row + wp->w_lines[j].wl_size, false);
end_search_hl();
break;
@@ -542,51 +543,57 @@ static void update_finish(void)
updating_screen = FALSE;
}
-void update_debug_sign(buf_T *buf, linenr_T lnum)
+void update_debug_sign(const buf_T *const buf, const linenr_T lnum)
{
- int doit = FALSE;
- win_foldinfo.fi_level = 0;
-
- /* update/delete a specific mark */
- FOR_ALL_WINDOWS_IN_TAB(wp, curtab) {
- if (buf != NULL && lnum > 0) {
- if (wp->w_buffer == buf && 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_win_later(wp, VALID);
+ bool doit = false;
+ win_foldinfo.fi_level = 0;
+
+ // update/delete a specific mark
+ FOR_ALL_WINDOWS_IN_TAB(wp, curtab) {
+ if (buf != NULL && lnum > 0) {
+ if (wp->w_buffer == buf && 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;
}
- } else {
redraw_win_later(wp, VALID);
}
- if (wp->w_redr_type != 0) {
- doit = TRUE;
- }
+ } else {
+ redraw_win_later(wp, VALID);
}
-
- /* Return when there is nothing to do, screen updating is already
- * happening (recursive call) or still starting up. */
- if (!doit || updating_screen || starting) {
- return;
+ if (wp->w_redr_type != 0) {
+ doit = true;
}
+ }
- /* update all windows that need updating */
- update_prepare();
+ // Return when there is nothing to do, screen updating is already
+ // happening (recursive call), messages on the screen or still starting up.
+ if (!doit
+ || updating_screen
+ || State == ASKMORE
+ || State == HITRETURN
+ || msg_scrolled
+ || starting) {
+ return;
+ }
- FOR_ALL_WINDOWS_IN_TAB(wp, curtab) {
- if (wp->w_redr_type != 0) {
- win_update(wp);
- }
- if (wp->w_redr_status) {
- win_redr_status(wp);
- }
+ // update all windows that need updating
+ update_prepare();
+
+ FOR_ALL_WINDOWS_IN_TAB(wp, curtab) {
+ if (wp->w_redr_type != 0) {
+ update_window_hl(wp, wp->w_redr_type >= NOT_VALID);
+ win_update(wp);
+ }
+ if (wp->w_redr_status) {
+ win_redr_status(wp);
}
+ }
- update_finish();
+ update_finish();
}
/*