diff options
-rw-r--r-- | src/ex_cmds.c | 2 | ||||
-rw-r--r-- | src/terminal.c | 29 | ||||
-rw-r--r-- | src/version.c | 2 |
3 files changed, 21 insertions, 12 deletions
diff --git a/src/ex_cmds.c b/src/ex_cmds.c index 78fe17823e..0eaa662b25 100644 --- a/src/ex_cmds.c +++ b/src/ex_cmds.c @@ -3186,7 +3186,7 @@ do_write(exarg_T *eap) ffname = eap->arg; #ifdef FEAT_BROWSE - if (cmdmod.browse) + if (cmdmod.browse && !exiting) { browse_file = do_browse(BROWSE_SAVE, (char_u *)_("Save As"), ffname, NULL, NULL, NULL, curbuf); diff --git a/src/terminal.c b/src/terminal.c index 3511e0c805..93b0817076 100644 --- a/src/terminal.c +++ b/src/terminal.c @@ -358,6 +358,16 @@ setup_job_options(jobopt_T *opt, int rows, int cols) } /* + * Flush messages on channels. + */ + static void +term_flush_messages() +{ + mch_check_messages(); + parse_queued_messages(); +} + +/* * Close a terminal buffer (and its window). Used when creating the terminal * fails. */ @@ -1455,8 +1465,7 @@ term_try_stop_job(buf_T *buf) return OK; ui_delay(10L, FALSE); - mch_check_messages(); - parse_queued_messages(); + term_flush_messages(); } return FAIL; } @@ -3064,7 +3073,7 @@ term_channel_closed(channel_T *ch) for (term = first_term; term != NULL; term = next_term) { next_term = term->tl_next; - if (term->tl_job == ch->ch_job) + if (term->tl_job == ch->ch_job && !term->tl_channel_closed) { term->tl_channel_closed = TRUE; did_one = TRUE; @@ -5628,33 +5637,31 @@ f_term_wait(typval_T *argvars, typval_T *rettv UNUSED) ch_log(NULL, "term_wait(): waiting for channel to close"); while (buf->b_term != NULL && !buf->b_term->tl_channel_closed) { - mch_check_messages(); - parse_queued_messages(); + term_flush_messages(); + ui_delay(10L, FALSE); if (!buf_valid(buf)) /* If the terminal is closed when the channel is closed the * buffer disappears. */ break; } - mch_check_messages(); - parse_queued_messages(); + + term_flush_messages(); } else { long wait = 10L; - mch_check_messages(); - parse_queued_messages(); + term_flush_messages(); /* Wait for some time for any channel I/O. */ if (argvars[1].v_type != VAR_UNKNOWN) wait = tv_get_number(&argvars[1]); ui_delay(wait, TRUE); - mch_check_messages(); /* Flushing messages on channels is hopefully sufficient. * TODO: is there a better way? */ - parse_queued_messages(); + term_flush_messages(); } } diff --git a/src/version.c b/src/version.c index c21c12c6d7..5514b4b9c9 100644 --- a/src/version.c +++ b/src/version.c @@ -778,6 +778,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 1592, +/**/ 1591, /**/ 1590, |