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


*** ../mercurial/vim73/runtime/doc/os_win32.txt 2011-01-08 16:05:50.000000000 
+0100
--- runtime/doc/os_win32.txt    2011-05-25 17:04:58.000000000 +0200
***************
*** 313,319 ****
     with :!start do not get passed Vim's open file handles, which means they do
     not have to be closed before Vim.
     To avoid this special treatment, use ":! start".
!    The optional "/min" argument causes the window to be minimized.
  
  Q. I'm using Win32s, and when I try to run an external command like "make",
     Vim doesn't wait for it to finish!  Help!
--- 313,348 ----
     with :!start do not get passed Vim's open file handles, which means they do
     not have to be closed before Vim.
     To avoid this special treatment, use ":! start".
!    There are two optional arguments (see the next Q):
!        /min  the window will be minimized.
!        /b"   no console window will be opened
!    You can only one of these flags at a time.  A second second one will be
!    treated as the start of the command.
! 
! Q. How do I avoid getting a window for programs that I run asynchronously?
! A. You have two possible solutions depending on what exactly do you want:
!    1) You may use the /min flag that would run program in minimized state with
!       no other changes. It will work equally for console and GUI applications.
!    2) You can use /b flag to run console applications without creating a
!       console window for them (GUI applications are not affected). But you
!       should use this flag only if application you run doesn't require any
!       input.  Otherwise it will get an EOF error because it's input stream
!       (stdin) would be redirected to \\.\NUL (stdour and stderr too).
! 
!    Example for a console application, run Exuberant ctags: >
!         :!start /min ctags -R .
! <  When it has finished you should see file named "tags" in your current
!    directory.  You should notice the window title blinking on your taskbar.
!    This is more noticable for commands that take longer.
!    Now delete the "tags" file and run this command: >
!         :!start /b ctags -R .
! <  You should have the same "tags" file, but this time there will be no
!    blinking on the taskbar.
!    Example for a GUI application: >
!         :!start /min notepad
!         :!start /b notepad
! <  The first command runs notepad minimized and the second one runs it
!    normally.
  
  Q. I'm using Win32s, and when I try to run an external command like "make",
     Vim doesn't wait for it to finish!  Help!
*** ../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 -- [email protected] -- 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    ///

-- 
You received this message from the "vim_dev" maillist.
Do not top-post! Type your reply below the text you are replying to.
For more information, visit http://www.vim.org/maillist.php

Raspunde prin e-mail lui