diff options
author | Bram Moolenaar <Bram@vim.org> | 2017-08-13 15:16:53 +0200 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2017-08-13 15:16:53 +0200 |
commit | 5cc1f2c47796f2f544ace9283d293af3b036a63f (patch) | |
tree | 2703a427be9d304d895cb7d79035e6881ec86027 | |
parent | 679653e59c6da7f6abc29470ef9d404582bacbb9 (diff) | |
download | vim-5cc1f2c47796f2f544ace9283d293af3b036a63f.zip |
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().
-rw-r--r-- | src/terminal.c | 25 | ||||
-rw-r--r-- | src/version.c | 2 |
2 files changed, 14 insertions, 13 deletions
diff --git a/src/terminal.c b/src/terminal.c index 317615cfd..b98398bd9 100644 --- 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, channel_T *channel) 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, typval_T *rettv) 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 index 3833f586e..ec75b7120 100644 --- 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, |