]> granicus.if.org Git - vim/commitdiff
updated for version 7.3.1197 v7.3.1197
authorBram Moolenaar <Bram@vim.org>
Sat, 15 Jun 2013 14:31:47 +0000 (16:31 +0200)
committerBram Moolenaar <Bram@vim.org>
Sat, 15 Jun 2013 14:31:47 +0000 (16:31 +0200)
Problem:    ":wviminfo!" does not write history previously read from a viminfo
            file.  (Roland Eggner)
Solution:   When not merging history write all entries.

src/ex_cmds.c
src/ex_getln.c
src/proto/ex_getln.pro
src/version.c

index a61bcdd39eeaa60eb2d826cd38d08ca17eb65e58..445b66fee5b520c10638ff70842f97e1af9077ea 100644 (file)
@@ -1722,11 +1722,11 @@ read_viminfo(file, flags)
 }
 
 /*
- * write_viminfo() -- Write the viminfo file.  The old one is read in first so
- * that effectively a merge of current info and old info is done.  This allows
- * multiple vims to run simultaneously, without losing any marks etc.  If
- * forceit is TRUE, then the old file is not read in, and only internal info is
- * written to the file. -- webb
+ * Write the viminfo file.  The old one is read in first so that effectively a
+ * merge of current info and old info is done.  This allows multiple vims to
+ * run simultaneously, without losing any marks etc.
+ * If "forceit" is TRUE, then the old file is not read in, and only internal
+ * info is written to the file.
  */
     void
 write_viminfo(file, forceit)
@@ -2047,6 +2047,7 @@ do_viminfo(fp_in, fp_out, flags)
     int                count = 0;
     int                eof = FALSE;
     vir_T      vir;
+    int                merge = FALSE;
 
     if ((vir.vir_line = alloc(LSIZE)) == NULL)
        return;
@@ -2058,9 +2059,12 @@ do_viminfo(fp_in, fp_out, flags)
     if (fp_in != NULL)
     {
        if (flags & VIF_WANT_INFO)
+       {
            eof = read_viminfo_up_to_marks(&vir,
                                         flags & VIF_FORCEIT, fp_out != NULL);
-       else
+           merge = TRUE;
+       }
+       else if (flags != 0)
            /* Skip info, find start of marks */
            while (!(eof = viminfo_readline(&vir))
                    && vir.vir_line[0] != '>')
@@ -2079,7 +2083,7 @@ do_viminfo(fp_in, fp_out, flags)
        write_viminfo_search_pattern(fp_out);
        write_viminfo_sub_string(fp_out);
 #ifdef FEAT_CMDHIST
-       write_viminfo_history(fp_out);
+       write_viminfo_history(fp_out, merge);
 #endif
        write_viminfo_registers(fp_out);
 #ifdef FEAT_EVAL
index 4bebe2309a34d588fb7ef68cf6d8f2a5082e736a..e407ab0ae7d6692a35333f80ac78fd029971daa0 100644 (file)
@@ -6003,6 +6003,9 @@ ex_history(eap)
 #endif
 
 #if (defined(FEAT_VIMINFO) && defined(FEAT_CMDHIST)) || defined(PROTO)
+/*
+ * Buffers for history read from a viminfo file.  Only valid while reading.
+ */
 static char_u **viminfo_history[HIST_COUNT] = {NULL, NULL, NULL, NULL};
 static int     viminfo_hisidx[HIST_COUNT] = {0, 0, 0, 0};
 static int     viminfo_hislen[HIST_COUNT] = {0, 0, 0, 0};
@@ -6184,9 +6187,16 @@ finish_viminfo_history()
     }
 }
 
+/*
+ * Write history to viminfo file in "fp".
+ * When "merge" is TRUE merge history lines with a previously read viminfo
+ * file, data is in viminfo_history[].
+ * When "merge" is FALSE just write all history lines.  Used for ":wviminfo!".
+ */
     void
-write_viminfo_history(fp)
+write_viminfo_history(fp, merge)
     FILE    *fp;
+    int            merge;
 {
     int            i;
     int            type;
@@ -6236,7 +6246,9 @@ write_viminfo_history(fp)
                    p = round == 1 ? history[type][i].hisstr
                                   : viminfo_history[type] == NULL ? NULL
                                                   : viminfo_history[type][i];
-                   if (p != NULL && (round == 2 || !history[type][i].viminfo))
+                   if (p != NULL && (round == 2
+                                      || !merge
+                                      || !history[type][i].viminfo))
                    {
                        --num_saved;
                        fputc(hist_type2char(type, TRUE), fp);
index 9c2b5f6ea14395b20e95fd49018ad9ec5045e6c6..a8f960b1023f346c1179c91d8061a681b46efb8b 100644 (file)
@@ -51,7 +51,7 @@ void ex_history __ARGS((exarg_T *eap));
 void prepare_viminfo_history __ARGS((int asklen, int writing));
 int read_viminfo_history __ARGS((vir_T *virp, int writing));
 void finish_viminfo_history __ARGS((void));
-void write_viminfo_history __ARGS((FILE *fp));
+void write_viminfo_history __ARGS((FILE *fp, int merge));
 void cmd_pchar __ARGS((int c, int offset));
 int cmd_gchar __ARGS((int offset));
 char_u *script_get __ARGS((exarg_T *eap, char_u *cmd));
index 8fa7aace804994fb3de8eee7a52c4f812dea1292..ca687c7f19dae46995d8e6aa16727ac7dd0d4265 100644 (file)
@@ -728,6 +728,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    1197,
 /**/
     1196,
 /**/