]> git.ipfire.org Git - thirdparty/vim.git/commitdiff
updated for version 7.3.756 v7.3.756
authorBram Moolenaar <Bram@vim.org>
Wed, 12 Dec 2012 14:55:20 +0000 (15:55 +0100)
committerBram Moolenaar <Bram@vim.org>
Wed, 12 Dec 2012 14:55:20 +0000 (15:55 +0100)
Problem:    A location list can get a wrong count in :lvimgrep.
Solution:   Check if the list was changed by autocommands. (mostly by
            Christian Brabandt)

src/quickfix.c
src/version.c

index ac9366952b71394de884c4cca60e18fc56362046..2f8155a4c97717b4171bc64cda93fa1d68d9e8cf 100644 (file)
@@ -3109,6 +3109,9 @@ ex_vimgrep(eap)
     char_u     *p;
     int                fi;
     qf_info_T  *qi = &ql_info;
+#ifdef FEAT_AUTOCMD
+    qfline_T   *cur_qf_start;
+#endif
     qfline_T   *prevp = NULL;
     long       lnum;
     buf_T      *buf;
@@ -3218,6 +3221,12 @@ ex_vimgrep(eap)
      * ":lcd %:p:h" changes the meaning of short path names. */
     mch_dirname(dirname_start, MAXPATHL);
 
+#ifdef FEAT_AUTOCMD
+     /* Remeber the value of qf_start, so that we can check for autocommands
+      * changing the current quickfix list. */
+    cur_qf_start = qi->qf_lists[qi->qf_curlist].qf_start;
+#endif
+
     seconds = (time_t)0;
     for (fi = 0; fi < fcount && !got_int && tomatch > 0; ++fi)
     {
@@ -3273,6 +3282,28 @@ ex_vimgrep(eap)
            /* Use existing, loaded buffer. */
            using_dummy = FALSE;
 
+#ifdef FEAT_AUTOCMD
+       if (cur_qf_start != qi->qf_lists[qi->qf_curlist].qf_start)
+       {
+           int idx;
+
+           /* Autocommands changed the quickfix list.  Find the one we were
+            * using and restore it. */
+           for (idx = 0; idx < LISTCOUNT; ++idx)
+               if (cur_qf_start == qi->qf_lists[idx].qf_start)
+               {
+                   qi->qf_curlist = idx;
+                   break;
+               }
+           if (idx == LISTCOUNT)
+           {
+               /* List cannot be found, create a new one. */
+               qf_new_list(qi, *eap->cmdlinep);
+               cur_qf_start = qi->qf_lists[qi->qf_curlist].qf_start;
+           }
+       }
+#endif
+
        if (buf == NULL)
        {
            if (!got_int)
@@ -3324,6 +3355,9 @@ ex_vimgrep(eap)
                if (got_int)
                    break;
            }
+#ifdef FEAT_AUTOCMD
+           cur_qf_start = qi->qf_lists[qi->qf_curlist].qf_start;
+#endif
 
            if (using_dummy)
            {
index de2329ef0ec07baa0399993040e8107dd36b1d10..aec15bdd0253d27ad5cf71a609ea4cb8c886f2bf 100644 (file)
@@ -725,6 +725,8 @@ static char *(features[]) =
 
 static int included_patches[] =
 {   /* Add new patch number below this line */
+/**/
+    756,
 /**/
     755,
 /**/