Karsten Hopp f760a3
To: vim-dev@vim.org
Karsten Hopp f760a3
Subject: Patch 7.2.433
Karsten Hopp f760a3
Fcc: outbox
Karsten Hopp f760a3
From: Bram Moolenaar <Bram@moolenaar.net>
Karsten Hopp f760a3
Mime-Version: 1.0
Karsten Hopp f760a3
Content-Type: text/plain; charset=UTF-8
Karsten Hopp f760a3
Content-Transfer-Encoding: 8bit
Karsten Hopp f760a3
------------
Karsten Hopp f760a3
Karsten Hopp f760a3
Patch 7.2.433
Karsten Hopp f760a3
Problem:    Can't use cscope with QuickFixCmdPre and QuickFixCmdPost.
Karsten Hopp f760a3
Solution:   Add cscope support for these autocmd events. (Bryan Venteicher)
Karsten Hopp f760a3
Files:	    runtime/doc/autocmd.txt, src/if_cscope.c
Karsten Hopp f760a3
Karsten Hopp f760a3
Karsten Hopp f760a3
*** ../vim-7.2.432/runtime/doc/autocmd.txt	2009-06-24 17:51:01.000000000 +0200
Karsten Hopp f760a3
--- runtime/doc/autocmd.txt	2010-05-14 22:48:43.000000000 +0200
Karsten Hopp f760a3
***************
Karsten Hopp f760a3
*** 678,687 ****
Karsten Hopp f760a3
  QuickFixCmdPre			Before a quickfix command is run (|:make|,
Karsten Hopp f760a3
  				|:lmake|, |:grep|, |:lgrep|, |:grepadd|,
Karsten Hopp f760a3
  				|:lgrepadd|, |:vimgrep|, |:lvimgrep|,
Karsten Hopp f760a3
! 				|:vimgrepadd|, |:lvimgrepadd|). The pattern is
Karsten Hopp f760a3
! 				matched against the command being run.  When
Karsten Hopp f760a3
! 				|:grep| is used but 'grepprg' is set to
Karsten Hopp f760a3
! 				"internal" it still matches "grep".
Karsten Hopp f760a3
  				This command cannot be used to set the
Karsten Hopp f760a3
  				'makeprg' and 'grepprg' variables.
Karsten Hopp f760a3
  				If this command causes an error, the quickfix
Karsten Hopp f760a3
--- 678,687 ----
Karsten Hopp f760a3
  QuickFixCmdPre			Before a quickfix command is run (|:make|,
Karsten Hopp f760a3
  				|:lmake|, |:grep|, |:lgrep|, |:grepadd|,
Karsten Hopp f760a3
  				|:lgrepadd|, |:vimgrep|, |:lvimgrep|,
Karsten Hopp f760a3
! 				|:vimgrepadd|, |:lvimgrepadd|, |:cscope|).
Karsten Hopp f760a3
! 				The pattern is matched against the command
Karsten Hopp f760a3
! 				being run.  When |:grep| is used but 'grepprg'
Karsten Hopp f760a3
! 				is set to "internal" it still matches "grep".
Karsten Hopp f760a3
  				This command cannot be used to set the
Karsten Hopp f760a3
  				'makeprg' and 'grepprg' variables.
Karsten Hopp f760a3
  				If this command causes an error, the quickfix
Karsten Hopp f760a3
*** ../vim-7.2.432/src/if_cscope.c	2010-02-24 14:46:58.000000000 +0100
Karsten Hopp f760a3
--- src/if_cscope.c	2010-05-14 23:10:39.000000000 +0200
Karsten Hopp f760a3
***************
Karsten Hopp f760a3
*** 1113,1118 ****
Karsten Hopp f760a3
--- 1113,1182 ----
Karsten Hopp f760a3
  #ifdef FEAT_QUICKFIX
Karsten Hopp f760a3
      char cmdletter;
Karsten Hopp f760a3
      char *qfpos;
