diff options
author | Bram Moolenaar <Bram@vim.org> | 2017-07-31 21:18:58 +0200 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2017-07-31 21:18:58 +0200 |
commit | 392d1bfa5e14b9534af322003723ebd57cedcc64 (patch) | |
tree | 71603292e05dbb383d15882462ea7fc98e0f7ac9 /src/terminal.c | |
parent | c9456cec0cfe956e083891187b791343e732207b (diff) | |
download | vim-git-392d1bfa5e14b9534af322003723ebd57cedcc64.tar.gz |
patch 8.0.0824: in Terminal mode the cursor and screen gets redrawnv8.0.0824
Problem: In Terminal mode the cursor and screen gets redrawn when the job
produces output.
Solution: Check for tl_terminal_mode. (partly by Yasuhiro Matsumoto, closes
#1904)
Diffstat (limited to 'src/terminal.c')
-rw-r--r-- | src/terminal.c | 27 |
1 files changed, 19 insertions, 8 deletions
diff --git a/src/terminal.c b/src/terminal.c index 1f155dbab..1423c5f55 100644 --- a/src/terminal.c +++ b/src/terminal.c @@ -36,6 +36,9 @@ * that buffer, attributes come from the scrollback buffer tl_scrollback. * * TODO: + * - Use "." for current line instead of optional. + * - make row and cols one-based instead of zero-based in term_ functions. + * - Add StatusLineTerm highlighting * - in bash mouse clicks are inserting characters. * - mouse scroll: when over other window, scroll that window. * - For the scrollback buffer store lines in the buffer, only attributes in @@ -351,6 +354,8 @@ term_write_job_output(term_T *term, char_u *msg, size_t len) static void update_cursor(term_T *term, int redraw) { + if (term->tl_terminal_mode) + return; setcursor(); if (redraw && term->tl_buffer == curbuf) { @@ -382,9 +387,12 @@ write_to_term(buf_T *buffer, char_u *msg, channel_T *channel) ch_logn(channel, "writing %d bytes to terminal", (int)len); term_write_job_output(term, msg, len); - /* TODO: only update once in a while. */ - update_screen(0); - update_cursor(term, TRUE); + if (!term->tl_terminal_mode) + { + /* TODO: only update once in a while. */ + update_screen(0); + update_cursor(term, TRUE); + } } /* @@ -1081,7 +1089,7 @@ handle_movecursor( if (wp->w_buffer == term->tl_buffer) position_cursor(wp, &pos); } - if (term->tl_buffer == curbuf) + if (term->tl_buffer == curbuf && !term->tl_terminal_mode) { may_toggle_cursor(term); update_cursor(term, term->tl_cursor_visible); @@ -2009,10 +2017,13 @@ f_term_sendkeys(typval_T *argvars, typval_T *rettv) msg += MB_PTR2LEN(msg); } - /* TODO: only update once in a while. */ - update_screen(0); - if (buf == curbuf) - update_cursor(term, TRUE); + if (!term->tl_terminal_mode) + { + /* TODO: only update once in a while. */ + update_screen(0); + if (buf == curbuf) + update_cursor(term, TRUE); + } } /* |