Mercurial > vim
changeset 4003:706c87d16d40 v7.3.756
updated for version 7.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)
author | Bram Moolenaar <bram@vim.org> |
---|---|
date | Wed, 12 Dec 2012 15:55:20 +0100 |
parents | 67ddca61dadf |
children | 74a6e96270ba |
files | src/quickfix.c src/version.c |
diffstat | 2 files changed, 36 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- 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) {