Patch 8.0.1720
Problem: When a timer is running a terminal window may not close after a
shell has exited.
Solution: Call job_status() more often.
Files: src/terminal.c
*** ../vim-8.0.1719/src/terminal.c 2018-04-15 12:55:09.331988871 +0200
--- src/terminal.c 2018-04-15 17:03:39.155823711 +0200
***************
*** 40,56 ****
* TODO:
* - Win32: Make terminal used for :!cmd in the GUI work better. Allow for
* redirection. Probably in call to channel_set_pipes().
* - Copy text in the vterm to the Vim buffer once in a while, so that
* completion works.
* - in GUI vertical split causes problems. Cursor is flickering. (Hirohito
* Higashi, 2017 Sep 19)
* - after resizing windows overlap. (Boris Staletic, #2164)
- * - Redirecting output does not work on MS-Windows,
Test_terminal_redir_file()
- * is disabled.
* - cursor blinks in terminal on widows with a timer. (xtal8, #2142)
* - Termdebug does not work when Vim build with mzscheme. gdb hangs.
- * - MS-Windows GUI: WinBar has tearoff item
- * - MS-Windows GUI: still need to type a key after shell exits? #1924
* - After executing a shell command the status line isn't redraw.
* - add test for giving error for invalid 'termsize' value.
* - support minimal size when 'termsize' is "rows*cols".
--- 40,57 ----
* TODO:
* - Win32: Make terminal used for :!cmd in the GUI work better. Allow for
* redirection. Probably in call to channel_set_pipes().
+ * - Win32: Redirecting output does not work, Test_terminal_redir_file()
+ * is disabled.
* - Copy text in the vterm to the Vim buffer once in a while, so that
* completion works.
+ * - When starting terminal window with shell in terminal, then using :gui to
+ * switch to GUI, shell stops working. Scrollback seems wrong, command
+ * running in shell is still running.
* - in GUI vertical split causes problems. Cursor is flickering. (Hirohito
* Higashi, 2017 Sep 19)
* - after resizing windows overlap. (Boris Staletic, #2164)
* - cursor blinks in terminal on widows with a timer. (xtal8, #2142)
* - Termdebug does not work when Vim build with mzscheme. gdb hangs.
* - After executing a shell command the status line isn't redraw.
* - add test for giving error for invalid 'termsize' value.
* - support minimal size when 'termsize' is "rows*cols".
***************
*** 59,65 ****
* - Redrawing is slow with Athena and Motif. Also other GUI? (Ramel Eshed)
* - For the GUI fill termios with default values, perhaps like pangoterm:
*
http://bazaar.launchpad.net/~leonerd/pangoterm/trunk/view/head:/main.c#L134
! * - when 'encoding' is not utf-8, or the job is using another encoding, setup
* conversions.
*/
--- 60,66 ----
* - Redrawing is slow with Athena and Motif. Also other GUI? (Ramel Eshed)
* - For the GUI fill termios with default values, perhaps like pangoterm:
*
http://bazaar.launchpad.net/~leonerd/pangoterm/trunk/view/head:/main.c#L134
! * - When 'encoding' is not utf-8, or the job is using another encoding, setup
* conversions.
*/
***************
*** 1223,1239 ****
/*
* Return TRUE if the job for "term" is still running.
*/
! int
! term_job_running(term_T *term)
{
/* Also consider the job finished when the channel is closed, to avoid a
* race condition when updating the title. */
! return term != NULL
&& term->tl_job != NULL
! && channel_is_open(term->tl_job->jv_channel)
! && (term->tl_job->jv_status == JOB_STARTED
|| term->tl_job->jv_channel->ch_keep_open);
}
/*
--- 1224,1255 ----
/*
* Return TRUE if the job for "term" is still running.
+ * If "check_job_status" is TRUE update the job status.
*/
! static int
! term_job_running_check(term_T *term, int check_job_status)
{
/* Also consider the job finished when the channel is closed, to avoid a
* race condition when updating the title. */
! if (term != NULL
&& term->tl_job != NULL
! && channel_is_open(term->tl_job->jv_channel))
! {
! if (check_job_status)
! job_status(term->tl_job);
! return (term->tl_job->jv_status == JOB_STARTED
|| term->tl_job->jv_channel->ch_keep_open);
+ }
+ return FALSE;
+ }
+
+ /*
+ * Return TRUE if the job for "term" is still running.
+ */
+ int
+ term_job_running(term_T *term)
+ {
+ return term_job_running_check(term, FALSE);
}
/*
***************
*** 1892,1897 ****
--- 1908,1939 ----
}
/*
+ * Returns TRUE if the current window contains a terminal and we are sending
+ * keys to the job.
+ * If "check_job_status" is TRUE update the job status.
+ */
+ static int
+ term_use_loop_check(int check_job_status)
+ {
+ term_T *term = curbuf->b_term;
+
+ return term != NULL
+ && !term->tl_normal_mode
+ && term->tl_vterm != NULL
+ && term_job_running_check(term, check_job_status);
+ }
+
+ /*
+ * Returns TRUE if the current window contains a terminal and we are sending
+ * keys to the job.
+ */
+ int
+ term_use_loop(void)
+ {
+ return term_use_loop_check(FALSE);
+ }
+
+ /*
* Called when entering a window with the mouse. If this is a terminal window
* we may want to change state.
*/
***************
*** 1902,1908 ****
if (term != NULL)
{
! if (term_use_loop())
{
reset_VIsual_and_resel();
if (State & INSERT)
--- 1944,1950 ----
if (term != NULL)
{
! if (term_use_loop_check(TRUE))
{
reset_VIsual_and_resel();
if (State & INSERT)
***************
*** 1915,1935 ****
}
/*
- * Returns TRUE if the current window contains a terminal and we are sending
- * keys to the job.
- */
- int
- term_use_loop(void)
- {
- term_T *term = curbuf->b_term;
-
- return term != NULL
- && !term->tl_normal_mode
- && term->tl_vterm != NULL
- && term_job_running(term);
- }
-
- /*
* Wait for input and send it to the job.
* When "blocking" is TRUE wait for a character to be typed. Otherwise return
* when there is no more typahead.
--- 1957,1962 ----
***************
*** 1976,1982 ****
restore_cursor = TRUE;
c = term_vgetc();
! if (!term_use_loop())
{
/* Job finished while waiting for a character. Push back the
* received character. */
--- 2003,2009 ----
restore_cursor = TRUE;
c = term_vgetc();
! if (!term_use_loop_check(TRUE))
{
/* Job finished while waiting for a character. Push back the
* received character. */
***************
*** 2027,2033 ****
#ifdef FEAT_CMDL_INFO
clear_showcmd();
#endif
! if (!term_use_loop())
/* job finished while waiting for a character */
break;
--- 2054,2060 ----
#ifdef FEAT_CMDL_INFO
clear_showcmd();
#endif
! if (!term_use_loop_check(TRUE))
/* job finished while waiting for a character */
break;
*** ../vim-8.0.1719/src/version.c 2018-04-15 16:03:12.775985408 +0200
--- src/version.c 2018-04-15 17:19:34.401164855 +0200
***************
*** 764,765 ****
--- 764,767 ----
{ /* Add new patch number below this line */
+ /**/
+ 1720,
/**/
--
I'm in shape. Round IS a shape.
/// 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.