diff --git a/src/pty.c b/src/pty.c index 9b03612227..151a2780f7 100644 --- a/src/pty.c +++ b/src/pty.c @@ -267,10 +267,11 @@ OpenPTY(char **ttyn) } #endif -#if defined(HAVE_SVR4_PTYS) && !defined(PTY_DONE) && !defined(hpux) && !defined(MACOS_X) +#if defined(HAVE_SVR4_PTYS) && !defined(PTY_DONE) && !defined(hpux) \ + && !(defined(MACOS_X) && !defined(MAC_OS_X_VERSION_10_6)) /* NOTE: Even though HPUX can have /dev/ptmx, the code below doesn't work! - * Same for Mac OS X Leopard. */ + * Same for Mac OS X Leopard (10.5). */ #define PTY_DONE int OpenPTY(char **ttyn) diff --git a/src/terminal.c b/src/terminal.c index ba9806de51..291bf4cac2 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; @@ -1930,6 +1931,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; } @@ -2273,8 +2278,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); @@ -2357,6 +2362,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 27cb38aded..5d903c0988 100644 --- a/src/version.c +++ b/src/version.c @@ -776,6 +776,10 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 1167, +/**/ + 1166, /**/ 1165, /**/