1
0
forked from aniani/vim

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)
This commit is contained in:
Bram Moolenaar
2019-12-27 17:33:26 +01:00
parent 297610ba4b
commit 8cd6cd8087
5 changed files with 27 additions and 3 deletions

View File

@@ -854,9 +854,10 @@ ex_delmarks(exarg_T *eap)
else else
n = i - 'A'; n = i - 'A';
namedfm[n].fmark.mark.lnum = 0; namedfm[n].fmark.mark.lnum = 0;
namedfm[n].fmark.fnum = 0;
VIM_CLEAR(namedfm[n].fname); VIM_CLEAR(namedfm[n].fname);
#ifdef FEAT_VIMINFO #ifdef FEAT_VIMINFO
namedfm[n].time_set = 0; namedfm[n].time_set = digit ? 0 : vim_time();
#endif #endif
} }
} }

View File

@@ -144,6 +144,11 @@ func Test_delmarks()
" Deleting an already deleted mark should not fail. " Deleting an already deleted mark should not fail.
delmarks x 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. " Test deleting a range of marks.
norm ma norm ma
norm mb norm mb

View File

@@ -323,6 +323,23 @@ func Test_viminfo_marks()
call assert_equal([bufb, 22, 1, 0], getpos("'3")) " time 30 call assert_equal([bufb, 22, 1, 0], getpos("'3")) " time 30
call assert_equal([bufb, 12, 1, 0], getpos("'4")) " time 25 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') call delete('Xviminfo')
exe 'bwipe ' . bufa exe 'bwipe ' . bufa
exe 'bwipe ' . bufb exe 'bwipe ' . bufb

View File

@@ -742,6 +742,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 */
/**/
50,
/**/ /**/
49, 49,
/**/ /**/

View File

@@ -2055,8 +2055,7 @@ write_viminfo_filemarks(FILE *fp)
for (i = 0; i < NMARKS; i++) for (i = 0; i < NMARKS; i++)
{ {
if (vi_namedfm != NULL if (vi_namedfm != NULL
&& (vi_namedfm[i].time_set > namedfm_p[i].time_set && (vi_namedfm[i].time_set > namedfm_p[i].time_set))
|| namedfm_p[i].fmark.mark.lnum == 0))
fm = &vi_namedfm[i]; fm = &vi_namedfm[i];
else else
fm = &namedfm_p[i]; fm = &namedfm_p[i];