# HG changeset patch # User Christian Brabandt # Date 1506797104 -7200 # Node ID f8beecfea2c4d6037588b37b7db0a1a380bb48a0 # Parent 146d737348b7d4cb53d7cca88752d1b1aaf57424 patch 8.0.1167: Motif: typing in terminal window is slow commit https://github.com/vim/vim/commit/3a497e1a414dc44b3df6a6fca60838ecd8ff0ca6 Author: Bram Moolenaar Date: Sat Sep 30 20:40:27 2017 +0200 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. diff --git a/src/terminal.c b/src/terminal.c --- 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, VTermRec 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 --- a/src/version.c +++ b/src/version.c @@ -762,6 +762,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 1167, +/**/ 1166, /**/ 1165,