changeset 3036:df33dba4e553 v7.3.290

updated for version 7.3.290 Problem: When a BufWriteCmd autocommand resets 'modified' this doesn't change older buffer states to be marked as 'modified' like ":write" does. (Yukihiro Nakadaira) Solution: When the BufWriteCmd resets 'modified' then adjust the undo information like ":write" does.
author Bram Moolenaar <bram@vim.org>
date Fri, 02 Sep 2011 11:56:20 +0200
parents ba9f075a347d
children 5dc0dbe052c0
files src/fileio.c src/version.c
diffstat 2 files changed, 18 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/src/fileio.c
+++ b/src/fileio.c
@@ -3342,8 +3342,22 @@ buf_write(buf, fname, sfname, start, end
 	}
 	else if (reset_changed && whole)
 	{
-	    if (!(did_cmd = apply_autocmds_exarg(EVENT_BUFWRITECMD,
-					 sfname, sfname, FALSE, curbuf, eap)))
+	    int was_changed = curbufIsChanged();
+
+	    did_cmd = apply_autocmds_exarg(EVENT_BUFWRITECMD,
+					  sfname, sfname, FALSE, curbuf, eap);
+	    if (did_cmd)
+	    {
+		if (was_changed && !curbufIsChanged())
+		{
+		    /* Written everything correctly and BufWriteCmd has reset
+		     * 'modified': Correct the undo information so that an
+		     * undo now sets 'modified'. */
+		    u_unchanged(curbuf);
+		    u_update_save_nr(curbuf);
+		}
+	    }
+	    else
 	    {
 #ifdef FEAT_QUICKFIX
 		if (overwriting && bt_nofile(curbuf))
--- a/src/version.c
+++ b/src/version.c
@@ -710,6 +710,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    290,
+/**/
     289,
 /**/
     288,