summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2017-09-30 20:40:27 +0200
committerBram Moolenaar <Bram@vim.org>2017-09-30 20:40:27 +0200
commit3a497e1a414dc44b3df6a6fca60838ecd8ff0ca6 (patch)
treefaa9025657058be18b3339fec2e72463d8a0113f
parentc958b316386fa44116a02bfbd5859edc54a4a7e0 (diff)
downloadvim-git-3a497e1a414dc44b3df6a6fca60838ecd8ff0ca6.tar.gz
patch 8.0.1167: Motif: typing in terminal window is slowv8.0.1167
Problem: Motif: typing in terminal window is slow. Solution: Do not redraw the whole terminal window but only was was changed.
-rw-r--r--src/terminal.c13
-rw-r--r--src/version.c2
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
@@ -762,6 +762,8 @@ static char *(features[]) =
static int included_patches[] =
{ /* Add new patch number below this line */
/**/
+ 1167,
+/**/
1166,
/**/
1165,