]> git.ipfire.org Git - thirdparty/vim.git/commitdiff
updated for version 7.3.891 v7.3.891
authorBram Moolenaar <Bram@vim.org>
Sun, 14 Apr 2013 14:26:15 +0000 (16:26 +0200)
committerBram Moolenaar <Bram@vim.org>
Sun, 14 Apr 2013 14:26:15 +0000 (16:26 +0200)
Problem:    Merging viminfo history doesn't work well.
Solution:   Don't stop when one type of history is empty. Don't merge history
            when writing viminfo.

src/ex_getln.c
src/version.c

index f3c364451e95d6919a42b143fd629c10f0b76cb5..1faadd6c36adb8112a0553ab313871f4a35f5fd1 100644 (file)
@@ -6130,7 +6130,7 @@ finish_viminfo_history()
     for (type = 0; type < HIST_COUNT; ++type)
     {
        if (history[type] == NULL)
-           return;
+           continue;
        idx = hisidx[type] + viminfo_hisidx[type];
        if (idx >= hislen)
            idx -= hislen;
@@ -6182,6 +6182,7 @@ write_viminfo_history(fp)
     int            num_saved;
     char_u  *p;
     int            c;
+    int     round;
 
     init_history();
     if (hislen == 0)
@@ -6200,26 +6201,50 @@ write_viminfo_history(fp)
                                        _("Input Line"));
        if (num_saved > hislen)
            num_saved = hislen;
-       i = hisidx[type];
-       if (i >= 0)
-           while (num_saved--)
-           {
-               p = history[type][i].hisstr;
-               if (p != NULL)
+
+       /*
+        * Merge typed and viminfo history:
+        * round 1: history of typed commands.
+        * round 2: history from recently read viminfo.
+        */
+       for (round = 1; round <= 2; ++round)
+       {
+           i = round == 1 ? hisidx[type] : 0;
+           if (i >= 0)
+               while (num_saved > 0
+                       && !(round == 2 && i >= viminfo_hisidx[type]))
                {
-                   fputc(hist_type2char(type, TRUE), fp);
-                   /* For the search history: put the separator in the second
-                    * column; use a space if there isn't one. */
-                   if (type == HIST_SEARCH)
+                   p = round == 1 ? history[type][i].hisstr
+                                                  : viminfo_history[type][i];
+                   if (p != NULL)
                    {
-                       c = p[STRLEN(p) + 1];
-                       putc(c == NUL ? ' ' : c, fp);
+                       --num_saved;
+                       fputc(hist_type2char(type, TRUE), fp);
+                       /* For the search history: put the separator in the
+                        * second column; use a space if there isn't one. */
+                       if (type == HIST_SEARCH)
+                       {
+                           c = p[STRLEN(p) + 1];
+                           putc(c == NUL ? ' ' : c, fp);
+                       }
+                       viminfo_writestring(fp, p);
+                   }
+                   if (round == 1)
+                   {
+                       /* Decrement index, loop around and stop when back at
+                        * the start. */
+                       if (--i < 0)
+                           i = hislen - 1;
+                       if (i == hisidx[type])
+                           break;
+                   }
+                   else
+                   {
+                       /* Increment index. Stop at the end in the while. */
+                       ++i;
                    }
-                   viminfo_writestring(fp, p);
                }
-               if (--i < 0)
-                   i = hislen - 1;
-           }
+       }
     }
 }
 #endif /* FEAT_VIMINFO */
index 197940edc29aa434a86eac9210a3ce04a09195c8..75cbcdb0fd7004457df14fe1b86bb504ac476457 100644 (file)
@@ -728,6 +728,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    891,
 /**/
     890,
 /**/