Patch 8.2.0050
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)
Files: src/mark.c, src/testdir/test_marks.vim,
src/testdir/test_viminfo.vim, src/viminfo.c
*** ../vim-8.2.0049/src/mark.c 2019-12-04 21:47:10.000000000 +0100
--- src/mark.c 2019-12-27 17:31:18.535551942 +0100
***************
*** 854,862 ****
else
n = i - 'A';
namedfm[n].fmark.mark.lnum = 0;
VIM_CLEAR(namedfm[n].fname);
#ifdef FEAT_VIMINFO
! namedfm[n].time_set = 0;
#endif
}
}
--- 854,863 ----
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 = digit ? 0 : vim_time();
#endif
}
}
*** ../vim-8.2.0049/src/testdir/test_marks.vim 2019-12-02 20:37:22.000000000 +0100
--- src/testdir/test_marks.vim 2019-12-27 17:31:18.535551942 +0100
***************
*** 144,149 ****
--- 144,154 ----
" 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
*** ../vim-8.2.0049/src/testdir/test_viminfo.vim 2019-10-10 16:42:04.000000000 +0200
--- src/testdir/test_viminfo.vim 2019-12-27 17:31:18.535551942 +0100
***************
*** 323,328 ****
--- 323,345 ----
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
*** ../vim-8.2.0049/src/viminfo.c 2019-11-02 22:51:27.000000000 +0100
--- src/viminfo.c 2019-12-27 17:31:18.535551942 +0100
***************
*** 2055,2062 ****
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))
fm = &vi_namedfm[i];
else
fm = &namedfm_p[i];
--- 2055,2061 ----
for (i = 0; i < NMARKS; i++)
{
if (vi_namedfm != NULL
! && (vi_namedfm[i].time_set > namedfm_p[i].time_set))
fm = &vi_namedfm[i];
else
fm = &namedfm_p[i];
*** ../vim-8.2.0049/src/version.c 2019-12-27 17:20:51.533918083 +0100
--- src/version.c 2019-12-27 17:30:56.467635802 +0100
***************
*** 744,745 ****
--- 744,747 ----
{ /* Add new patch number below this line */
+ /**/
+ 50,
/**/
--
Vim is like Emacs without all the typing. (John "Johann" Spetz)
/// Bram Moolenaar -- Br...@Moolenaar.net --
http://www.Moolenaar.net \\\
/// sponsor Vim, vote for features --
http://www.Vim.org/sponsor/ \\\
\\\ an exciting new programming language --
http://www.Zimbu.org ///
\\\ help me help AIDS victims --
http://ICCF-Holland.org ///