Karsten Hopp f760a3
+ 
Karsten Hopp f760a3
+     /* get cmd letter */
Karsten Hopp f760a3
+     switch (opt[0])
Karsten Hopp f760a3
+     {
Karsten Hopp f760a3
+     case '0' :
Karsten Hopp f760a3
+ 	cmdletter = 's';
Karsten Hopp f760a3
+ 	break;
Karsten Hopp f760a3
+     case '1' :
Karsten Hopp f760a3
+ 	cmdletter = 'g';
Karsten Hopp f760a3
+ 	break;
Karsten Hopp f760a3
+     case '2' :
Karsten Hopp f760a3
+ 	cmdletter = 'd';
Karsten Hopp f760a3
+ 	break;
Karsten Hopp f760a3
+     case '3' :
Karsten Hopp f760a3
+ 	cmdletter = 'c';
Karsten Hopp f760a3
+ 	break;
Karsten Hopp f760a3
+     case '4' :
Karsten Hopp f760a3
+ 	cmdletter = 't';
Karsten Hopp f760a3
+ 	break;
Karsten Hopp f760a3
+     case '6' :
Karsten Hopp f760a3
+ 	cmdletter = 'e';
Karsten Hopp f760a3
+ 	break;
Karsten Hopp f760a3
+     case '7' :
Karsten Hopp f760a3
+ 	cmdletter = 'f';
Karsten Hopp f760a3
+ 	break;
Karsten Hopp f760a3
+     case '8' :
Karsten Hopp f760a3
+ 	cmdletter = 'i';
Karsten Hopp f760a3
+ 	break;
Karsten Hopp f760a3
+     default :
Karsten Hopp f760a3
+ 	cmdletter = opt[0];
Karsten Hopp f760a3
+     }
Karsten Hopp f760a3
+ 
Karsten Hopp f760a3
+     qfpos = (char *)vim_strchr(p_csqf, cmdletter);
Karsten Hopp f760a3
+     if (qfpos != NULL)
Karsten Hopp f760a3
+     {
Karsten Hopp f760a3
+ 	qfpos++;
Karsten Hopp f760a3
+ 	/* next symbol must be + or - */
Karsten Hopp f760a3
+ 	if (strchr(CSQF_FLAGS, *qfpos) == NULL)
Karsten Hopp f760a3
+ 	{
Karsten Hopp f760a3
+ 	    char *nf = _("E469: invalid cscopequickfix flag %c for %c");
Karsten Hopp f760a3
+ 	    char *buf = (char *)alloc((unsigned)strlen(nf));
Karsten Hopp f760a3
+ 
Karsten Hopp f760a3
+ 	    /* strlen will be enough because we use chars */
Karsten Hopp f760a3
+ 	    if (buf != NULL)
Karsten Hopp f760a3
+ 	    {
Karsten Hopp f760a3
+ 		sprintf(buf, nf, *qfpos, *(qfpos-1));
Karsten Hopp f760a3
+ 		(void)EMSG(buf);
Karsten Hopp f760a3
+ 		vim_free(buf);
Karsten Hopp f760a3
+ 	    }
Karsten Hopp f760a3
+ 	    return FALSE;
Karsten Hopp f760a3
+ 	}
Karsten Hopp f760a3
+ 
Karsten Hopp f760a3
+ # ifdef FEAT_AUTOCMD
Karsten Hopp f760a3
+ 	if (*qfpos != '0')
Karsten Hopp f760a3
+ 	{
Karsten Hopp f760a3
+ 	    apply_autocmds(EVENT_QUICKFIXCMDPRE, (char_u *)"cscope",
Karsten Hopp f760a3
+ 					       curbuf->b_fname, TRUE, curbuf);
Karsten Hopp f760a3
+ #  ifdef FEAT_EVAL
Karsten Hopp f760a3
+ 	    if (did_throw || force_abort)
Karsten Hopp f760a3
+ 		return FALSE;
Karsten Hopp f760a3
+ #  endif
Karsten Hopp f760a3
+ 	}
Karsten Hopp f760a3
+ # endif
Karsten Hopp f760a3
+     }
Karsten Hopp f760a3
  #endif
Karsten Hopp f760a3
  
Karsten Hopp f760a3
      /* create the actual command to send to cscope */
Karsten Hopp f760a3
***************
Karsten Hopp f760a3
*** 1174,1231 ****
Karsten Hopp f760a3
      }
Karsten Hopp f760a3
  
Karsten Hopp f760a3
  #ifdef FEAT_QUICKFIX
