aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJustin M. Keyes <justinkz@gmail.com>2017-02-28 15:14:20 +0100
committerJustin M. Keyes <justinkz@gmail.com>2017-03-01 14:47:49 +0100
commit3aedf9d669370165d9fdc0d8132e2d9e3c5231c1 (patch)
tree56eb0dbef19b44a758f69ac8906d3a54cec58c03
parent857113ca8c76cd103b752ad4460ee1b091e0831a (diff)
downloadrneovim-3aedf9d669370165d9fdc0d8132e2d9e3c5231c1.tar.gz
rneovim-3aedf9d669370165d9fdc0d8132e2d9e3c5231c1.tar.bz2
rneovim-3aedf9d669370165d9fdc0d8132e2d9e3c5231c1.zip
terminal: Avoid unnecessary redraws.
-rw-r--r--src/nvim/terminal.c17
1 files changed, 16 insertions, 1 deletions
diff --git a/src/nvim/terminal.c b/src/nvim/terminal.c
index f63730406e..4cd6eb5007 100644
--- a/src/nvim/terminal.c
+++ b/src/nvim/terminal.c
@@ -1003,9 +1003,12 @@ static void refresh_timer_cb(TimeWatcher *watcher, void *data)
map_foreach(invalidated_terminals, term, stub, {
refresh_terminal(term);
});
+ bool any_visible = is_term_visible();
pmap_clear(ptr_t)(invalidated_terminals);
unblock_autocmds();
- redraw(true);
+ if (any_visible) {
+ redraw(true);
+ }
end:
refresh_pending = false;
}
@@ -1119,6 +1122,18 @@ static void refresh_screen(Terminal *term, buf_T *buf)
term->invalid_end = -1;
}
+/// @return true if any invalidated terminal buffer is visible to the user
+static bool is_term_visible(void)
+{
+ FOR_ALL_WINDOWS_IN_TAB(wp, curtab) {
+ if (wp->w_buffer->terminal
+ && pmap_has(ptr_t)(invalidated_terminals, wp->w_buffer->terminal)) {
+ return true;
+ }
+ }
+ return false;
+}
+
static void redraw(bool restore_cursor)
{
Terminal *term = curbuf->terminal;