# HG changeset patch # User Christian Brabandt # Date 1512846006 -3600 # Node ID 8d5b451d7babe64df43e239e81a1b6902d5d6d04 # Parent 9b3b804a3fcd97e5a5743934fa772c964a936ba6 patch 8.0.1382: get "no write since last change" message if terminal is open commit https://github.com/vim/vim/commit/f405c8fe85bba6dc96a68a12ab976f745fc51a38 Author: Bram Moolenaar Date: Sat Dec 9 19:51:49 2017 +0100 patch 8.0.1382: get "no write since last change" message if terminal is open Problem: Get "no write since last change" message if a terminal is open. (Fritz mehner) Solution: Don't consider a buffer changed if it's a terminal window. diff --git a/src/ex_cmds.c b/src/ex_cmds.c --- 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 --- 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 --- 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 --- 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,