diff options
author | Bram Moolenaar <Bram@vim.org> | 2012-12-12 15:55:20 +0100 |
---|---|---|
committer | Bram Moolenaar <Bram@vim.org> | 2012-12-12 15:55:20 +0100 |
commit | 321a9ec68041c75169002e54c1994a7d3933abbd (patch) | |
tree | 928ade61a72af436f0c3f71705ebeaf5c33797e0 | |
parent | 09ba6d766bf4565a9cbdbcef54fba0c8d4420f84 (diff) | |
download | vim-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)
-rw-r--r-- | src/quickfix.c | 34 | ||||
-rw-r--r-- | src/version.c | 2 |
2 files changed, 36 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) { diff --git a/src/version.c b/src/version.c index de2329ef0..aec15bdd0 100644 --- a/src/version.c +++ b/src/version.c @@ -726,6 +726,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 756, +/**/ 755, /**/ 754, |