diff options
author | Bram Moolenaar <Bram@vim.org> | 2016-06-02 20:05:26 +0200 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2016-06-02 20:05:26 +0200 |
commit | cf7c11a9479ba7ce775b86c7a846fae48321d260 (patch) | |
tree | 58b3a7cd04f178bab618232b2eb3f0e4af9a1d93 /src/channel.c | |
parent | 01d46e41ba4967ee534db4b94ad642007634841e (diff) | |
download | vim-git-cf7c11a9479ba7ce775b86c7a846fae48321d260.tar.gz |
patch 7.4.1878v7.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.
Diffstat (limited to 'src/channel.c')
-rw-r--r-- | src/channel.c | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/src/channel.c b/src/channel.c index 75cadae7a..5168f7410 100644 --- a/src/channel.c +++ b/src/channel.c @@ -4403,6 +4403,21 @@ job_stop_on_exit() } /* + * 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_check_ended(void) job_status(job); /* may free "job" */ } } + if (channel_need_redraw) + { + channel_need_redraw = FALSE; + redraw_after_callback(); + } } /* @@ -4658,6 +4678,7 @@ job_status(job_T *job) 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) { |