mirror of
https://github.com/vim/vim.git
synced 2025-09-25 03:54:15 -04:00
patch 8.0.0501: on MS-Windows ":!start" does not work as expected
Problem: On MS-Windows ":!start" does not work as expected. Solution: When creating a process fails try passing the argument to ShellExecute(). (Katsuya Hino, closes #1570)
This commit is contained in:
@@ -212,10 +212,19 @@ A. You can't! This is a limitation of the NT console. NT 5.0 is reported to
|
|||||||
be able to set the blink rate for all console windows at the same time.
|
be able to set the blink rate for all console windows at the same time.
|
||||||
|
|
||||||
*:!start*
|
*:!start*
|
||||||
Q. How can I run an external command or program asynchronously?
|
Q. How can I asynchronously run an external command or program, or open a
|
||||||
A. When using :! to run an external command, you can run it with "start": >
|
document or URL with its default program?
|
||||||
:!start winfile.exe<CR>
|
A. When using :! to run an external command, you can run it with "start". For
|
||||||
< Using "start" stops Vim switching to another screen, opening a new console,
|
example, to run notepad: >
|
||||||
|
:!start notepad
|
||||||
|
< To open "image.jpg" with the default image viewer: >
|
||||||
|
:!start image.jpg
|
||||||
|
< To open the folder of the current file in Windows Explorer: >
|
||||||
|
:!start %:h
|
||||||
|
< To open the Vim home page with the default browser: >
|
||||||
|
:!start http://www.vim.org/
|
||||||
|
<
|
||||||
|
Using "start" stops Vim switching to another screen, opening a new console,
|
||||||
or waiting for the program to complete; it indicates that you are running a
|
or waiting for the program to complete; it indicates that you are running a
|
||||||
program that does not affect the files you are editing. Programs begun
|
program that does not affect the files you are editing. Programs begun
|
||||||
with :!start do not get passed Vim's open file handles, which means they do
|
with :!start do not get passed Vim's open file handles, which means they do
|
||||||
|
@@ -4008,6 +4008,28 @@ vim_create_process(
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static HINSTANCE
|
||||||
|
vim_shell_execute(
|
||||||
|
char *cmd,
|
||||||
|
INT n_show_cmd)
|
||||||
|
{
|
||||||
|
#ifdef FEAT_MBYTE
|
||||||
|
if (enc_codepage >= 0 && (int)GetACP() != enc_codepage)
|
||||||
|
{
|
||||||
|
WCHAR *wcmd = enc_to_utf16((char_u *)cmd, NULL);
|
||||||
|
if (wcmd != NULL)
|
||||||
|
{
|
||||||
|
HINSTANCE ret;
|
||||||
|
ret = ShellExecuteW(NULL, NULL, wcmd, NULL, NULL, n_show_cmd);
|
||||||
|
vim_free(wcmd);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
return ShellExecute(NULL, NULL, cmd, NULL, NULL, n_show_cmd);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
#if defined(FEAT_GUI_W32) || defined(PROTO)
|
#if defined(FEAT_GUI_W32) || defined(PROTO)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -4711,6 +4733,7 @@ mch_call_shell(
|
|||||||
STARTUPINFO si;
|
STARTUPINFO si;
|
||||||
PROCESS_INFORMATION pi;
|
PROCESS_INFORMATION pi;
|
||||||
DWORD flags = CREATE_NEW_CONSOLE;
|
DWORD flags = CREATE_NEW_CONSOLE;
|
||||||
|
INT n_show_cmd = SW_SHOWNORMAL;
|
||||||
char_u *p;
|
char_u *p;
|
||||||
|
|
||||||
ZeroMemory(&si, sizeof(si));
|
ZeroMemory(&si, sizeof(si));
|
||||||
@@ -4729,6 +4752,7 @@ mch_call_shell(
|
|||||||
cmdbase = skipwhite(cmdbase + 4);
|
cmdbase = skipwhite(cmdbase + 4);
|
||||||
si.dwFlags = STARTF_USESHOWWINDOW;
|
si.dwFlags = STARTF_USESHOWWINDOW;
|
||||||
si.wShowWindow = SW_SHOWMINNOACTIVE;
|
si.wShowWindow = SW_SHOWMINNOACTIVE;
|
||||||
|
n_show_cmd = SW_SHOWMINNOACTIVE;
|
||||||
}
|
}
|
||||||
else if ((STRNICMP(cmdbase, "/b", 2) == 0)
|
else if ((STRNICMP(cmdbase, "/b", 2) == 0)
|
||||||
&& VIM_ISWHITE(cmdbase[2]))
|
&& VIM_ISWHITE(cmdbase[2]))
|
||||||
@@ -4800,6 +4824,9 @@ mch_call_shell(
|
|||||||
*/
|
*/
|
||||||
if (vim_create_process((char *)newcmd, FALSE, flags, &si, &pi))
|
if (vim_create_process((char *)newcmd, FALSE, flags, &si, &pi))
|
||||||
x = 0;
|
x = 0;
|
||||||
|
else if (vim_shell_execute((char *)newcmd, n_show_cmd)
|
||||||
|
> (HINSTANCE)32)
|
||||||
|
x = 0;
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
x = -1;
|
x = -1;
|
||||||
|
@@ -764,6 +764,8 @@ static char *(features[]) =
|
|||||||
|
|
||||||
static int included_patches[] =
|
static int included_patches[] =
|
||||||
{ /* Add new patch number below this line */
|
{ /* Add new patch number below this line */
|
||||||
|
/**/
|
||||||
|
501,
|
||||||
/**/
|
/**/
|
||||||
500,
|
500,
|
||||||
/**/
|
/**/
|
||||||
|
Reference in New Issue
Block a user