changeset 23903:402f1d8653c1 v8.2.2494

patch 8.2.2494: ":rviminfo!" clears most of oldfiles Commit: https://github.com/vim/vim/commit/3ff656f6b43465083b58e1d2fb9b8008abc5bc17 Author: Bram Moolenaar <Bram@vim.org> Date: Wed Feb 10 19:22:15 2021 +0100 patch 8.2.2494: ":rviminfo!" clears most of oldfiles Problem: ":rviminfo!" clears most of oldfiles. Solution: Add VIF_ONLY_CURBUF to read_viminfo(). (closes https://github.com/vim/vim/issues/1781)
author Bram Moolenaar <Bram@vim.org>
date Wed, 10 Feb 2021 19:30:04 +0100
parents cc5df920f1b9
children e2c0053823a5
files src/version.c src/vim.h src/viminfo.c
diffstat 3 files changed, 14 insertions(+), 9 deletions(-) [+]
line wrap: on
line diff
--- a/src/version.c
+++ b/src/version.c
@@ -751,6 +751,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    2494,
+/**/
     2493,
 /**/
     2492,
--- a/src/vim.h
+++ b/src/vim.h
@@ -2458,10 +2458,11 @@ typedef enum {
 #define DOSO_GVIMRC	2	// loading gvimrc file
 
 // flags for read_viminfo() and children
-#define VIF_WANT_INFO		1	// load non-mark info
-#define VIF_WANT_MARKS		2	// load file marks
-#define VIF_FORCEIT		4	// overwrite info already read
-#define VIF_GET_OLDFILES	8	// load v:oldfiles
+#define VIF_WANT_INFO	    1	// load non-mark info
+#define VIF_WANT_MARKS	    2	// load file marks
+#define VIF_ONLY_CURBUF	    4	// bail out after loading marks for curbuf
+#define VIF_FORCEIT	    8	// overwrite info already read
+#define VIF_GET_OLDFILES    16	// load v:oldfiles
 
 // flags for buf_freeall()
 #define BFA_DEL		 1	// buffer is going to be deleted
--- a/src/viminfo.c
+++ b/src/viminfo.c
@@ -2219,7 +2219,8 @@ buf_compare(const void *s1, const void *
 /*
  * Handle marks in the viminfo file:
  * fp_out != NULL: copy marks, in time order with buffers in "buflist".
- * fp_out == NULL && (flags & VIF_WANT_MARKS): read marks for curbuf only
+ * fp_out == NULL && (flags & VIF_WANT_MARKS): read marks for curbuf
+ * fp_out == NULL && (flags & VIF_ONLY_CURBUF): bail out after curbuf marks
  * fp_out == NULL && (flags & VIF_GET_OLDFILES | VIF_FORCEIT): fill v:oldfiles
  */
     static void
@@ -2448,7 +2449,8 @@ copy_viminfo_marks(
 		    wp->w_changelistidx = curbuf->b_changelistlen;
 	    }
 #endif
-	    break;
+	    if (flags & VIF_ONLY_CURBUF)
+		break;
 	}
     }
 
@@ -2473,7 +2475,7 @@ check_marks_read(void)
 {
     if (!curbuf->b_marks_read && get_viminfo_parameter('\'') > 0
 						  && curbuf->b_ffname != NULL)
-	read_viminfo(NULL, VIF_WANT_MARKS);
+	read_viminfo(NULL, VIF_WANT_MARKS | VIF_ONLY_CURBUF);
 
     // Always set b_marks_read; needed when 'viminfo' is changed to include
     // the ' parameter after opening a buffer.
@@ -2953,8 +2955,8 @@ do_viminfo(FILE *fp_in, FILE *fp_out, in
 		    && vir.vir_line[0] != '>')
 		;
 
-	do_copy_marks = (flags &
-			   (VIF_WANT_MARKS | VIF_GET_OLDFILES | VIF_FORCEIT));
+	do_copy_marks = (flags & (VIF_WANT_MARKS | VIF_ONLY_CURBUF
+					    | VIF_GET_OLDFILES | VIF_FORCEIT));
     }
 
     if (fp_out != NULL)