Blob Blame History Raw
To: vim_dev@googlegroups.com
Subject: Patch 7.3.203
Fcc: outbox
From: Bram Moolenaar <Bram@moolenaar.net>
Mime-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
------------

Patch 7.3.203
Problem:    MS-Windows: Can't run an external command without a console window.
Solution:   Support ":!start /b cmd". (Xaizek)
Files:	    src/os_win32.c


*** ../mercurial/vim73/src/os_win32.c	2011-05-05 18:31:54.000000000 +0200
--- src/os_win32.c	2011-05-25 16:45:31.000000000 +0200
***************
*** 3401,3406 ****
--- 3401,3407 ----
  	    {
  		STARTUPINFO		si;
  		PROCESS_INFORMATION	pi;
+ 		DWORD			flags = CREATE_NEW_CONSOLE;
  
  		si.cb = sizeof(si);
  		si.lpReserved = NULL;
***************
*** 3418,3423 ****
--- 3419,3440 ----
  		    si.dwFlags = STARTF_USESHOWWINDOW;
  		    si.wShowWindow = SW_SHOWMINNOACTIVE;
  		}
+ 		else if ((STRNICMP(cmdbase, "/b", 2) == 0)
+ 			&& vim_iswhite(cmdbase[2]))
+ 		{
+ 		    cmdbase = skipwhite(cmdbase + 2);
+ 		    flags = CREATE_NO_WINDOW;
+ 		    si.dwFlags = STARTF_USESTDHANDLES;
+ 		    si.hStdInput = CreateFile("\\\\.\\NUL",	// File name
+ 			GENERIC_READ,				// Access flags
+ 			0,					// Share flags
+ 			NULL,					// Security att.
+ 			OPEN_EXISTING,				// Open flags
+ 			FILE_ATTRIBUTE_NORMAL,			// File att.
+ 			NULL);					// Temp file
+ 		    si.hStdOutput = si.hStdInput;
+ 		    si.hStdError = si.hStdInput;
+ 		}
  
  		/* When the command is in double quotes, but 'shellxquote' is
  		 * empty, keep the double quotes around the command.
***************
*** 3445,3451 ****
  			NULL,			// Process security attributes
  			NULL,			// Thread security attributes
  			FALSE,			// Inherit handles
! 			CREATE_NEW_CONSOLE,	// Creation flags
  			NULL,			// Environment
  			NULL,			// Current directory
  			&si,			// Startup information
--- 3462,3468 ----
  			NULL,			// Process security attributes
  			NULL,			// Thread security attributes
  			FALSE,			// Inherit handles
! 			flags,			// Creation flags
  			NULL,			// Environment
  			NULL,			// Current directory
  			&si,			// Startup information
***************
*** 3458,3463 ****
--- 3475,3485 ----
  		    EMSG(_("E371: Command not found"));
  #endif
  		}
+ 		if (si.hStdInput != NULL)
+ 		{
+ 		    /* Close the handle to \\.\NUL */
+ 		    CloseHandle(si.hStdInput);
+ 		}
  		/* Close the handles to the subprocess, so that it goes away */
  		CloseHandle(pi.hThread);
  		CloseHandle(pi.hProcess);
*** ../vim-7.3.202/src/version.c	2011-05-25 15:16:06.000000000 +0200
--- src/version.c	2011-05-25 17:05:59.000000000 +0200
***************
*** 711,712 ****
--- 711,714 ----
  {   /* Add new patch number below this line */
+ /**/
+     203,
  /**/

-- 
hundred-and-one symptoms of being an internet addict:
108. While reading a magazine, you look for the Zoom icon for a better
     look at a photograph.

 /// Bram Moolenaar -- Bram@Moolenaar.net -- http://www.Moolenaar.net   \\\
///        sponsor Vim, vote for features -- http://www.Vim.org/sponsor/ \\\
\\\  an exciting new programming language -- http://www.Zimbu.org        ///
 \\\            help me help AIDS victims -- http://ICCF-Holland.org    ///