diff src/ex_getln.c @ 4903:2fc1f3346bfb v7.3.1197

updated for version 7.3.1197 Problem: ":wviminfo!" does not write history previously read from a viminfo file. (Roland Eggner) Solution: When not merging history write all entries.
author Bram Moolenaar <bram@vim.org>
date Sat, 15 Jun 2013 16:31:47 +0200
parents 66803af09906
children 9ae0fe467776
line wrap: on
line diff
--- a/src/ex_getln.c
+++ b/src/ex_getln.c
@@ -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);