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.
diff --git a/src/os_unix.c b/src/os_unix.c
index f7b5ae4..b4808b5 100644
--- a/src/os_unix.c
+++ b/src/os_unix.c
@@ -438,17 +438,31 @@
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();