Mercurial > vim
changeset 18979:de2d1820215a v8.2.0050
patch 8.2.0050: after deleting a file mark it is still in viminfo
Commit: https://github.com/vim/vim/commit/8cd6cd8087ccf08e4303dbf5f732fc4b82b917e1
Author: Bram Moolenaar <Bram@vim.org>
Date: Fri Dec 27 17:33:26 2019 +0100
patch 8.2.0050: after deleting a file mark it is still in viminfo
Problem: After deleting a file mark it is still in viminfo.
Solution: When a file mark was deleted more recently than the mark in the
merged viminfo file was updated, do not store the mark. (Pavol
Juhas, closes #5401, closes #1339)
author | Bram Moolenaar <Bram@vim.org> |
---|---|
date | Fri, 27 Dec 2019 17:45:04 +0100 |
parents | 51c1bf5c3bb0 |
children | 120c9621fd30 |
files | src/mark.c src/testdir/test_marks.vim src/testdir/test_viminfo.vim src/version.c src/viminfo.c |
diffstat | 5 files changed, 27 insertions(+), 3 deletions(-) [+] |
line wrap: on
line diff
--- a/src/mark.c +++ b/src/mark.c @@ -854,9 +854,10 @@ ex_delmarks(exarg_T *eap) else n = i - 'A'; namedfm[n].fmark.mark.lnum = 0; + namedfm[n].fmark.fnum = 0; VIM_CLEAR(namedfm[n].fname); #ifdef FEAT_VIMINFO - namedfm[n].time_set = 0; + namedfm[n].time_set = digit ? 0 : vim_time(); #endif } }
--- a/src/testdir/test_marks.vim +++ b/src/testdir/test_marks.vim @@ -144,6 +144,11 @@ func Test_delmarks() " Deleting an already deleted mark should not fail. delmarks x + " getpos() should return all zeros after deleting a filemark. + norm mA + delmarks A + call assert_equal([0, 0, 0, 0], getpos("'A")) + " Test deleting a range of marks. norm ma norm mb
--- a/src/testdir/test_viminfo.vim +++ b/src/testdir/test_viminfo.vim @@ -323,6 +323,23 @@ func Test_viminfo_marks() call assert_equal([bufb, 22, 1, 0], getpos("'3")) " time 30 call assert_equal([bufb, 12, 1, 0], getpos("'4")) " time 25 + " deleted file marks are removed from viminfo + delmark C + wviminfo Xviminfo + rviminfo Xviminfo + call assert_equal([0, 0, 0, 0], getpos("'C")) + + " deleted file marks stay in viminfo if defined in another vim later + call test_settime(70) + call setpos("'D", [bufb, 8, 1, 0]) + wviminfo Xviminfo + call test_settime(65) + delmark D + call assert_equal([0, 0, 0, 0], getpos("'D")) + call test_settime(75) + rviminfo Xviminfo + call assert_equal([bufb, 8, 1, 0], getpos("'D")) + call delete('Xviminfo') exe 'bwipe ' . bufa exe 'bwipe ' . bufb
--- a/src/version.c +++ b/src/version.c @@ -743,6 +743,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 50, +/**/ 49, /**/ 48,
--- a/src/viminfo.c +++ b/src/viminfo.c @@ -2055,8 +2055,7 @@ write_viminfo_filemarks(FILE *fp) for (i = 0; i < NMARKS; i++) { if (vi_namedfm != NULL - && (vi_namedfm[i].time_set > namedfm_p[i].time_set - || namedfm_p[i].fmark.mark.lnum == 0)) + && (vi_namedfm[i].time_set > namedfm_p[i].time_set)) fm = &vi_namedfm[i]; else fm = &namedfm_p[i];