forked from aniani/vim
patch 8.0.1276: key lost when window closed in exit callback
Problem: Typed key is lost when the terminal window is closed in exit callback. (Gabriel Barta) Solution: When the current window changes bail out of the wait loop. (closes #2302)
This commit is contained in:
@@ -6300,6 +6300,8 @@ has_non_ascii(char_u *s)
|
|||||||
void
|
void
|
||||||
parse_queued_messages(void)
|
parse_queued_messages(void)
|
||||||
{
|
{
|
||||||
|
win_T *old_curwin = curwin;
|
||||||
|
|
||||||
/* For Win32 mch_breakcheck() does not check for input, do it here. */
|
/* For Win32 mch_breakcheck() does not check for input, do it here. */
|
||||||
# if defined(WIN32) && defined(FEAT_JOB_CHANNEL)
|
# if defined(WIN32) && defined(FEAT_JOB_CHANNEL)
|
||||||
channel_handle_events(FALSE);
|
channel_handle_events(FALSE);
|
||||||
@@ -6324,6 +6326,11 @@ parse_queued_messages(void)
|
|||||||
/* Check if any jobs have ended. */
|
/* Check if any jobs have ended. */
|
||||||
job_check_ended();
|
job_check_ended();
|
||||||
# endif
|
# endif
|
||||||
|
|
||||||
|
/* If the current window changed we need to bail out of the waiting loop.
|
||||||
|
* E.g. when a job exit callback closes the terminal window. */
|
||||||
|
if (curwin != old_curwin)
|
||||||
|
ins_char_typebuf(K_IGNORE);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@@ -38,8 +38,6 @@
|
|||||||
* in tl_scrollback are no longer used.
|
* in tl_scrollback are no longer used.
|
||||||
*
|
*
|
||||||
* TODO:
|
* TODO:
|
||||||
* - Termdebug: issue #2154 might be avoided by adding -quiet to gdb?
|
|
||||||
* patch by Christian, 2017 Oct 23.
|
|
||||||
* - in GUI vertical split causes problems. Cursor is flickering. (Hirohito
|
* - in GUI vertical split causes problems. Cursor is flickering. (Hirohito
|
||||||
* Higashi, 2017 Sep 19)
|
* Higashi, 2017 Sep 19)
|
||||||
* - double click in Window toolbar starts Visual mode (but not always?).
|
* - double click in Window toolbar starts Visual mode (but not always?).
|
||||||
@@ -1581,8 +1579,12 @@ terminal_loop(int blocking)
|
|||||||
|
|
||||||
c = term_vgetc();
|
c = term_vgetc();
|
||||||
if (!term_use_loop())
|
if (!term_use_loop())
|
||||||
|
{
|
||||||
/* job finished while waiting for a character */
|
/* job finished while waiting for a character */
|
||||||
|
if (c != K_IGNORE)
|
||||||
|
vungetc(c);
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
if (c == K_IGNORE)
|
if (c == K_IGNORE)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
@@ -761,6 +761,8 @@ static char *(features[]) =
|
|||||||
|
|
||||||
static int included_patches[] =
|
static int included_patches[] =
|
||||||
{ /* Add new patch number below this line */
|
{ /* Add new patch number below this line */
|
||||||
|
/**/
|
||||||
|
1276,
|
||||||
/**/
|
/**/
|
||||||
1275,
|
1275,
|
||||||
/**/
|
/**/
|
||||||
|
Reference in New Issue
Block a user