diff src/fileio.c @ 19836:c32b295af9c5 v8.2.0474

patch 8.2.0474: cannot use :write when using a plugin with BufWriteCmd Commit: https://github.com/vim/vim/commit/0fff44152d06e6b662ad4bef172af07a041d2f3f Author: Bram Moolenaar <Bram@vim.org> Date: Sun Mar 29 16:06:29 2020 +0200 patch 8.2.0474: cannot use :write when using a plugin with BufWriteCmd Problem: Cannot use :write when using a plugin with BufWriteCmd. Solution: Reset BF_NOTEDITED after BufWriteCmd. (closes https://github.com/vim/vim/issues/5807)
author Bram Moolenaar <Bram@vim.org>
date Sun, 29 Mar 2020 16:15:03 +0200
parents 22f0dda71638
children 05b4efb062a7
line wrap: on
line diff
--- a/src/fileio.c
+++ b/src/fileio.c
@@ -261,11 +261,21 @@ readfile(
 	{
 	    if (apply_autocmds_exarg(EVENT_BUFREADCMD, NULL, sfname,
 							  FALSE, curbuf, eap))
+	    {
+		int status = OK;
 #ifdef FEAT_EVAL
-		return aborting() ? FAIL : OK;
-#else
-		return OK;
+		if (aborting())
+		    status = FAIL;
 #endif
+		// The BufReadCmd code usually uses ":read" to get the text and
+		// perhaps ":file" to change the buffer name. But we should
+		// consider this to work like ":edit", thus reset the
+		// BF_NOTEDITED flag.  Then ":write" will work to overwrite the
+		// same file.
+		if (status == OK)
+		    curbuf->b_flags &= ~BF_NOTEDITED;
+		return status;
+	    }
 	}
 	else if (apply_autocmds_exarg(EVENT_FILEREADCMD, sfname, sfname,
 							    FALSE, NULL, eap))