components/vim/vim72-patches/7.2.021
changeset 198 172fc01ce997
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/components/vim/vim72-patches/7.2.021	Thu Apr 07 16:25:07 2011 -0700
@@ -0,0 +1,147 @@
+To: [email protected]
+Subject: Patch 7.2.021
+Fcc: outbox
+From: Bram Moolenaar <[email protected]>
+Mime-Version: 1.0
+Content-Type: text/plain; charset=ISO-8859-1
+Content-Transfer-Encoding: 8bit
+------------
+
+Patch 7.2.021
+Problem:    When executing autocommands getting the full file name may be
+	    slow. (David Kotchan)
+Solution:   Postpone calling FullName_save() until autocmd_fname is used.
+Files:	    src/ex_docmd.c, src/fileio.c, src/globals.h
+
+
+*** ../vim-7.2.020/src/ex_docmd.c	Thu Sep 18 12:43:21 2008
+--- src/ex_docmd.c	Mon Sep 15 20:04:53 2008
+***************
+*** 9542,9547 ****
+--- 9569,9583 ----
+  #ifdef FEAT_AUTOCMD
+  	case SPEC_AFILE:	/* file name for autocommand */
+  		result = autocmd_fname;
++ 		if (result != NULL && !autocmd_fname_full)
++ 		{
++ 		    /* Still need to turn the fname into a full path.  It is
++ 		     * postponed to avoid a delay when <afile> is not used. */
++ 		    autocmd_fname_full = TRUE;
++ 		    result = FullName_save(autocmd_fname, FALSE);
++ 		    vim_free(autocmd_fname);
++ 		    autocmd_fname = result;
++ 		}
+  		if (result == NULL)
+  		{
+  		    *errormsg = (char_u *)_("E495: no autocommand file name to substitute for \"<afile>\"");
+*** ../vim-7.2.020/src/fileio.c	Wed Aug  6 18:43:07 2008
+--- src/fileio.c	Tue Sep 16 21:24:26 2008
+***************
+*** 8523,8528 ****
+--- 8523,8529 ----
+      char_u	*save_sourcing_name;
+      linenr_T	save_sourcing_lnum;
+      char_u	*save_autocmd_fname;
++     int		save_autocmd_fname_full;
+      int		save_autocmd_bufnr;
+      char_u	*save_autocmd_match;
+      int		save_autocmd_busy;
+***************
+*** 8601,8606 ****
+--- 8602,8608 ----
+       * Save the autocmd_* variables and info about the current buffer.
+       */
+      save_autocmd_fname = autocmd_fname;
++     save_autocmd_fname_full = autocmd_fname_full;
+      save_autocmd_bufnr = autocmd_bufnr;
+      save_autocmd_match = autocmd_match;
+      save_autocmd_busy = autocmd_busy;
+***************
+*** 8618,8631 ****
+  	if (fname != NULL && *fname != NUL)
+  	    autocmd_fname = fname;
+  	else if (buf != NULL)
+! 	    autocmd_fname = buf->b_fname;
+  	else
+  	    autocmd_fname = NULL;
+      }
+      else
+  	autocmd_fname = fname_io;
+      if (autocmd_fname != NULL)
+! 	autocmd_fname = FullName_save(autocmd_fname, FALSE);
+  
+      /*
+       * Set the buffer number to be used for <abuf>.
+--- 8620,8634 ----
+  	if (fname != NULL && *fname != NUL)
+  	    autocmd_fname = fname;
+  	else if (buf != NULL)
+! 	    autocmd_fname = buf->b_ffname;
+  	else
+  	    autocmd_fname = NULL;
+      }
+      else
+  	autocmd_fname = fname_io;
+      if (autocmd_fname != NULL)
+! 	autocmd_fname = vim_strsave(autocmd_fname);
+!     autocmd_fname_full = FALSE; /* call FullName_save() later */
+  
+      /*
+       * Set the buffer number to be used for <abuf>.
+***************
+*** 8810,8815 ****
+--- 8813,8819 ----
+      sourcing_lnum = save_sourcing_lnum;
+      vim_free(autocmd_fname);
+      autocmd_fname = save_autocmd_fname;
++     autocmd_fname_full = save_autocmd_fname_full;
+      autocmd_bufnr = save_autocmd_bufnr;
+      autocmd_match = save_autocmd_match;
+  #ifdef FEAT_EVAL
+***************
+*** 8918,8924 ****
+      {
+  	apc->curpat = NULL;
+  
+! 	/* only use a pattern when it has not been removed, has commands and
+  	 * the group matches. For buffer-local autocommands only check the
+  	 * buffer number. */
+  	if (ap->pat != NULL && ap->cmds != NULL
+--- 8922,8928 ----
+      {
+  	apc->curpat = NULL;
+  
+! 	/* Only use a pattern when it has not been removed, has commands and
+  	 * the group matches. For buffer-local autocommands only check the
+  	 * buffer number. */
+  	if (ap->pat != NULL && ap->cmds != NULL
+*** ../vim-7.2.020/src/globals.h	Sat Jul 26 16:04:49 2008
+--- src/globals.h	Mon Sep 15 19:59:28 2008
+***************
+*** 1022,1027 ****
+--- 1022,1028 ----
+  #endif
+  #ifdef FEAT_AUTOCMD
+  EXTERN char_u	*autocmd_fname INIT(= NULL); /* fname for <afile> on cmdline */
++ EXTERN int	autocmd_fname_full;	     /* autocmd_fname is full path */
+  EXTERN int	autocmd_bufnr INIT(= 0);     /* fnum for <abuf> on cmdline */
+  EXTERN char_u	*autocmd_match INIT(= NULL); /* name for <amatch> on cmdline */
+  EXTERN int	did_cursorhold INIT(= FALSE); /* set when CursorHold t'gerd */
+*** ../vim-7.2.020/src/version.c	Thu Sep 18 20:55:19 2008
+--- src/version.c	Thu Sep 18 21:24:30 2008
+***************
+*** 678,679 ****
+--- 678,681 ----
+  {   /* Add new patch number below this line */
++ /**/
++     21,
+  /**/
+
+-- 
+From "know your smileys":
+ :----}  You lie like Pinocchio
+
+ /// Bram Moolenaar -- [email protected] -- 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    ///