Karsten Hopp f760a3
-     /* get cmd letter */
Karsten Hopp f760a3
-     switch (opt[0])
Karsten Hopp f760a3
-     {
Karsten Hopp f760a3
-     case '0' :
Karsten Hopp f760a3
- 	cmdletter = 's';
Karsten Hopp f760a3
- 	break;
Karsten Hopp f760a3
-     case '1' :
Karsten Hopp f760a3
- 	cmdletter = 'g';
Karsten Hopp f760a3
- 	break;
Karsten Hopp f760a3
-     case '2' :
Karsten Hopp f760a3
- 	cmdletter = 'd';
Karsten Hopp f760a3
- 	break;
Karsten Hopp f760a3
-     case '3' :
Karsten Hopp f760a3
- 	cmdletter = 'c';
Karsten Hopp f760a3
- 	break;
Karsten Hopp f760a3
-     case '4' :
Karsten Hopp f760a3
- 	cmdletter = 't';
Karsten Hopp f760a3
- 	break;
Karsten Hopp f760a3
-     case '6' :
Karsten Hopp f760a3
- 	cmdletter = 'e';
Karsten Hopp f760a3
- 	break;
Karsten Hopp f760a3
-     case '7' :
Karsten Hopp f760a3
- 	cmdletter = 'f';
Karsten Hopp f760a3
- 	break;
Karsten Hopp f760a3
-     case '8' :
Karsten Hopp f760a3
- 	cmdletter = 'i';
Karsten Hopp f760a3
- 	break;
Karsten Hopp f760a3
-     default :
Karsten Hopp f760a3
- 	cmdletter = opt[0];
Karsten Hopp f760a3
-     }
Karsten Hopp f760a3
- 
Karsten Hopp f760a3
-     qfpos = (char *)vim_strchr(p_csqf, cmdletter);
Karsten Hopp f760a3
-     if (qfpos != NULL)
Karsten Hopp f760a3
-     {
Karsten Hopp f760a3
- 	qfpos++;
Karsten Hopp f760a3
- 	/* next symbol must be + or - */
Karsten Hopp f760a3
- 	if (strchr(CSQF_FLAGS, *qfpos) == NULL)
Karsten Hopp f760a3
- 	{
Karsten Hopp f760a3
- 	    char *nf = _("E469: invalid cscopequickfix flag %c for %c");
Karsten Hopp f760a3
- 	    char *buf = (char *)alloc((unsigned)strlen(nf));
Karsten Hopp f760a3
- 
Karsten Hopp f760a3
- 	    /* strlen will be enough because we use chars */
Karsten Hopp f760a3
- 	    if (buf != NULL)
Karsten Hopp f760a3
- 	    {
Karsten Hopp f760a3
- 		sprintf(buf, nf, *qfpos, *(qfpos-1));
Karsten Hopp f760a3
- 		(void)EMSG(buf);
Karsten Hopp f760a3
- 		vim_free(buf);
Karsten Hopp f760a3
- 	    }
Karsten Hopp f760a3
- 	    vim_free(nummatches);
Karsten Hopp f760a3
- 	    return FALSE;
Karsten Hopp f760a3
- 	}
Karsten Hopp f760a3
-     }
Karsten Hopp f760a3
      if (qfpos != NULL && *qfpos != '0' && totmatches > 0)
Karsten Hopp f760a3
      {
Karsten Hopp f760a3
  	/* fill error list */
Karsten Hopp f760a3
--- 1238,1243 ----
Karsten Hopp f760a3
***************
Karsten Hopp f760a3
*** 1258,1263 ****
Karsten Hopp f760a3
--- 1270,1280 ----
Karsten Hopp f760a3
  		    postponed_split = 0;
Karsten Hopp f760a3
  		}
Karsten Hopp f760a3
  # endif
Karsten Hopp f760a3
+ 
Karsten Hopp f760a3
+ # ifdef FEAT_AUTOCMD
Karsten Hopp f760a3
+ 		apply_autocmds(EVENT_QUICKFIXCMDPOST, (char_u *)"cscope",
Karsten Hopp f760a3
+ 					       curbuf->b_fname, TRUE, curbuf);
Karsten Hopp f760a3
+ # endif
Karsten Hopp f760a3
  		if (use_ll)
Karsten Hopp f760a3
  		    /*
Karsten Hopp f760a3
  		     * In the location list window, use the displayed location
Karsten Hopp f760a3
*** ../vim-7.2.432/src/version.c	2010-05-14 22:24:31.000000000 +0200
Karsten Hopp f760a3
--- src/version.c	2010-05-14 23:13:27.000000000 +0200
Karsten Hopp f760a3
***************
Karsten Hopp f760a3
*** 683,684 ****
Karsten Hopp f760a3
--- 683,686 ----
Karsten Hopp f760a3
  {   /* Add new patch number below this line */
Karsten Hopp f760a3
+ /**/
Karsten Hopp f760a3
+     433,
Karsten Hopp f760a3
  /**/
Karsten Hopp f760a3
Karsten Hopp f760a3
-- 
Karsten Hopp f760a3
The 50-50-90 rule: Anytime you have a 50-50 chance of getting
Karsten Hopp f760a3
something right, there's a 90% probability you'll get it wrong.
Karsten Hopp f760a3
Karsten Hopp f760a3
 /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
Karsten Hopp f760a3
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
Karsten Hopp f760a3
\\\        download, build and distribute -- http://www.A-A-P.org        ///
Karsten Hopp f760a3
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///