Patch 8.0.1440
Problem: Terminal window: some vterm responses are delayed.
Solution: After writing input. check if there is output to read. (Ozaki
Kiichi, closes #2594)
Files: src/terminal.c, src/testdir/test_search.vim,
src/testdir/test_terminal.vim
*** ../vim-8.0.1439/src/terminal.c 2018-01-26 21:10:59.531172083 +0100
--- src/terminal.c 2018-01-30 22:29:26.724773911 +0100
***************
*** 650,664 ****
--- 650,699 ----
}
/*
+ * Get the part that is connected to the tty. Normally this is PART_IN, but
+ * when writing buffer lines to the job it can be another. This makes it
+ * possible to do "1,5term vim -".
+ */
+ static ch_part_T
+ get_tty_part(term_T *term)
+ {
+ #ifdef UNIX
+ ch_part_T parts[3] = {PART_IN, PART_OUT, PART_ERR};
+ int i;
+
+ for (i = 0; i < 3; ++i)
+ {
+ int fd = term->tl_job->jv_channel->ch_part[parts[i]].ch_fd;
+
+ if (isatty(fd))
+ return parts[i];
+ }
+ #endif
+ return PART_IN;
+ }
+
+ /*
* Write job output "msg[len]" to the vterm.
*/
static void
term_write_job_output(term_T *term, char_u *msg, size_t len)
{
VTerm *vterm = term->tl_vterm;
+ size_t prevlen = vterm_output_get_buffer_current(vterm);
vterm_input_write(vterm, (char *)msg, len);
+ /* flush vterm buffer when vterm responded to control sequence */
+ if (prevlen != vterm_output_get_buffer_current(vterm))
+ {
+ char buf[KEY_BUF_LEN];
+ size_t curlen = vterm_output_read(vterm, buf, KEY_BUF_LEN);
+
+ if (curlen > 0)
+ channel_send(term->tl_job->jv_channel, get_tty_part(term),
+ (char_u *)buf, (int)curlen, NULL);
+ }
+
/* this invokes the damage callbacks */
vterm_screen_flush_damage(vterm_obtain_screen(vterm));
}
***************
*** 1239,1267 ****
}
/*
- * Get the part that is connected to the tty. Normally this is PART_IN, but
- * when writing buffer lines to the job it can be another. This makes it
- * possible to do "1,5term vim -".
- */
- static ch_part_T
- get_tty_part(term_T *term)
- {
- #ifdef UNIX
- ch_part_T parts[3] = {PART_IN, PART_OUT, PART_ERR};
- int i;
-
- for (i = 0; i < 3; ++i)
- {
- int fd = term->tl_job->jv_channel->ch_part[parts[i]].ch_fd;
-
- if (isatty(fd))
- return parts[i];
- }
- #endif
- return PART_IN;
- }
-
- /*
* Send keys to terminal.
* Return FAIL when the key needs to be handled in Normal mode.
* Return OK when the key was dropped or sent to the terminal.
--- 1274,1279 ----
*** ../vim-8.0.1439/src/testdir/test_search.vim 2017-12-19 22:25:35.267003085
+0100
--- src/testdir/test_search.vim 2018-01-30 22:26:30.750182498 +0100
***************
*** 619,624 ****
--- 619,626 ----
let buf = term_start([GetVimProg(), '--clean', '-c', 'set noswapfile',
'Xsearch.txt'], {'term_rows': 3})
call WaitFor({-> lines == [term_getline(buf, 1), term_getline(buf, 2)] })
+ " wait for vim to complete initialization
+ call term_wait(buf)
" Get attr of normal(a0), incsearch(a1), hlsearch(a2) highlight
call term_sendkeys(buf, ":set incsearch hlsearch\<cr>")
*** ../vim-8.0.1439/src/testdir/test_terminal.vim 2018-01-26
20:05:04.149790948 +0100
--- src/testdir/test_terminal.vim 2018-01-30 22:26:30.750182498 +0100
***************
*** 806,808 ****
--- 806,831 ----
let cmd = "call term_start(0, {'curwin' : 1, 'term_finish' : 'close'})"
call assert_fails(cmd, 'E474')
endfunc
+
+ func Test_terminal_response_to_control_sequence()
+ if !has('unix')
+ return
+ endif
+
+ let buf = Run_shell_in_terminal({})
+ call term_wait(buf)
+
+ call term_sendkeys(buf, s:python . " -c 'import
sys;sys.stdout.write(\"\\x1b[6n\")'\<cr>")
+ " wait for the response of control sequence from libvterm (and send it to
tty)
+ call term_wait(buf, 100)
+ " wait for output from tty to display
+ call term_wait(buf)
+ call assert_match(';\d\+R', term_getline(buf, 2))
+
+ call term_sendkeys(buf, "\<c-c>")
+ call term_wait(buf)
+ call Stop_shell_in_terminal(buf)
+
+ exe buf . 'bwipe'
+ unlet g:job
+ endfunc
*** ../vim-8.0.1439/src/version.c 2018-01-30 21:47:48.025251378 +0100
--- src/version.c 2018-01-30 22:28:05.673422487 +0100
***************
*** 773,774 ****
--- 773,776 ----
{ /* Add new patch number below this line */
+ /**/
+ 1440,
/**/
--
Ten bugs in the hand is better than one as yet undetected.
/// Bram Moolenaar -- [email protected] -- http://www.Moolenaar.net \\\
/// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\ an exciting new programming language -- http://www.Zimbu.org ///
\\\ help me help AIDS victims -- http://ICCF-Holland.org ///
--
--
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php
---
You received this message because you are subscribed to the Google Groups
"vim_dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.