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:
@@ -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
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -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
|
||||||
|
@@ -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
|
||||||
|
@@ -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,
|
||||||
/**/
|
/**/
|
||||||
|
@@ -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];
|
||||||
|
Reference in New Issue
Block a user