From 3a497e1a414dc44b3df6a6fca60838ecd8ff0ca6 Mon Sep 17 00:00:00 2001 From: Bram Moolenaar Date: Sat, 30 Sep 2017 20:40:27 +0200 Subject: patch 8.0.1167: Motif: typing in terminal window is slow Problem: Motif: typing in terminal window is slow. Solution: Do not redraw the whole terminal window but only was was changed. --- src/terminal.c | 13 ++++++++++--- src/version.c | 2 ++ 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/src/terminal.c b/src/terminal.c index 029b2c8f6..f0ae5ed31 100644 --- a/src/terminal.c +++ b/src/terminal.c @@ -41,6 +41,7 @@ * - in GUI vertical split causes problems. Cursor is flickering. (Hirohito * Higashi, 2017 Sep 19) * - Shift-Tab does not work. + * - after resizing windows overlap. (Boris Staletic, #2164) * - double click in Window toolbar starts Visual mode. * - Redirecting output does not work on MS-Windows, Test_terminal_redir_file() * is disabled. @@ -134,7 +135,7 @@ struct terminal_S { char_u *tl_status_text; /* NULL or allocated */ /* Range of screen rows to update. Zero based. */ - int tl_dirty_row_start; /* -1 if nothing dirty */ + int tl_dirty_row_start; /* MAX_ROW if nothing dirty */ int tl_dirty_row_end; /* row below last one to update */ garray_T tl_scrollback; @@ -1925,6 +1926,10 @@ handle_moverect(VTermRect dest, VTermRect src, void *user) clear_attr); } } + + term->tl_dirty_row_start = MIN(term->tl_dirty_row_start, dest.start_row); + term->tl_dirty_row_end = MIN(term->tl_dirty_row_end, dest.end_row); + redraw_buf_later(term->tl_buffer, NOT_VALID); return 1; } @@ -2268,8 +2273,8 @@ term_update_window(win_T *wp) vterm_state_get_cursorpos(state, &pos); position_cursor(wp, &pos); - /* TODO: Only redraw what changed. */ - for (pos.row = 0; pos.row < wp->w_height; ++pos.row) + for (pos.row = term->tl_dirty_row_start; pos.row < term->tl_dirty_row_end + && pos.row < wp->w_height; ++pos.row) { int off = screen_get_current_line_off(); int max_col = MIN(wp->w_width, term->tl_cols); @@ -2352,6 +2357,8 @@ term_update_window(win_T *wp) screen_line(wp->w_winrow + pos.row, wp->w_wincol, pos.col, wp->w_width, FALSE); } + term->tl_dirty_row_start = MAX_ROW; + term->tl_dirty_row_end = 0; return OK; } diff --git a/src/version.c b/src/version.c index f02ebe0e5..38743203f 100644 --- a/src/version.c +++ b/src/version.c @@ -761,6 +761,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 1167, /**/ 1166, /**/ -- cgit v1.2.1