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/channel.c b/src/channel.c
index 75cadae..5168f74 100644
--- a/src/channel.c
+++ b/src/channel.c
@@ -4403,6 +4403,21 @@
}
/*
+ * Return TRUE when there is any job that might exit, which means
+ * job_check_ended() should be called once in a while.
+ */
+ int
+has_pending_job()
+{
+ job_T *job;
+
+ for (job = first_job; job != NULL; job = job->jv_next)
+ if (job->jv_status == JOB_STARTED && job_still_useful(job))
+ return TRUE;
+ return FALSE;
+}
+
+/*
* Called once in a while: check if any jobs that seem useful have ended.
*/
void
@@ -4425,6 +4440,11 @@
job_status(job); /* may free "job" */
}
}
+ if (channel_need_redraw)
+ {
+ channel_need_redraw = FALSE;
+ redraw_after_callback();
+ }
}
/*
@@ -4658,6 +4678,7 @@
job->jv_exit_partial, NULL);
clear_tv(&rettv);
--job->jv_refcount;
+ channel_need_redraw = TRUE;
}
if (job->jv_status == JOB_ENDED && job->jv_refcount == 0)
{