summaryrefslogtreecommitdiff
path: root/src/quickfix.c
diff options
context:
space:
mode:
authorBram Moolenaar <Bram@vim.org>2012-12-12 15:55:20 +0100
committerBram Moolenaar <Bram@vim.org>2012-12-12 15:55:20 +0100
commit321a9ec68041c75169002e54c1994a7d3933abbd (patch)
tree928ade61a72af436f0c3f71705ebeaf5c33797e0 /src/quickfix.c
parent09ba6d766bf4565a9cbdbcef54fba0c8d4420f84 (diff)
downloadvim-git-321a9ec68041c75169002e54c1994a7d3933abbd.tar.gz
updated for version 7.3.756v7.3.756
Problem: A location list can get a wrong count in :lvimgrep. Solution: Check if the list was changed by autocommands. (mostly by Christian Brabandt)
Diffstat (limited to 'src/quickfix.c')
-rw-r--r--src/quickfix.c34
1 files changed, 34 insertions, 0 deletions
diff --git a/src/quickfix.c b/src/quickfix.c
index ac9366952..2f8155a4c 100644
--- a/src/quickfix.c
+++ b/src/quickfix.c
@@ -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)
{