Mercurial > vim
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 } |