]> granicus.if.org Git - vim/commitdiff
patch 8.2.0050: after deleting a file mark it is still in viminfo v8.2.0050
authorBram Moolenaar <Bram@vim.org>
Fri, 27 Dec 2019 16:33:26 +0000 (17:33 +0100)
committerBram Moolenaar <Bram@vim.org>
Fri, 27 Dec 2019 16:33:26 +0000 (17:33 +0100)
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)

src/mark.c
src/testdir/test_marks.vim
src/testdir/test_viminfo.vim
src/version.c
src/viminfo.c

index ba24220ac92b4f25ab9274f2bd3ba41728179c28..e1dbe3a7468194b69899420dc1c0df5bc2e2f75d 100644 (file)
@@ -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
                    }
                }
index 96a77667f9fe4698e93d3ccd685acb76da41572a..3d04c70aa6d32a8e35d861ef0badcf08bc4fc3c7 100644 (file)
@@ -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
index a9dc8fd31a33a48669b00f318b498aa7c07b92a3..78e0f1a81ba61d2c87eaaacedce24c94101798a3 100644 (file)
@@ -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
index 85c8462df93a3a85979b610180007fd3c4322bba..568c15649a8209cdd1b80103ce39d259ba250a95 100644 (file)
@@ -742,6 +742,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    50,
 /**/
     49,
 /**/
index fd2be5f5cc5eb7d2e5512c5d96ea0fb9fe478e28..308a9a60977f505b6f0eb9a06a5c66dceacc290f 100644 (file)
@@ -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];