Mercurial > vim
changeset 9840:da7307987ed1 v7.4.2195
commit https://github.com/vim/vim/commit/bcc1dcc981dfc092587d4fbd1327d82a03426c57
Author: Bram Moolenaar <Bram@vim.org>
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)
author | Christian Brabandt <cb@256bit.org> |
---|---|
date | Wed, 10 Aug 2016 22:15:06 +0200 |
parents | 9961879bd42b |
children | 736f093f3494 |
files | src/version.c src/vimrun.c |
diffstat | 2 files changed, 23 insertions(+), 46 deletions(-) [+] |
line wrap: on
line diff
--- 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,
--- a/src/vimrun.c +++ b/src/vimrun.c @@ -17,89 +17,66 @@ #include <stdio.h> #include <stdlib.h> -#ifndef __CYGWIN__ -# include <conio.h> +#include <conio.h> +#ifndef WIN32_LEAN_AND_MEAN +# define WIN32_LEAN_AND_MEAN #endif +#include <windows.h> #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 <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 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(); }