Mercurial > vim
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)