mirror of
https://github.com/vim/vim.git
synced 2025-07-26 11:04:33 -04:00
patch 7.4.2195
Problem: MS-Windows: The vimrun program does not support Unicode. Solution: Use GetCommandLineW(). Cleanup old #ifdefs. (Ken Takata)
This commit is contained in:
parent
446a973ce3
commit
bcc1dcc981
@ -763,6 +763,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 */
|
||||||
|
/**/
|
||||||
|
2195,
|
||||||
/**/
|
/**/
|
||||||
2194,
|
2194,
|
||||||
/**/
|
/**/
|
||||||
|
59
src/vimrun.c
59
src/vimrun.c
@ -17,89 +17,66 @@
|
|||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#ifndef __CYGWIN__
|
|
||||||
#include <conio.h>
|
#include <conio.h>
|
||||||
|
#ifndef WIN32_LEAN_AND_MEAN
|
||||||
|
# define WIN32_LEAN_AND_MEAN
|
||||||
#endif
|
#endif
|
||||||
|
#include <windows.h>
|
||||||
|
|
||||||
#ifdef __BORLANDC__
|
#ifdef __BORLANDC__
|
||||||
extern char *
|
|
||||||
#ifdef _RTLDLL
|
|
||||||
__import
|
|
||||||
#endif
|
|
||||||
_oscmd;
|
|
||||||
# define _kbhit kbhit
|
# define _kbhit kbhit
|
||||||
# define _getch getch
|
# define _getch getch
|
||||||
#else
|
|
||||||
# ifdef __MINGW32__
|
|
||||||
# ifndef WIN32_LEAN_AND_MEAN
|
|
||||||
# define WIN32_LEAN_AND_MEAN
|
|
||||||
# endif
|
|
||||||
# include <windows.h>
|
|
||||||
# else
|
|
||||||
# ifdef __CYGWIN__
|
|
||||||
# ifndef WIN32_LEAN_AND_MEAN
|
|
||||||
# define WIN32_LEAN_AND_MEAN
|
|
||||||
# endif
|
|
||||||
# include <windows.h>
|
|
||||||
# define _getch getchar
|
|
||||||
# else
|
|
||||||
extern char *_acmdln;
|
|
||||||
# endif
|
|
||||||
# endif
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
int
|
int
|
||||||
main(void)
|
main(void)
|
||||||
{
|
{
|
||||||
const char *p;
|
const wchar_t *p;
|
||||||
int retval;
|
int retval;
|
||||||
int inquote = 0;
|
int inquote = 0;
|
||||||
int silent = 0;
|
int silent = 0;
|
||||||
|
HANDLE hstdout;
|
||||||
|
DWORD written;
|
||||||
|
|
||||||
|
p = (const wchar_t *)GetCommandLineW();
|
||||||
|
|
||||||
#ifdef __BORLANDC__
|
|
||||||
p = _oscmd;
|
|
||||||
#else
|
|
||||||
# if defined(__MINGW32__) || defined(__CYGWIN__)
|
|
||||||
p = (const char *)GetCommandLine();
|
|
||||||
# else
|
|
||||||
p = _acmdln;
|
|
||||||
# endif
|
|
||||||
#endif
|
|
||||||
/*
|
/*
|
||||||
* Skip the executable name, which might be in "".
|
* Skip the executable name, which might be in "".
|
||||||
*/
|
*/
|
||||||
while (*p)
|
while (*p)
|
||||||
{
|
{
|
||||||
if (*p == '"')
|
if (*p == L'"')
|
||||||
inquote = !inquote;
|
inquote = !inquote;
|
||||||
else if (!inquote && *p == ' ')
|
else if (!inquote && *p == L' ')
|
||||||
{
|
{
|
||||||
++p;
|
++p;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
++p;
|
++p;
|
||||||
}
|
}
|
||||||
while (*p == ' ')
|
while (*p == L' ')
|
||||||
++p;
|
++p;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* "-s" argument: don't wait for a key hit.
|
* "-s" argument: don't wait for a key hit.
|
||||||
*/
|
*/
|
||||||
if (p[0] == '-' && p[1] == 's' && p[2] == ' ')
|
if (p[0] == L'-' && p[1] == L's' && p[2] == L' ')
|
||||||
{
|
{
|
||||||
silent = 1;
|
silent = 1;
|
||||||
p += 3;
|
p += 3;
|
||||||
while (*p == ' ')
|
while (*p == L' ')
|
||||||
++p;
|
++p;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Print the command, including quotes and redirection. */
|
/* Print the command, including quotes and redirection. */
|
||||||
puts(p);
|
hstdout = GetStdHandle(STD_OUTPUT_HANDLE);
|
||||||
|
WriteConsoleW(hstdout, p, wcslen(p), &written, NULL);
|
||||||
|
WriteConsoleW(hstdout, L"\r\n", 2, &written, NULL);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Do it!
|
* Do it!
|
||||||
*/
|
*/
|
||||||
retval = system(p);
|
retval = _wsystem(p);
|
||||||
|
|
||||||
if (retval == -1)
|
if (retval == -1)
|
||||||
perror("vimrun system(): ");
|
perror("vimrun system(): ");
|
||||||
@ -110,10 +87,8 @@ main(void)
|
|||||||
{
|
{
|
||||||
puts("Hit any key to close this window...");
|
puts("Hit any key to close this window...");
|
||||||
|
|
||||||
#ifndef __CYGWIN__
|
|
||||||
while (_kbhit())
|
while (_kbhit())
|
||||||
(void)_getch();
|
(void)_getch();
|
||||||
#endif
|
|
||||||
(void)_getch();
|
(void)_getch();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user