diff src/buffer.c @ 13782:3be5e8306a3e v8.0.1763

patch 8.0.1763: :argedit does not reuse an empty unnamed buffer commit https://github.com/vim/vim/commit/46a53dfc29689c6a0d80e3820e8b0a48dba6b6ec Author: Bram Moolenaar <Bram@vim.org> Date: Tue Apr 24 21:58:51 2018 +0200 patch 8.0.1763: :argedit does not reuse an empty unnamed buffer Problem: :argedit does not reuse an empty unnamed buffer. Solution: Add the BLN_CURBUF flag and fix all the side effects. (Christian Brabandt, closes #2713)
author Christian Brabandt <cb@256bit.org>
date Tue, 24 Apr 2018 22:00:07 +0200
parents 7d2039b2ecc8
children fc03fabbedc5
line wrap: on
line diff
--- a/src/buffer.c
+++ b/src/buffer.c
@@ -1842,6 +1842,20 @@ no_write_message_nobang(buf_T *buf UNUSE
 static int  top_file_num = 1;		/* highest file number */
 
 /*
+ * Return TRUE if the current buffer is empty, unnamed, unmodified and used in
+ * only one window.  That means it can be re-used.
+ */
+    int
+curbuf_reusable(void)
+{
+    return (curbuf != NULL
+	&& curbuf->b_ffname == NULL
+	&& curbuf->b_nwindows <= 1
+	&& (curbuf->b_ml.ml_mfp == NULL || BUFEMPTY())
+	&& !curbufIsChanged());
+}
+
+/*
  * Add a file name to the buffer list.  Return a pointer to the buffer.
  * If the same file name already exists return a pointer to that buffer.
  * If it does not exist, or if fname == NULL, a new entry is created.
@@ -1921,11 +1935,7 @@ buflist_new(
      * buffer.)
      */
     buf = NULL;
-    if ((flags & BLN_CURBUF)
-	    && curbuf != NULL
-	    && curbuf->b_ffname == NULL
-	    && curbuf->b_nwindows <= 1
-	    && (curbuf->b_ml.ml_mfp == NULL || BUFEMPTY()))
+    if ((flags & BLN_CURBUF) && curbuf_reusable())
     {
 	buf = curbuf;
 	/* It's like this buffer is deleted.  Watch out for autocommands that