[Python-checkins] cpython (3.6): Issue #28333: Enables Unicode for ps1/ps2 and input() prompts. (Patch by Eryk
steve.dower
python-checkins at python.org
Sat Oct 8 15:18:58 EDT 2016
https://hg.python.org/cpython/rev/faf5493e6f61
changeset: 104386:faf5493e6f61
branch: 3.6
parent: 104384:e6ec01903f6c
user: Steve Dower <steve.dower at microsoft.com>
date: Sat Oct 08 12:18:16 2016 -0700
summary:
Issue #28333: Enables Unicode for ps1/ps2 and input() prompts. (Patch by Eryk Sun)
files:
Misc/NEWS | 2 ++
Parser/myreadline.c | 28 ++++++++++++++++++++++++----
2 files changed, 26 insertions(+), 4 deletions(-)
diff --git a/Misc/NEWS b/Misc/NEWS
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -213,6 +213,8 @@
Windows
-------
+- Issue #28333: Enables Unicode for ps1/ps2 and input() prompts
+
- Issue #28251: Improvements to help manuals on Windows.
- Issue #28110: launcher.msi has different product codes between 32-bit and
diff --git a/Parser/myreadline.c b/Parser/myreadline.c
--- a/Parser/myreadline.c
+++ b/Parser/myreadline.c
@@ -203,17 +203,37 @@
#ifdef MS_WINDOWS
if (!Py_LegacyWindowsStdioFlag && sys_stdin == stdin) {
- HANDLE hStdIn;
+ HANDLE hStdIn, hStdErr;
_Py_BEGIN_SUPPRESS_IPH
hStdIn = (HANDLE)_get_osfhandle(fileno(sys_stdin));
+ hStdErr = (HANDLE)_get_osfhandle(fileno(stderr));
_Py_END_SUPPRESS_IPH
if (_get_console_type(hStdIn) == 'r') {
fflush(sys_stdout);
- if (prompt)
- fprintf(stderr, "%s", prompt);
- fflush(stderr);
+ 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);
+ fflush(stderr);
+ }
+ }
clearerr(sys_stdin);
return _PyOS_WindowsConsoleReadline(hStdIn);
}
--
Repository URL: https://hg.python.org/cpython
More information about the Python-checkins
mailing list