Skip to content

Commit 1ed2276

Browse files
committed
patch 8.0.1353: QuickFixCmdPost is not used consistently
Problem: QuickFixCmdPost is not used consistently. Solution: Invoke QuickFixCmdPost consistently after QuickFixCmdPre. (Yegappan Lakshmanan, closes #2377)
1 parent f38c86e commit 1ed2276

3 files changed

Lines changed: 146 additions & 43 deletions

File tree

src/quickfix.c

Lines changed: 25 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -4055,6 +4055,7 @@ ex_cfile(exarg_T *eap)
40554055
#ifdef FEAT_AUTOCMD
40564056
char_u *au_name = NULL;
40574057
#endif
4058+
int res;
40584059

40594060
if (eap->cmdidx == CMD_lfile || eap->cmdidx == CMD_lgetfile
40604061
|| eap->cmdidx == CMD_laddfile)
@@ -4102,28 +4103,18 @@ ex_cfile(exarg_T *eap)
41024103
* :caddfile adds to an existing quickfix list. If there is no
41034104
* quickfix list then a new list is created.
41044105
*/
4105-
if (qf_init(wp, p_ef, p_efm, (eap->cmdidx != CMD_caddfile
4106-
&& eap->cmdidx != CMD_laddfile),
4107-
*eap->cmdlinep, enc) > 0
4108-
&& (eap->cmdidx == CMD_cfile
4109-
|| eap->cmdidx == CMD_lfile))
4110-
{
4106+
res = qf_init(wp, p_ef, p_efm, (eap->cmdidx != CMD_caddfile
4107+
&& eap->cmdidx != CMD_laddfile), *eap->cmdlinep, enc);
41114108
#ifdef FEAT_AUTOCMD
4112-
if (au_name != NULL)
4113-
apply_autocmds(EVENT_QUICKFIXCMDPOST, au_name, NULL, FALSE, curbuf);
4109+
if (au_name != NULL)
4110+
apply_autocmds(EVENT_QUICKFIXCMDPOST, au_name, NULL, FALSE, curbuf);
41144111
#endif
4112+
if (res > 0 && (eap->cmdidx == CMD_cfile || eap->cmdidx == CMD_lfile))
4113+
{
41154114
if (wp != NULL)
41164115
qi = GET_LOC_LIST(wp);
41174116
qf_jump(qi, 0, 0, eap->forceit); /* display first error */
41184117
}
4119-
4120-
else
4121-
{
4122-
#ifdef FEAT_AUTOCMD
4123-
if (au_name != NULL)
4124-
apply_autocmds(EVENT_QUICKFIXCMDPOST, au_name, NULL, FALSE, curbuf);
4125-
#endif
4126-
}
41274118
}
41284119

41294120
/*
@@ -5450,6 +5441,7 @@ ex_cbuffer(exarg_T *eap)
54505441
#ifdef FEAT_AUTOCMD
54515442
char_u *au_name = NULL;
54525443
#endif
5444+
int res;
54535445

54545446
if (eap->cmdidx == CMD_lbuffer || eap->cmdidx == CMD_lgetbuffer
54555447
|| eap->cmdidx == CMD_laddbuffer)
@@ -5509,20 +5501,19 @@ ex_cbuffer(exarg_T *eap)
55095501
qf_title = IObuff;
55105502
}
55115503

5512-
if (qf_init_ext(qi, qi->qf_curlist, NULL, buf, NULL, p_efm,
5504+
res = qf_init_ext(qi, qi->qf_curlist, NULL, buf, NULL, p_efm,
55135505
(eap->cmdidx != CMD_caddbuffer
55145506
&& eap->cmdidx != CMD_laddbuffer),
55155507
eap->line1, eap->line2,
5516-
qf_title, NULL) > 0)
5517-
{
5508+
qf_title, NULL);
55185509
#ifdef FEAT_AUTOCMD
5519-
if (au_name != NULL)
5520-
apply_autocmds(EVENT_QUICKFIXCMDPOST, au_name,
5521-
curbuf->b_fname, TRUE, curbuf);
5510+
if (au_name != NULL)
5511+
apply_autocmds(EVENT_QUICKFIXCMDPOST, au_name,
5512+
curbuf->b_fname, TRUE, curbuf);
55225513
#endif
5523-
if (eap->cmdidx == CMD_cbuffer || eap->cmdidx == CMD_lbuffer)
5524-
qf_jump(qi, 0, 0, eap->forceit); /* display first error */
5525-
}
5514+
if (res > 0 && (eap->cmdidx == CMD_cbuffer ||
5515+
eap->cmdidx == CMD_lbuffer))
5516+
qf_jump(qi, 0, 0, eap->forceit); /* display first error */
55265517
}
55275518
}
55285519
}
@@ -5540,6 +5531,7 @@ ex_cexpr(exarg_T *eap)
55405531
#ifdef FEAT_AUTOCMD
55415532
char_u *au_name = NULL;
55425533
#endif
5534+
int res;
55435535

