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
--- a/src/version.c
+++ b/src/version.c
@@ -682,6 +682,8 @@ static char *(features[]) =
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    433,
+/**/
     432,
 /**/
     431,