diff src/os_unix.c @ 9189:4b55d8e162d4 v7.4.1878

commit https://github.com/vim/vim/commit/cf7c11a9479ba7ce775b86c7a846fae48321d260 Author: Bram Moolenaar <Bram@vim.org> Date: Thu Jun 2 20:05:26 2016 +0200 patch 7.4.1878 Problem: Whether a job has exited isn't detected until a character is typed. After calling exit_cb the cursor is in the wrong place. Solution: Don't wait forever for a character to be typed when there is a pending job. Update the screen if neede after calling exit_cb.
author Christian Brabandt <cb@256bit.org>
date Thu, 02 Jun 2016 20:15:05 +0200
parents 3aab62b76363
children c19eb05b19df
line wrap: on
line diff
--- a/src/os_unix.c
+++ b/src/os_unix.c
@@ -438,17 +438,31 @@ mch_inchar(
 
     for (;;)	/* repeat until we got a character */
     {
+	long	wtime_now = -1L;
+
 	while (do_resize)    /* window changed size */
 	    handle_resize();
 
 #ifdef MESSAGE_QUEUE
 	parse_queued_messages();
+
+# ifdef FEAT_JOB_CHANNEL
+	if (has_pending_job())
+	{
+	    /* Don't wait longer than a few seconds, checking for a finished
+	     * job requires polling. */
+	    if (p_ut > 9000L)
+		wtime_now = 1000L;
+	    else
+		wtime_now = 10000L - p_ut;
+	}
+# endif
 #endif
 	/*
 	 * We want to be interrupted by the winch signal
 	 * or by an event on the monitored file descriptors.
 	 */
-	if (!WaitForChar(-1L))
+	if (!WaitForChar(wtime_now))
 	{
 	    if (do_resize)	    /* interrupted by SIGWINCH signal */
 		handle_resize();