Mercurial > vim
changeset 2151:ae22c450546c v7.2.433
updated for version 7.2.433
Problem: Can't use cscope with QuickFixCmdPre and QuickFixCmdPost.
Solution: Add cscope support for these autocmd events. (Bryan Venteicher)
author | Bram Moolenaar <bram@zimbu.org> |
---|---|
date | Fri, 14 May 2010 23:14:42 +0200 |
parents | 4269a0673478 |
children | b9e314fe473f |
files | runtime/doc/autocmd.txt src/if_cscope.c src/version.c |
diffstat | 3 files changed, 75 insertions(+), 56 deletions(-) [+] |
line wrap: on
line diff
--- a/runtime/doc/autocmd.txt +++ b/runtime/doc/autocmd.txt @@ -678,10 +678,10 @@ MenuPopup Just before showing the popu QuickFixCmdPre Before a quickfix command is run (|:make|, |:lmake|, |:grep|, |:lgrep|, |:grepadd|, |:lgrepadd|, |:vimgrep|, |:lvimgrep|, - |:vimgrepadd|, |:lvimgrepadd|). The pattern is - matched against the command being run. When - |:grep| is used but 'grepprg' is set to - "internal" it still matches "grep". + |:vimgrepadd|, |:lvimgrepadd|, |:cscope|). + The pattern is matched against the command + being run. When |:grep| is used but 'grepprg' + is set to "internal" it still matches "grep". This command cannot be used to set the 'makeprg' and 'grepprg' variables. If this command causes an error, the quickfix
--- a/src/if_cscope.c +++ b/src/if_cscope.c @@ -1113,6 +1113,70 @@ cs_find_common(opt, pat, forceit, verbos #ifdef FEAT_QUICKFIX char cmdletter; char *qfpos; + + /* get cmd letter */ + switch (opt[0]) + { + case '0' : + cmdletter = 's'; + break; + case '1' : + cmdletter = 'g'; + break; + case '2' : + cmdletter = 'd'; + break; + case '3' : + cmdletter = 'c'; + break; + case '4' : + cmdletter = 't'; + break; + case '6' : + cmdletter = 'e'; + break; + case '7' : + cmdletter = 'f'; + break; + case '8' : + cmdletter = 'i'; + break; + default : + cmdletter = opt[0]; + } + + qfpos = (char *)vim_strchr(p_csqf, cmdletter); + if (qfpos != NULL) + { + qfpos++; + /* next symbol must be + or - */ + if (strchr(CSQF_FLAGS, *qfpos) == NULL) + { + char *nf = _("E469: invalid cscopequickfix flag %c for %c"); + char *buf = (char *)alloc((unsigned)strlen(nf)); + + /* strlen will be enough because we use chars */ + if (buf != NULL) + { + sprintf(buf, nf, *qfpos, *(qfpos-1)); + (void)EMSG(buf); + vim_free(buf); + } + return FALSE; + } + +# ifdef FEAT_AUTOCMD + if (*qfpos != '0') + { + apply_autocmds(EVENT_QUICKFIXCMDPRE, (char_u *)"cscope", + curbuf->b_fname, TRUE, curbuf); +# ifdef FEAT_EVAL + if (did_throw || force_abort) + return FALSE; +# endif + } +# endif + } #endif /* create the actual command to send to cscope */ @@ -1174,58 +1238,6 @@ cs_find_common(opt, pat, forceit, verbos } #ifdef FEAT_QUICKFIX - /* get cmd letter */ - switch (opt[0]) - { - case '0' : - cmdletter = 's'; - break; - case '1' : - cmdletter = 'g'; - break; - case '2' : - cmdletter = 'd'; - break; - case '3' : - cmdletter = 'c'; - break; - case '4' : - cmdletter = 't'; - break; - case '6' : - cmdletter = 'e'; - break; - case '7' : - cmdletter = 'f'; - break; - case '8' : - cmdletter = 'i'; - break; - default : - cmdletter = opt[0]; - } - - qfpos = (char *)vim_strchr(p_csqf, cmdletter); - if (qfpos != NULL) - { - qfpos++; - /* next symbol must be + or - */ - if (strchr(CSQF_FLAGS, *qfpos) == NULL) - { - char *nf = _("E469: invalid cscopequickfix flag %c for %c"); - char *buf = (char *)alloc((unsigned)strlen(nf)); - - /* strlen will be enough because we use chars */ - if (buf != NULL) - { - sprintf(buf, nf, *qfpos, *(qfpos-1)); - (void)EMSG(buf); - vim_free(buf); - } - vim_free(nummatches); - return FALSE; - } - } if (qfpos != NULL && *qfpos != '0' && totmatches > 0) { /* fill error list */ @@ -1258,6 +1270,11 @@ cs_find_common(opt, pat, forceit, verbos postponed_split = 0; } # endif + +# ifdef FEAT_AUTOCMD + apply_autocmds(EVENT_QUICKFIXCMDPOST, (char_u *)"cscope", + curbuf->b_fname, TRUE, curbuf); +# endif if (use_ll) /* * In the location list window, use the displayed location