diff --git a/src/ex_cmds.c b/src/ex_cmds.c index fc55815517..cd8b0c3f57 100644 --- a/src/ex_cmds.c +++ b/src/ex_cmds.c @@ -1482,7 +1482,7 @@ do_shell( #endif && msg_silent == 0) FOR_ALL_BUFFERS(buf) - if (bufIsChanged(buf)) + if (bufIsChangedNotTerm(buf)) { #ifdef FEAT_GUI_MSWIN if (!winstart) diff --git a/src/proto/undo.pro b/src/proto/undo.pro index 2b3258df3a..1052d40c2b 100644 --- a/src/proto/undo.pro +++ b/src/proto/undo.pro @@ -25,6 +25,7 @@ void u_clearline(void); void u_undoline(void); void u_blockfree(buf_T *buf); int bufIsChanged(buf_T *buf); +int bufIsChangedNotTerm(buf_T *buf); int curbufIsChanged(void); void u_eval_tree(u_header_T *first_uhp, list_T *list); /* vim: set ft=c : */ diff --git a/src/undo.c b/src/undo.c index 435decc3ae..69d4fc6030 100644 --- a/src/undo.c +++ b/src/undo.c @@ -3523,6 +3523,8 @@ u_save_line(linenr_T lnum) * Check if the 'modified' flag is set, or 'ff' has changed (only need to * check the first character, because it can only be "dos", "unix" or "mac"). * "nofile" and "scratch" type buffers are considered to always be unchanged. + * Also considers a buffer changed when a terminal window contains a running + * job. */ int bufIsChanged(buf_T *buf) @@ -3531,6 +3533,15 @@ bufIsChanged(buf_T *buf) if (term_job_running(buf->b_term)) return TRUE; #endif + return bufIsChangedNotTerm(buf); +} + +/* + * Like bufIsChanged() but ignoring a terminal window. + */ + int +bufIsChangedNotTerm(buf_T *buf) +{ return !bt_dontwrite(buf) && (buf->b_changed || file_ff_differs(buf, TRUE)); } diff --git a/src/version.c b/src/version.c index 8ae4769504..3c24cf92d5 100644 --- a/src/version.c +++ b/src/version.c @@ -771,6 +771,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ +/**/ + 1382, /**/ 1381, /**/