55445536
if (eap->cmdidx == CMD_lexpr || eap->cmdidx == CMD_lgetexpr
55455537
|| eap->cmdidx == CMD_laddexpr)
@@ -5578,20 +5570,19 @@ ex_cexpr(exarg_T *eap)
55785570
if ((tv->v_type == VAR_STRING && tv->vval.v_string != NULL)
55795571
|| (tv->v_type == VAR_LIST && tv->vval.v_list != NULL))
55805572
{
5581-
if (qf_init_ext(qi, qi->qf_curlist, NULL, NULL, tv, p_efm,
5573+
res = qf_init_ext(qi, qi->qf_curlist, NULL, NULL, tv, p_efm,
55825574
(eap->cmdidx != CMD_caddexpr
55835575
&& eap->cmdidx != CMD_laddexpr),
55845576
(linenr_T)0, (linenr_T)0, *eap->cmdlinep,
5585-
NULL) > 0)
5586-
{
5577+
NULL);
55875578
#ifdef FEAT_AUTOCMD
5588-
if (au_name != NULL)
5589-
apply_autocmds(EVENT_QUICKFIXCMDPOST, au_name,
5590-
curbuf->b_fname, TRUE, curbuf);
5579+
if (au_name != NULL)
5580+
apply_autocmds(EVENT_QUICKFIXCMDPOST, au_name,
5581+
curbuf->b_fname, TRUE, curbuf);
55915582
#endif
5592-
if (eap->cmdidx == CMD_cexpr || eap->cmdidx == CMD_lexpr)
5593-
qf_jump(qi, 0, 0, eap->forceit); /* display first error */
5594-
}
5583+
if (res > 0 && (eap->cmdidx == CMD_cexpr ||
5584+
eap->cmdidx == CMD_lexpr))
5585+
qf_jump(qi, 0, 0, eap->forceit); /* display first error */
55955586
}
55965587
else
55975588
EMSG(_("E777: String or List expected"));

src/testdir/test_quickfix.vim

