Hi, On Aug 26 16:43, 宫大汉 via Cygwin-patches wrote: > When Cygwin sets console titles on Win10 (has_con_24bit_colors && > !con_is_legacy), > `WriteConsoleA` is used and causes an error if: > 1. the environment variable of `LANG` is `***.UTF-8` > 2. and the code page of console.exe is not UTF-8 > 1. e.g. on my Computer, it's GB2312, for Chinese text > > > I've done some tests on msys2 and details are on > https://github.com/git-for-windows/git/issues/2738, > and I filed a PR of https://github.com/git-for-windows/msys2-runtime/pull/25. > Then what should I do, in order to fix this on Cygwin?
Sending patches to the cygwin-patches mailing list is the right way to go, so that's fine. However, there are two small problems with your patch: - For non-trivial patches we need a 2-clause BSD waiver from you, as per https://cygwin.com/contrib.html, chapter "Before you get started". - Your MUA apparently broke the patch. No way to apply it in this form. Would you mind to resend it together with your BSD waiver, but as attachment? Thanks, Corinna > > > The below is the commit's .patch file: > > > From 334f52a53a2e6b7f560b0e8810b9f672ebb3ad24 Mon Sep 17 00:00:00 2001 > From: Dahan Gong <gdh1...@qq.com> > Date: Fri, 31 Jul 2020 22:06:54 +0800 > Subject: [PATCH] Fix incorrect code page in console title > > > `WriteConsoleA` always follows the current code page of a console window, so > it's not suitable to pass a multi-byte string in `get_ttyp > ()->term_code_page` to it directly. > > > This PR turns to `WriteConsoleW` so that most characters will be translated > "as is", and I've tested it on Win 10 v2004 (CMD: ver 10.0.19041.388). > > > Signed-off-by: gdh1995 <gdh1...@qq.com> > --- > winsup/cygwin/fhandler_console.cc | 18 +++++++++++++++++- > 1 file changed, 17 insertions(+), 1 deletion(-) > > > diff --git a/winsup/cygwin/fhandler_console.cc > b/winsup/cygwin/fhandler_console.cc > index dd979fb8e2..7870eeda81 100644 > --- a/winsup/cygwin/fhandler_console.cc > +++ b/winsup/cygwin/fhandler_console.cc > @@ -80,6 +80,15 @@ static class write_pending_buffer > { > WriteConsoleA (handle, buf, ixput, wn, 0); > } > + inline char *c_str (size_t *psize = NULL) > + { > + size_t size = ixput < WPBUF_LEN ? ixput : WPBUF_LEN - 1; > + buf[size] = '\0'; > + if (psize != NULL) { > + *psize = size; > + } > + return (char *) buf; > + } > } wpbuf; > > static void > @@ -3203,7 +3212,14 @@ fhandler_console::write (const void *vsrc, size_t len) > if (*src < ' ') > { > if (wincap.has_con_24bit_colors () && > !con_is_legacy) > - wpbuf.send (get_output_handle ()); > + { > + size_t nms; > + char *ms = wpbuf.c_str(&nms); > + wchar_t write_buf[TITLESIZE + 1]; > + DWORD done; > + DWORD buf_len = sys_mbstowcs (write_buf, > TITLESIZE, ms); > + write_console (write_buf, buf_len, done); > + } > else if (*src == '\007' && con.state == > gettitle) > set_console_title (con.my_title_buf); > con.state = normal;