mirror of
https://github.com/vim/vim.git
synced 2025-09-23 03:43:49 -04:00
updated for version 7.3.203
Problem: MS-Windows: Can't run an external command without a console window. Solution: Support ":!start /b cmd". (Xaizek)
This commit is contained in:
@@ -313,7 +313,36 @@ A. When using :! to run an external command, you can run it with "start": >
|
||||
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.
|
||||
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!
|
||||
|
@@ -3401,6 +3401,7 @@ mch_call_shell(
|
||||
{
|
||||
STARTUPINFO si;
|
||||
PROCESS_INFORMATION pi;
|
||||
DWORD flags = CREATE_NEW_CONSOLE;
|
||||
|
||||
si.cb = sizeof(si);
|
||||
si.lpReserved = NULL;
|
||||
@@ -3418,6 +3419,22 @@ mch_call_shell(
|
||||
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,7 +3462,7 @@ mch_call_shell(
|
||||
NULL, // Process security attributes
|
||||
NULL, // Thread security attributes
|
||||
FALSE, // Inherit handles
|
||||
CREATE_NEW_CONSOLE, // Creation flags
|
||||
flags, // Creation flags
|
||||
NULL, // Environment
|
||||
NULL, // Current directory
|
||||
&si, // Startup information
|
||||
@@ -3458,6 +3475,11 @@ mch_call_shell(
|
||||
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);
|
||||
|
@@ -709,6 +709,8 @@ static char *(features[]) =
|
||||
|
||||
static int included_patches[] =
|
||||
{ /* Add new patch number below this line */
|
||||
/**/
|
||||
203,
|
||||
/**/
|
||||
202,
|
||||
/**/
|
||||
|
Reference in New Issue
Block a user