To: vim-dev@vim.org Subject: Patch 7.2.433 Fcc: outbox From: Bram Moolenaar Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ------------ Patch 7.2.433 Problem: Can't use cscope with QuickFixCmdPre and QuickFixCmdPost. Solution: Add cscope support for these autocmd events. (Bryan Venteicher) Files: runtime/doc/autocmd.txt, src/if_cscope.c *** ../vim-7.2.432/runtime/doc/autocmd.txt 2009-06-24 17:51:01.000000000 +0200 --- runtime/doc/autocmd.txt 2010-05-14 22:48:43.000000000 +0200 *************** *** 678,687 **** 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". This command cannot be used to set the 'makeprg' and 'grepprg' variables. If this command causes an error, the quickfix --- 678,687 ---- QuickFixCmdPre Before a quickfix command is run (|:make|, |:lmake|, |:grep|, |:lgrep|, |:grepadd|, |:lgrepadd|, |:vimgrep|, |:lvimgrep|, ! |: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 *** ../vim-7.2.432/src/if_cscope.c 2010-02-24 14:46:58.000000000 +0100 --- src/if_cscope.c 2010-05-14 23:10:39.000000000 +0200 *************** *** 1113,1118 **** --- 1113,1182 ---- #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,1231 **** } #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 */ --- 1238,1243 ---- *************** *** 1258,1263 **** --- 1270,1280 ---- 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 *** ../vim-7.2.432/src/version.c 2010-05-14 22:24:31.000000000 +0200 --- src/version.c 2010-05-14 23:13:27.000000000 +0200 *************** *** 683,684 **** --- 683,686 ---- { /* Add new patch number below this line */ + /**/ + 433, /**/ -- The 50-50-90 rule: Anytime you have a 50-50 chance of getting something right, there's a 90% probability you'll get it wrong. /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net \\\ /// sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\ \\\ download, build and distribute -- http://www.A-A-P.org /// \\\ help me help AIDS victims -- http://ICCF-Holland.org ///