From: Bram Moolenaar Date: Tue, 25 Jun 2019 04:50:31 +0000 (+0200) Subject: patch 8.1.1592: may start file dialog while exiting X-Git-Tag: v8.1.1592 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=5c381eb9e72990e4153045f4911c59b9b2194edd;p=vim patch 8.1.1592: may start file dialog while exiting Problem: May start file dialog while exiting. Solution: Ignore the "browse" modifier when exiting. (Ozaki Kiichi, closes #4582 --- diff --git a/src/ex_cmds.c b/src/ex_cmds.c index 78fe17823..0eaa662b2 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 3511e0c80..93b081707 100644 --- a/src/terminal.c +++ b/src/terminal.c @@ -357,6 +357,16 @@ setup_job_options(jobopt_T *opt, int rows, int cols) opt->jo_term_cols = 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 c21c12c6d..5514b4b9c 100644 --- a/src/version.c +++ b/src/version.c @@ -777,6 +777,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 1592, /**/ 1591, /**/