diff options
-rw-r--r-- | src/ex_cmds.c | 2 | ||||
-rw-r--r-- | src/proto/undo.pro | 1 | ||||
-rw-r--r-- | src/undo.c | 11 | ||||
-rw-r--r-- | src/version.c | 2 |
4 files changed, 15 insertions, 1 deletions
diff --git a/src/ex_cmds.c b/src/ex_cmds.c index fc5581551..cd8b0c3f5 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 2b3258df3..1052d40c2 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 435decc3a..69d4fc603 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 8ae476950..3c24cf92d 100644 --- a/src/version.c +++ b/src/version.c @@ -772,6 +772,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 1382, +/**/ 1381, /**/ 1380, |