public inbox for cygwin-developers@cygwin.com
 help / color / mirror / Atom feed
From: Johannes Schindelin <Johannes.Schindelin@gmx.de>
To: cygwin-developers@cygwin.com
Cc: Corinna Vinschen <corinna-cygwin@cygwin.com>
Subject: Re: New implementation of pseudo console support (experimental)
Date: Tue, 1 Sep 2020 06:46:53 +0200 (CEST)	[thread overview]
Message-ID: <nycvar.QRO.7.76.6.2009010632370.56@tvgsbejvaqbjf.bet> (raw)
In-Reply-To: <20200831193736.GG3272@calimero.vinschen.de>

Hi Corinna,

On Mon, 31 Aug 2020, Corinna Vinschen wrote:

> On Aug 31 21:17, Johannes Schindelin wrote:
> > [...]
> > So I had a look at the code, and it seems that
> > `fhandler_pty_slave::setup_locale()` forces the output encoding to
> > C.ASCII if Pseudo Console support is enabled:
> >
> >   char locale[ENCODING_LEN + 1] = "C";
> >   char charset[ENCODING_LEN + 1] = "ASCII";
> >   LCID lcid = get_langinfo (locale, charset);
> >
> >   /* Set console code page from locale */
> >   if (get_pseudo_console ())
> >     {
> >       UINT code_page;
> >       if (lcid == 0 || lcid == (LCID) -1)
> >         code_page = 20127; /* ASCII */
>
> This looks wrong, actually.  The default behaviour of Cygwin since
> Cygwin 1.7 was to assume UTF-8, even if the application doesn't call
> setlocale.  This means the locale is "C", so ASCII is expected.
> However, even in this case, the internal conversions use UTF-8.
> See function internal_setlocale() in nlsfuncs.cc, lines 1553/1554.
>
> We never switched the console codepage, though, because the codepage
> doesn't make much sense when using wide character functions only,
> i. e. WriteConsoleW.  Only the alternate charset is 437/ASCII.  So,
> if the pseudo console actually *requires* to set the charset...

Well, it is worse, as I have reported elsewhere in this thread. For some
reason (which was not answered yet, and which I am still very much
interested in knowing), the Console output code page is _still_ used
in `disable_pcon`.

That smells completely wrong. Why would the actual Console output encoding
be involved when Pseudo Console support is disabled, when it was not at
all used in v3.0.7 (which is supposedly using the same code paths that
`disable_pcon` is still expected to use)?

>
>
> >       else if (!GetLocaleInfo (lcid,
> >                                LOCALE_IDEFAULTCODEPAGE | LOCALE_RETURN_NUMBER,
> >                                (char *) &code_page, sizeof (code_page)))
> >         code_page = 20127; /* ASCII */
> >       SetConsoleCP (code_page);
> >       SetConsoleOutputCP (code_page);
>
> can we please default to UTF-8 here even if the code page is ASCII?

Yes, please. In fact, I am tempted to do this:

-- snip --
diff --git a/winsup/cygwin/fhandler_tty.cc b/winsup/cygwin/fhandler_tty.cc
index 43eebc174..65b4d45fa 100644
--- a/winsup/cygwin/fhandler_tty.cc
+++ b/winsup/cygwin/fhandler_tty.cc
@@ -2867,7 +2867,16 @@ fhandler_pty_slave::setup_locale (void)
   char charset[ENCODING_LEN + 1] = "ASCII";
   LCID lcid = get_langinfo (locale, charset);

-  /* Set console code page form locale */
+  /* Special-case the UTF-8 character set */
+  if (strcasecmp (charset, "UTF-8") == 0)
+    {
+      get_ttyp ()->term_code_page = CP_UTF8;
+      SetConsoleCP (CP_UTF8);
+      SetConsoleOutputCP (CP_UTF8);
+      return;
+    }
+
+  /* Set console code page from locale */
   if (get_pseudo_console ())
     {
       UINT code_page;
-- snap --

The main reason why I am hesitating is that I smell a bigger problem here:
the mere fact that a code path that is supposed not to use Console
functions at all (`disable_pcon`) _does_ respect the output code page
indicates to me that that code path was changed in a totally unintended
way.

Ciao,
Johannes

  reply	other threads:[~2020-09-01  8:18 UTC|newest]

Thread overview: 73+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-05-13 12:16 Takashi Yano
2020-05-13 12:35 ` Thomas Wolff
2020-05-14  9:28 ` Takashi Yano
2020-05-14  9:34   ` Takashi Yano
2020-05-16  0:29     ` Takashi Yano
2020-05-16  7:47       ` Takashi Yano
2020-05-19 13:40         ` Takashi Yano
2020-05-25 10:53           ` Takashi Yano
2020-05-25 15:22             ` Corinna Vinschen
2020-05-25 19:16               ` Thomas Wolff
2020-05-26  1:00               ` Takashi Yano
2020-05-26  7:14                 ` Thomas Wolff
2020-05-26  9:21                   ` Takashi Yano
2020-05-26  9:32                     ` Thomas Wolff
2020-05-26  8:33                 ` Corinna Vinschen
2020-05-26  1:09             ` Takashi Yano
2020-05-28 15:40               ` Takashi Yano
2020-05-29 15:30                 ` Corinna Vinschen
2020-05-30  7:36                   ` Takashi Yano
2020-05-30 13:14                     ` Takashi Yano
2020-05-30 17:43                       ` Corinna Vinschen
2020-05-31  5:52                         ` Takashi Yano
2020-07-01 11:47                 ` Takashi Yano
2020-07-17 11:19                   ` Corinna Vinschen
2020-07-17 12:47                     ` Thomas Wolff
2020-07-17 14:59                       ` Thomas Wolff
2020-07-18  5:05                         ` Takashi Yano
2020-07-18 20:57                           ` Thomas Wolff
2020-07-23 17:17                             ` Takashi Yano
2020-07-27 17:10                               ` Thomas Wolff
2020-07-17 12:52                     ` Ken Brown
2020-07-18  5:07                       ` Takashi Yano
2020-07-18  5:30                     ` Takashi Yano
2020-07-20  8:06                       ` Corinna Vinschen
2020-07-21 18:17                         ` Takashi Yano
2020-07-22  8:45                           ` Takashi Yano
2020-07-22 11:49                             ` Corinna Vinschen
2020-07-22 12:13                               ` Ken Brown
2020-07-23  0:33                             ` Takashi Yano
2020-07-24  5:38                               ` Takashi Yano
2020-07-24 11:22                                 ` Takashi Yano
2020-08-02 12:01                                   ` Corinna Vinschen
2020-08-03  2:05                                     ` Takashi Yano
2020-08-03 10:50                                       ` Corinna Vinschen
2020-08-03  2:11                                   ` Takashi Yano
2020-08-03 12:23                                     ` Takashi Yano
2020-08-11 11:12                                       ` Takashi Yano
2020-08-13  9:58                                         ` Takashi Yano
2020-08-17 11:57                                           ` Takashi Yano
2020-08-19 11:39                                             ` Takashi Yano
2020-08-19 13:41                                               ` Corinna Vinschen
2020-08-19 15:43                                                 ` Thomas Wolff
2020-08-19 20:47                                                 ` Mark Geisert
2020-08-20  8:02                                                 ` Takashi Yano
2020-08-31 12:49                                                   ` Johannes Schindelin
2020-08-31 14:14                                                     ` Takashi Yano
     [not found]                                                     ` <20200831231253.332c66fdddb33ceed5f61db6@nifty.ne.jp>
2020-08-31 14:22                                                       ` Johannes Schindelin
2020-08-31 14:53                                                         ` Takashi Yano
2020-08-31 15:56                                                           ` Johannes Schindelin
2020-08-31 16:12                                                             ` Thomas Wolff
2020-08-31 17:39                                                               ` Thomas Wolff
2020-08-31 19:17                                                                 ` Johannes Schindelin
2020-08-31 19:37                                                                   ` Corinna Vinschen
2020-09-01  4:46                                                                     ` Johannes Schindelin [this message]
2020-09-01  9:23                                                                       ` Takashi Yano
2020-09-01  6:32                                                                         ` Johannes Schindelin
2020-09-01 22:33                                                                           ` Takashi Yano
2020-09-02  6:13                                                                             ` Johannes Schindelin
2020-09-01  9:42                                                                         ` Takashi Yano
2020-08-31 21:07                                                                   ` Thomas Wolff
2020-08-31 23:23                                                                     ` Takashi Yano
2020-09-01  5:00                                                                     ` Johannes Schindelin
2020-09-01  8:56                                                                       ` Thomas Wolff

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=nycvar.QRO.7.76.6.2009010632370.56@tvgsbejvaqbjf.bet \
    --to=johannes.schindelin@gmx.de \
    --cc=corinna-cygwin@cygwin.com \
    --cc=cygwin-developers@cygwin.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).