diff options
author | Justin M. Keyes <justinkz@gmail.com> | 2017-02-28 15:14:20 +0100 |
---|---|---|
committer | Justin M. Keyes <justinkz@gmail.com> | 2017-03-01 14:47:49 +0100 |
commit | 3aedf9d669370165d9fdc0d8132e2d9e3c5231c1 (patch) | |
tree | 56eb0dbef19b44a758f69ac8906d3a54cec58c03 | |
parent | 857113ca8c76cd103b752ad4460ee1b091e0831a (diff) | |
download | rneovim-3aedf9d669370165d9fdc0d8132e2d9e3c5231c1.tar.gz rneovim-3aedf9d669370165d9fdc0d8132e2d9e3c5231c1.tar.bz2 rneovim-3aedf9d669370165d9fdc0d8132e2d9e3c5231c1.zip |
terminal: Avoid unnecessary redraws.
-rw-r--r-- | src/nvim/terminal.c | 17 |
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; |