# HG changeset patch # User Christian Brabandt # Date 1470860106 -7200 # Node ID da7307987ed1d1edb11de12e19608822ae65b0f2 # Parent 9961879bd42bc6f4c16c3ed5c91daa14fd6cd167 commit https://github.com/vim/vim/commit/bcc1dcc981dfc092587d4fbd1327d82a03426c57 Author: Bram Moolenaar Date: Wed Aug 10 22:02:40 2016 +0200 patch 7.4.2195 Problem: MS-Windows: The vimrun program does not support Unicode. Solution: Use GetCommandLineW(). Cleanup old #ifdefs. (Ken Takata) diff --git a/src/version.c b/src/version.c --- a/src/version.c +++ b/src/version.c @@ -764,6 +764,8 @@ static char *(features[]) = static int included_patches[] = { /* Add new patch number below this line */ /**/ + 2195, +/**/ 2194, /**/ 2193, diff --git a/src/vimrun.c b/src/vimrun.c --- a/src/vimrun.c +++ b/src/vimrun.c @@ -17,89 +17,66 @@ #include #include -#ifndef __CYGWIN__ -# include +#include +#ifndef WIN32_LEAN_AND_MEAN +# define WIN32_LEAN_AND_MEAN #endif +#include #ifdef __BORLANDC__ -extern char * -#ifdef _RTLDLL -__import -#endif -_oscmd; # define _kbhit kbhit # define _getch getch -#else -# ifdef __MINGW32__ -# ifndef WIN32_LEAN_AND_MEAN -# define WIN32_LEAN_AND_MEAN -# endif -# include -# else -# ifdef __CYGWIN__ -# ifndef WIN32_LEAN_AND_MEAN -# define WIN32_LEAN_AND_MEAN -# endif -# include -# define _getch getchar -# else -extern char *_acmdln; -# endif -# endif #endif int main(void) { - const char *p; - int retval; - int inquote = 0; - int silent = 0; + const wchar_t *p; + int retval; + int inquote = 0; + int silent = 0; + HANDLE hstdout; + DWORD written; -#ifdef __BORLANDC__ - p = _oscmd; -#else -# if defined(__MINGW32__) || defined(__CYGWIN__) - p = (const char *)GetCommandLine(); -# else - p = _acmdln; -# endif -#endif + p = (const wchar_t *)GetCommandLineW(); + /* * Skip the executable name, which might be in "". */ while (*p) { - if (*p == '"') + if (*p == L'"') inquote = !inquote; - else if (!inquote && *p == ' ') + else if (!inquote && *p == L' ') { ++p; break; } ++p; } - while (*p == ' ') + while (*p == L' ') ++p; /* * "-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; p += 3; - while (*p == ' ') + while (*p == L' ') ++p; } /* 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! */ - retval = system(p); + retval = _wsystem(p); if (retval == -1) perror("vimrun system(): "); @@ -110,10 +87,8 @@ main(void) { puts("Hit any key to close this window..."); -#ifndef __CYGWIN__ while (_kbhit()) (void)_getch(); -#endif (void)_getch(); }