0
0
mirror of https://github.com/vim/vim.git synced 2025-09-23 03:43:49 -04:00

patch 8.2.2494: ":rviminfo!" clears most of oldfiles

Problem:    ":rviminfo!" clears most of oldfiles.
Solution:   Add VIF_ONLY_CURBUF to read_viminfo(). (closes #1781)
This commit is contained in:
Bram Moolenaar
2021-02-10 19:22:15 +01:00
parent f3fa18468c
commit 3ff656f6b4
3 changed files with 14 additions and 9 deletions

View File

@@ -750,6 +750,8 @@ static char *(features[]) =
static int included_patches[] = static int included_patches[] =
{ /* Add new patch number below this line */ { /* Add new patch number below this line */
/**/
2494,
/**/ /**/
2493, 2493,
/**/ /**/

View File

@@ -2458,10 +2458,11 @@ typedef enum {
#define DOSO_GVIMRC 2 // loading gvimrc file #define DOSO_GVIMRC 2 // loading gvimrc file
// flags for read_viminfo() and children // flags for read_viminfo() and children
#define VIF_WANT_INFO 1 // load non-mark info #define VIF_WANT_INFO 1 // load non-mark info
#define VIF_WANT_MARKS 2 // load file marks #define VIF_WANT_MARKS 2 // load file marks
#define VIF_FORCEIT 4 // overwrite info already read #define VIF_ONLY_CURBUF 4 // bail out after loading marks for curbuf
#define VIF_GET_OLDFILES 8 // load v:oldfiles #define VIF_FORCEIT 8 // overwrite info already read
#define VIF_GET_OLDFILES 16 // load v:oldfiles
// flags for buf_freeall() // flags for buf_freeall()
#define BFA_DEL 1 // buffer is going to be deleted #define BFA_DEL 1 // buffer is going to be deleted

View File

@@ -2219,7 +2219,8 @@ buf_compare(const void *s1, const void *s2)
/* /*
* Handle marks in the viminfo file: * Handle marks in the viminfo file:
* fp_out != NULL: copy marks, in time order with buffers in "buflist". * 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 * fp_out == NULL && (flags & VIF_GET_OLDFILES | VIF_FORCEIT): fill v:oldfiles
*/ */
static void static void
@@ -2448,7 +2449,8 @@ copy_viminfo_marks(
wp->w_changelistidx = curbuf->b_changelistlen; wp->w_changelistidx = curbuf->b_changelistlen;
} }
#endif #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 if (!curbuf->b_marks_read && get_viminfo_parameter('\'') > 0
&& curbuf->b_ffname != NULL) && 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 // Always set b_marks_read; needed when 'viminfo' is changed to include
// the ' parameter after opening a buffer. // the ' parameter after opening a buffer.
@@ -2953,8 +2955,8 @@ do_viminfo(FILE *fp_in, FILE *fp_out, int flags)
&& vir.vir_line[0] != '>') && vir.vir_line[0] != '>')
; ;
do_copy_marks = (flags & do_copy_marks = (flags & (VIF_WANT_MARKS | VIF_ONLY_CURBUF
(VIF_WANT_MARKS | VIF_GET_OLDFILES | VIF_FORCEIT)); | VIF_GET_OLDFILES | VIF_FORCEIT));
} }
if (fp_out != NULL) if (fp_out != NULL)