comparison src/quickfix.c @ 10056:21f685af3fc1 v7.4.2299

commit https://github.com/vim/vim/commit/04c4ce650f9e533cd35b2aa6803f4d354d3ec7aa Author: Bram Moolenaar <Bram@vim.org> Date: Thu Sep 1 15:45:58 2016 +0200 patch 7.4.2299 Problem: QuickFixCmdPre and QuickFixCmdPost autocommands are not always triggered. Solution: Also trigger on ":expr", ":cbuffer", etc. (Yegappan Lakshmanan)
author Christian Brabandt <cb@256bit.org>
date Thu, 01 Sep 2016 16:00:09 +0200
parents 4aead6a9b7a9
children 7a4fb555c83a
comparison
equal deleted inserted replaced
10055:7990eba2d4e6 10056:21f685af3fc1
4843 void 4843 void
4844 ex_cbuffer(exarg_T *eap) 4844 ex_cbuffer(exarg_T *eap)
4845 { 4845 {
4846 buf_T *buf = NULL; 4846 buf_T *buf = NULL;
4847 qf_info_T *qi = &ql_info; 4847 qf_info_T *qi = &ql_info;
4848 #ifdef FEAT_AUTOCMD
4849 char_u *au_name = NULL;
4850 #endif
4848 4851
4849 if (eap->cmdidx == CMD_lbuffer || eap->cmdidx == CMD_lgetbuffer 4852 if (eap->cmdidx == CMD_lbuffer || eap->cmdidx == CMD_lgetbuffer
4850 || eap->cmdidx == CMD_laddbuffer) 4853 || eap->cmdidx == CMD_laddbuffer)
4851 { 4854 {
4852 qi = ll_get_or_alloc_list(curwin); 4855 qi = ll_get_or_alloc_list(curwin);
4853 if (qi == NULL) 4856 if (qi == NULL)
4854 return; 4857 return;
4855 } 4858 }
4859
4860 #ifdef FEAT_AUTOCMD
4861 switch (eap->cmdidx)
4862 {
4863 case CMD_cbuffer: au_name = (char_u *)"cbuffer"; break;
4864 case CMD_cgetbuffer: au_name = (char_u *)"cgetbuffer"; break;
4865 case CMD_caddbuffer: au_name = (char_u *)"caddbuffer"; break;
4866 case CMD_lbuffer: au_name = (char_u *)"lbuffer"; break;
4867 case CMD_lgetbuffer: au_name = (char_u *)"lgetbuffer"; break;
4868 case CMD_laddbuffer: au_name = (char_u *)"laddbuffer"; break;
4869 default: break;
4870 }
4871 if (au_name != NULL)
4872 {
4873 apply_autocmds(EVENT_QUICKFIXCMDPRE, au_name,
4874 curbuf->b_fname, TRUE, curbuf);
4875 # ifdef FEAT_EVAL
4876 if (did_throw || force_abort)
4877 return;
4878 # endif
4879 }
4880 #endif
4856 4881
4857 if (*eap->arg == NUL) 4882 if (*eap->arg == NUL)
4858 buf = curbuf; 4883 buf = curbuf;
4859 else if (*skipwhite(skipdigits(eap->arg)) == NUL) 4884 else if (*skipwhite(skipdigits(eap->arg)) == NUL)
4860 buf = buflist_findnr(atoi((char *)eap->arg)); 4885 buf = buflist_findnr(atoi((char *)eap->arg));
4885 4910
4886 if (qf_init_ext(qi, NULL, buf, NULL, p_efm, 4911 if (qf_init_ext(qi, NULL, buf, NULL, p_efm,
4887 (eap->cmdidx != CMD_caddbuffer 4912 (eap->cmdidx != CMD_caddbuffer
4888 && eap->cmdidx != CMD_laddbuffer), 4913 && eap->cmdidx != CMD_laddbuffer),
4889 eap->line1, eap->line2, 4914 eap->line1, eap->line2,
4890 qf_title) > 0 4915 qf_title) > 0)
4891 && (eap->cmdidx == CMD_cbuffer 4916 {
4892 || eap->cmdidx == CMD_lbuffer)) 4917 #ifdef FEAT_AUTOCMD
4893 qf_jump(qi, 0, 0, eap->forceit); /* display first error */ 4918 if (au_name != NULL)
4919 apply_autocmds(EVENT_QUICKFIXCMDPOST, au_name,
4920 curbuf->b_fname, TRUE, curbuf);
4921 #endif
4922 if (eap->cmdidx == CMD_cbuffer || eap->cmdidx == CMD_lbuffer)
4923 qf_jump(qi, 0, 0, eap->forceit); /* display first error */
4924 }
4894 } 4925 }
4895 } 4926 }
4896 } 4927 }
4897 4928
4898 #if defined(FEAT_EVAL) || defined(PROTO) 4929 #if defined(FEAT_EVAL) || defined(PROTO)
4903 void 4934 void
4904 ex_cexpr(exarg_T *eap) 4935 ex_cexpr(exarg_T *eap)
4905 { 4936 {
4906 typval_T *tv; 4937 typval_T *tv;
4907 qf_info_T *qi = &ql_info; 4938 qf_info_T *qi = &ql_info;
4939 #ifdef FEAT_AUTOCMD
4940 char_u *au_name = NULL;
4941 #endif
4908 4942
4909 if (eap->cmdidx == CMD_lexpr || eap->cmdidx == CMD_lgetexpr 4943 if (eap->cmdidx == CMD_lexpr || eap->cmdidx == CMD_lgetexpr
4910 || eap->cmdidx == CMD_laddexpr) 4944 || eap->cmdidx == CMD_laddexpr)
4911 { 4945 {
4912 qi = ll_get_or_alloc_list(curwin); 4946 qi = ll_get_or_alloc_list(curwin);
4913 if (qi == NULL) 4947 if (qi == NULL)
4914 return; 4948 return;
4915 } 4949 }
4950
4951 #ifdef FEAT_AUTOCMD
4952 switch (eap->cmdidx)
4953 {
4954 case CMD_cexpr: au_name = (char_u *)"cexpr"; break;
4955 case CMD_cgetexpr: au_name = (char_u *)"cgetexpr"; break;
4956 case CMD_caddexpr: au_name = (char_u *)"caddexpr"; break;
4957 case CMD_lexpr: au_name = (char_u *)"lexpr"; break;
4958 case CMD_lgetexpr: au_name = (char_u *)"lgetexpr"; break;
4959 case CMD_laddexpr: au_name = (char_u *)"laddexpr"; break;
4960 default: break;
4961 }
4962 if (au_name != NULL)
4963 {
4964 apply_autocmds(EVENT_QUICKFIXCMDPRE, au_name,
4965 curbuf->b_fname, TRUE, curbuf);
4966 # ifdef FEAT_EVAL
4967 if (did_throw || force_abort)
4968 return;
4969 # endif
4970 }
4971 #endif
4916 4972
4917 /* Evaluate the expression. When the result is a string or a list we can 4973 /* Evaluate the expression. When the result is a string or a list we can
4918 * use it to fill the errorlist. */ 4974 * use it to fill the errorlist. */
4919 tv = eval_expr(eap->arg, NULL); 4975 tv = eval_expr(eap->arg, NULL);
4920 if (tv != NULL) 4976 if (tv != NULL)
4923 || (tv->v_type == VAR_LIST && tv->vval.v_list != NULL)) 4979 || (tv->v_type == VAR_LIST && tv->vval.v_list != NULL))
4924 { 4980 {
4925 if (qf_init_ext(qi, NULL, NULL, tv, p_efm, 4981 if (qf_init_ext(qi, NULL, NULL, tv, p_efm,
4926 (eap->cmdidx != CMD_caddexpr 4982 (eap->cmdidx != CMD_caddexpr
4927 && eap->cmdidx != CMD_laddexpr), 4983 && eap->cmdidx != CMD_laddexpr),
4928 (linenr_T)0, (linenr_T)0, *eap->cmdlinep) > 0 4984 (linenr_T)0, (linenr_T)0, *eap->cmdlinep) > 0)
4929 && (eap->cmdidx == CMD_cexpr 4985 {
4930 || eap->cmdidx == CMD_lexpr)) 4986 #ifdef FEAT_AUTOCMD
4931 qf_jump(qi, 0, 0, eap->forceit); /* display first error */ 4987 if (au_name != NULL)
4988 apply_autocmds(EVENT_QUICKFIXCMDPOST, au_name,
4989 curbuf->b_fname, TRUE, curbuf);
4990 #endif
4991 if (eap->cmdidx == CMD_cexpr || eap->cmdidx == CMD_lexpr)
4992 qf_jump(qi, 0, 0, eap->forceit); /* display first error */
4993 }
4932 } 4994 }
4933 else 4995 else
4934 EMSG(_("E777: String or List expected")); 4996 EMSG(_("E777: String or List expected"));
4935 free_tv(tv); 4997 free_tv(tv);
4936 } 4998 }