On Wed, 26 Aug 2020 19:33:45 +0200 Corinna Vinschen wrote: > On Aug 26 09:30, Johannes Schindelin wrote: > > Hi Corinna, > > > > On Wed, 26 Aug 2020, Corinna Vinschen wrote: > > > > > 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. > > > > Just in case you want to have a look at it, you can download the patch via > > https://github.com/git-for-windows/msys2-runtime/commit/334f52a53a2e6b7f560b0e8810b9f672ebb3ad24.patch > > > > FWIW my original reviewer comment was: "why not fix wpbuf.send() in the > > first place?" but after having a good look around, that method seemed to > > be called from so many places that I "got cold feet" of that approach. > > > > For one, I saw at least one caller that wants to send Escape sequences, > > and I have no idea whether it is a good idea to do that in the `*W()` > > version of the `WriteConsole()` function. > > Yes, it is. There's no good reason to use the A functions, actually. > They are just wrappers calling the W functions and WriteConsoleW > evaluates ESC sequences just fine (just given as UTF-16 chars). > > > So the real question from my side is: how to address properly the many > > uses of `WriteConsoleA()` (which breaks all kinds of encodings in many > > situations because Windows' idea of the current code page and Cygwin's > > idea of the current locale are pretty often at odds). > > > > The patch discussed here circumvents one of those call sites. > > > > However, even though there have not been any callers of `WriteConsoleA()` > > in Cygwin v3.0.7 (but four callers of `WriteConsoleW()` which I suspect > > were converted to `*A()` calls in v3.1.0 by the Pseudo Console patches), > > there are now a whopping 15 callers of that `*A()` function in Cygwin > > v3.1.7. See here: > > [...] > > That cannot be intentional, can it? We should always thrive to use the > > `*W()` functions so that we can be sure that the expected encoding is > > used, right? > > Takashi? Any reason to use WriteConsoleA rather than WriteConsoleW? If > at all, WriteConsoleA should only be used if it's 100% safe to assume > that the buffer only contains ASCII chars < 127.
No. I just did not realize that the escapce sequence cound contain non-ASCII chars. I am sorry. I will submit a patch for that issue. -- Takashi Yano <takashi.y...@nifty.ne.jp>