summaryrefslogtreecommitdiff
path: root/src/terminal.c
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2017-08-13 15:16:53 +0200
committerBram Moolenaar <Bram@vim.org>2017-08-13 15:16:53 +0200
commit5cc1f2c47796f2f544ace9283d293af3b036a63f (patch)
tree2703a427be9d304d895cb7d79035e6881ec86027 /src/terminal.c
parent679653e59c6da7f6abc29470ef9d404582bacbb9 (diff)
downloadvim-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().
Diffstat (limited to 'src/terminal.c')
-rw-r--r--src/terminal.c25
1 files changed, 12 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);
- }
}
/*