Lines changed: 119 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1966,26 +1966,136 @@ func Test_Autocmd()
19661966
cexpr "F1:10:Line 10"
19671967
caddexpr "F1:20:Line 20"
19681968
cgetexpr "F1:30:Line 30"
1969-
enew! | call append(0, "F2:10:Line 10")
1970-
cbuffer!
1971-
enew! | call append(0, "F2:20:Line 20")
1972-
cgetbuffer
1973-
enew! | call append(0, "F2:30:Line 30")
1974-
caddbuffer
1975-
1969+
cexpr ""
1970+
caddexpr ""
1971+
cgetexpr ""
1972+
silent! cexpr non_existing_func()
1973+
silent! caddexpr non_existing_func()
1974+
silent! cgetexpr non_existing_func()
19761975
let l = ['precexpr',
19771976
\ 'postcexpr',
19781977
\ 'precaddexpr',
19791978
\ 'postcaddexpr',
19801979
\ 'precgetexpr',
19811980
\ 'postcgetexpr',
1982-
\ 'precbuffer',
1981+
\ 'precexpr',
1982+
\ 'postcexpr',
1983+
\ 'precaddexpr',
1984+
\ 'postcaddexpr',
1985+
\ 'precgetexpr',
1986+
\ 'postcgetexpr',
1987+
\ 'precexpr',
1988+
\ 'precaddexpr',
1989+
\ 'precgetexpr']
1990+
call assert_equal(l, g:acmds)
1991+
1992+
let g:acmds = []
1993+
enew! | call append(0, "F2:10:Line 10")
1994+
cbuffer!
1995+
enew! | call append(0, "F2:20:Line 20")
1996+
cgetbuffer
1997+
enew! | call append(0, "F2:30:Line 30")
1998+
caddbuffer
1999+
new
2000+
let bnum = bufnr('%')
2001+
bunload
2002+
exe 'silent! cbuffer! ' . bnum
2003+
exe 'silent! cgetbuffer ' . bnum
2004+
exe 'silent! caddbuffer ' . bnum
2005+
enew!
2006+
let l = ['precbuffer',
19832007
\ 'postcbuffer',
19842008
\ 'precgetbuffer',
19852009
\ 'postcgetbuffer',
19862010
\ 'precaddbuffer',
1987-
\ 'postcaddbuffer']
2011+
\ 'postcaddbuffer',
2012+
\ 'precbuffer',
2013+
\ 'precgetbuffer',
2014+
\ 'precaddbuffer']
19882015
call assert_equal(l, g:acmds)
2016+
2017+
call writefile(['Xtest:1:Line1'], 'Xtest')
2018+
call writefile([], 'Xempty')
2019+
let g:acmds = []
2020+
cfile Xtest
2021+
caddfile Xtest
2022+
cgetfile Xtest
2023+
cfile Xempty
2024+
caddfile Xempty
2025+
cgetfile Xempty
2026+
silent! cfile do_not_exist
2027+
silent! caddfile do_not_exist
2028+
silent! cgetfile do_not_exist
2029+
let l = ['precfile',
2030+
\ 'postcfile',
2031+
\ 'precaddfile',
2032+
\ 'postcaddfile',
2033+
\ 'precgetfile',
2034+
\ 'postcgetfile',
2035+
\ 'precfile',
2036+
\ 'postcfile',
2037+
\ 'precaddfile',
2038+
\ 'postcaddfile',
2039+
\ 'precgetfile',
2040+
\ 'postcgetfile',
2041+
\ 'precfile',
2042+
\ 'postcfile',
2043+
\ 'precaddfile',
2044+
\ 'postcaddfile',
2045+
\ 'precgetfile',
2046+
\ 'postcgetfile']
2047+
call assert_equal(l, g:acmds)
2048+
2049+
let g:acmds = []
2050+
helpgrep quickfix
2051+
silent! helpgrep non_existing_help_topic
2052+
vimgrep test Xtest
2053+
vimgrepadd test Xtest
2054+
silent! vimgrep non_existing_test Xtest
2055+
silent! vimgrepadd non_existing_test Xtest
2056+
set makeprg=
2057+
silent! make
2058+
set makeprg&
2059+
let l = ['prehelpgrep',
2060+
\ 'posthelpgrep',
2061+
\ 'prehelpgrep',
2062+
\ 'posthelpgrep',
2063+
\ 'previmgrep',
2064+
\ 'postvimgrep',
2065+
\ 'previmgrepadd',
2066+
\ 'postvimgrepadd',
2067+
\ 'previmgrep',
2068+
\ 'postvimgrep',
2069+
\ 'previmgrepadd',
2070+
\ 'postvimgrepadd',
2071+
\ 'premake',
2072+
\ 'postmake']
2073+
call assert_equal(l, g:acmds)
2074+
2075+
if has('unix')
2076+
" Run this test only on Unix-like systems. The grepprg may not be set on
2077+
" non-Unix systems.
2078+
" The following lines are used for the grep test. Don't remove.
2079+
" Grep_Autocmd_Text: Match 1
2080+
" GrepAdd_Autocmd_Text: Match 2
2081+
let g:acmds = []
2082+
silent grep Grep_Autocmd_Text test_quickfix.vim
2083+
silent grepadd GrepAdd_Autocmd_Text test_quickfix.vim
2084+
silent grep abc123def Xtest
2085+
silent grepadd abc123def Xtest
2086+
let l = ['pregrep',
2087+
\ 'postgrep',
2088+
\ 'pregrepadd',
2089+
\ 'postgrepadd',
2090+
\ 'pregrep',
2091+
\ 'postgrep',
2092+
\ 'pregrepadd',
2093+
\ 'postgrepadd']
2094+
call assert_equal(l, g:acmds)
2095+
endif
2096+
2097+
call delete('Xtest')
2098+
call delete('Xempty')
19892099
endfunc
19902100

19912101
func Test_Autocmd_Exception()

src/version.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -771,6 +771,8 @@ static char *(features[]) =
771771

772772
static int included_patches[] =
773773
{ /* Add new patch number below this line */
774+
/**/
775+
1353,
774776
/**/
775777
1352,
776778
/**/

0 commit comments

Comments
 (0)