# HG changeset patch # User Christian Brabandt # Date 1502631003 -7200 # Node ID ca1e425a5fbf4041127f560c3e9fd953bebf9dc7 # Parent 76c7a8c1ce69a96504c14299f24605bc6dafe90d patch 8.0.0924: terminal window not updated after using term_sendkeys() commit https://github.com/vim/vim/commit/5cc1f2c47796f2f544ace9283d293af3b036a63f Author: Bram Moolenaar Date: Sun Aug 13 15:16:53 2017 +0200 patch 8.0.0924: terminal window not updated after using term_sendkeys() Problem: Terminal window not updated after using term_sendkeys(). Solution: Call redraw_after_callback(). diff --git a/src/terminal.c b/src/terminal.c --- a/src/terminal.c +++ b/src/terminal.c @@ -47,7 +47,6 @@ * - do not store terminal window in viminfo. Or prefix term:// ? * - add a character in :ls output * - add 't' to mode() - * - set 'filetype' to "terminal"? * - use win_del_lines() to make scroll-up efficient. * - Make StatusLineTerm adjust UserN highlighting like StatusLineNC does, see * use of hightlight_stlnc[]. @@ -568,9 +567,9 @@ update_cursor(term_T *term, int redraw) if (term->tl_normal_mode) return; setcursor(); - if (redraw && term->tl_buffer == curbuf) + if (redraw) { - if (term->tl_cursor_visible) + if (term->tl_buffer == curbuf && term->tl_cursor_visible) cursor_on(); out_flush(); #ifdef FEAT_GUI @@ -598,11 +597,19 @@ write_to_term(buf_T *buffer, char_u *msg ch_log(channel, "writing %d bytes to terminal", (int)len); term_write_job_output(term, msg, len); + /* In Terminal-Normal mode we are displaying the buffer, not the terminal + * contents, thus no screen update is needed. */ if (!term->tl_normal_mode) { /* TODO: only update once in a while. */ - update_screen(0); - update_cursor(term, TRUE); + ch_log(term->tl_job->jv_channel, "updating screen"); + if (buffer == curbuf) + { + update_screen(0); + update_cursor(term, TRUE); + } + else + redraw_after_callback(); } } @@ -2558,14 +2565,6 @@ f_term_sendkeys(typval_T *argvars, typva send_keys_to_term(term, PTR2CHAR(msg), FALSE); msg += MB_PTR2LEN(msg); } - - if (!term->tl_normal_mode) - { - /* TODO: only update once in a while. */ - update_screen(0); - if (buf == curbuf) - update_cursor(term, TRUE); - } } /* diff --git a/src/version.c b/src/version.c --- a/src/version.c +++ b/src/version.c @@ -770,6 +770,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 924, +/**/ 923, /**/ 922,