# HG changeset patch # User Bram Moolenaar # Date 1577465104 -3600 # Node ID de2d1820215a4e42089a52d87cd9168241b30adc # Parent 51c1bf5c3bb0b479308e34f30c28dfa789e203cc 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 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) diff --git a/src/mark.c b/src/mark.c --- 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 } } diff --git a/src/testdir/test_marks.vim b/src/testdir/test_marks.vim --- 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 diff --git a/src/testdir/test_viminfo.vim b/src/testdir/test_viminfo.vim --- 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 diff --git a/src/version.c b/src/version.c --- 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, diff --git a/src/viminfo.c b/src/viminfo.c --- 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];