Commit 3d00c7d7 authored by Steve Dower's avatar Steve Dower

Issue #28333: Enables Unicode for ps1/ps2 and input() prompts. (Patch by Eryk Sun)

parent 64e0f462
...@@ -213,6 +213,8 @@ Library ...@@ -213,6 +213,8 @@ Library
Windows Windows
------- -------
- Issue #28333: Enables Unicode for ps1/ps2 and input() prompts
- Issue #28251: Improvements to help manuals on Windows. - Issue #28251: Improvements to help manuals on Windows.
- Issue #28110: launcher.msi has different product codes between 32-bit and - Issue #28110: launcher.msi has different product codes between 32-bit and
......
...@@ -203,17 +203,37 @@ PyOS_StdioReadline(FILE *sys_stdin, FILE *sys_stdout, const char *prompt) ...@@ -203,17 +203,37 @@ PyOS_StdioReadline(FILE *sys_stdin, FILE *sys_stdout, const char *prompt)
#ifdef MS_WINDOWS #ifdef MS_WINDOWS
if (!Py_LegacyWindowsStdioFlag && sys_stdin == stdin) { if (!Py_LegacyWindowsStdioFlag && sys_stdin == stdin) {
HANDLE hStdIn; HANDLE hStdIn, hStdErr;
_Py_BEGIN_SUPPRESS_IPH _Py_BEGIN_SUPPRESS_IPH
hStdIn = (HANDLE)_get_osfhandle(fileno(sys_stdin)); hStdIn = (HANDLE)_get_osfhandle(fileno(sys_stdin));
hStdErr = (HANDLE)_get_osfhandle(fileno(stderr));
_Py_END_SUPPRESS_IPH _Py_END_SUPPRESS_IPH
if (_get_console_type(hStdIn) == 'r') { if (_get_console_type(hStdIn) == 'r') {
fflush(sys_stdout); fflush(sys_stdout);
if (prompt) if (prompt) {
if (_get_console_type(hStdErr) == 'w') {
wchar_t *wbuf;
int wlen;
wlen = MultiByteToWideChar(CP_UTF8, 0, prompt, -1,
NULL, 0);
if (wlen++ &&
(wbuf = PyMem_RawMalloc(wlen * sizeof(wchar_t)))) {
wlen = MultiByteToWideChar(CP_UTF8, 0, prompt, -1,
wbuf, wlen);
if (wlen) {
DWORD n;
fflush(stderr);
WriteConsoleW(hStdErr, wbuf, wlen, &n, NULL);
}
PyMem_RawFree(wbuf);
}
} else {
fprintf(stderr, "%s", prompt); fprintf(stderr, "%s", prompt);
fflush(stderr); fflush(stderr);
}
}
clearerr(sys_stdin); clearerr(sys_stdin);
return _PyOS_WindowsConsoleReadline(hStdIn); return _PyOS_WindowsConsoleReadline(hStdIn);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment