To: vim-dev@vim.org
Subject: Patch 6.0.113
Fcc: outbox
From: Bram Moolenaar <Bram@moolenaar.net>
MIME-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: 8bit
------------

Patch 6.0.113
Problem:    ":edit ~/fname" doesn't work if $HOME includes a space.  Also,
	    expanding wildcards with the shell may fail. (John Daniel)
Solution:   Escape spaces with a backslash when needed.
Files:	    src/ex_docmd.c, src/misc1.c, src/proto/misc1.pro, src/os_unix.c


*** ../vim60.112/src/ex_docmd.c	Sat Dec 15 21:56:10 2001
--- src/ex_docmd.c	Mon Dec 31 17:28:09 2001
***************
*** 3297,3303 ****
  		    if (vim_strchr(eap->arg, '$') != NULL
  			    || vim_strchr(eap->arg, '~') != NULL)
  		    {
! 			expand_env(eap->arg, NameBuff, MAXPATHL);
  			has_wildcards = mch_has_wildcard(NameBuff);
  			p = NameBuff;
  		    }
--- 3297,3303 ----
  		    if (vim_strchr(eap->arg, '$') != NULL
  			    || vim_strchr(eap->arg, '~') != NULL)
  		    {
! 			expand_env_esc(eap->arg, NameBuff, MAXPATHL, TRUE);
  			has_wildcards = mch_has_wildcard(NameBuff);
  			p = NameBuff;
  		    }
*** ../vim60.112/src/misc1.c	Tue Nov  6 19:43:29 2001
--- src/misc1.c	Mon Dec 31 17:46:07 2001
***************
*** 2834,2839 ****
--- 2834,2849 ----
      char_u	*dst;		/* where to put the result */
      int		dstlen;		/* maximum length of the result */
  {
+     expand_env_esc(src, dst, dstlen, FALSE);
+ }
+ 
+     void
+ expand_env_esc(src, dst, dstlen, esc)
+     char_u	*src;		/* input string e.g. "$HOME/vim.hlp" */
+     char_u	*dst;		/* where to put the result */
+     int		dstlen;		/* maximum length of the result */
+     int		esc;		/* escape spaces in expanded variables */
+ {
      char_u	*tail;
      int		c;
      char_u	*var;
***************
*** 2999,3004 ****
--- 3009,3029 ----
  		var = NULL;
  		tail = (char_u *)"";	/* for gcc */
  #endif /* UNIX || VMS */
+ 	    }
+ 
+ 	    /* If "var" contains white space, escape it with a backslash.
+ 	     * Required for ":e ~/tt" $HOME includes a space. */
+ 	    if (esc && var != NULL && vim_strpbrk(var, (char_u *)" \t") != NULL)
+ 	    {
+ 		char_u	*p = vim_strsave_escaped(var, (char_u *)" \t");
+ 
+ 		if (p != NULL)
+ 		{
+ 		    if (mustfree)
+ 			vim_free(var);
+ 		    var = p;
+ 		    mustfree = TRUE;
+ 		}
  	    }
  
  	    if (var != NULL && *var != NUL
*** ../vim60.112/src/proto/misc1.pro	Tue Sep 25 21:49:20 2001
--- src/proto/misc1.pro	Mon Dec 31 17:26:25 2001
***************
*** 46,51 ****
--- 46,52 ----
  void vim_beep __ARGS((void));
  void init_homedir __ARGS((void));
  void expand_env __ARGS((char_u *src, char_u *dst, int dstlen));
+ void expand_env_esc __ARGS((char_u *src, char_u *dst, int dstlen, int esc));
  char_u *vim_getenv __ARGS((char_u *name, int *mustfree));
  char_u *expand_env_save __ARGS((char_u *src));
  void vim_setenv __ARGS((char_u *name, char_u *val));
*** ../vim60.112/src/os_unix.c	Wed Oct 31 14:21:02 2001
--- src/os_unix.c	Mon Dec 31 17:41:29 2001
***************
*** 4277,4289 ****
      if (shell_style != STYLE_BT)
  	for (i = 0; i < num_pat; ++i)
  	{
! #ifdef USE_SYSTEM
! 	    STRCAT(command, " \"");	/* need extra quotes because we */
! 	    STRCAT(command, pat[i]);	/*	 start the shell twice */
! 	    STRCAT(command, "\"");
! #else
! 	    STRCAT(command, " ");
! 	    STRCAT(command, pat[i]);
  #endif
  	}
      if (flags & EW_SILENT)
--- 4277,4299 ----
      if (shell_style != STYLE_BT)
  	for (i = 0; i < num_pat; ++i)
  	{
! 	    /* When using system() always add extra quotes, because the shell
! 	     * is started twice.  Otherwise it's only needed when the pattern
! 	     * includes spaces or single quotes. */
! #ifndef USE_SYSTEM
! 	    if (vim_strpbrk(pat[i], " '") != NULL)
! #endif
! 	    {
! 		STRCAT(command, " \"");
! 		STRCAT(command, pat[i]);
! 		STRCAT(command, "\"");
! 	    }
! #ifndef USE_SYSTEM
! 	    else
! 	    {
! 		STRCAT(command, " ");
! 		STRCAT(command, pat[i]);
! 	    }
  #endif
  	}
      if (flags & EW_SILENT)
*** ../vim60.112/src/version.c	Mon Dec 31 16:49:06 2001
--- src/version.c	Mon Dec 31 17:43:12 2001
***************
*** 608,609 ****
--- 608,611 ----
  {   /* Add new patch number below this line */
+ /**/
+     113,
  /**/

-- 
Microsoft: "Windows NT 4.0 now has the same user-interface as Windows 95"
    Windows 95: "Press CTRL-ALT-DEL to reboot"
Windows NT 4.0: "Press CTRL-ALT-DEL to login"

 ///  Bram Moolenaar -- Bram@moolenaar.net -- http://www.moolenaar.net  \\\
(((   Creator of Vim -- http://vim.sf.net -- ftp://ftp.vim.org/pub/vim   )))
 \\\  Help me helping AIDS orphans in Uganda - http://iccf-holland.org  ///