This is the mail archive of the cygwin mailing list for the Cygwin project.

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [ANNOUNCEMENT] Updated: dash-0.5.8-3

Am 14.02.2017 um 09:45 schrieb Corinna Vinschen:
On Feb 13 23:03, Thomas Wolff wrote:
Am 31.01.2017 um 16:32 schrieb Corinna Vinschen:
On Jan 31 16:01, Houder wrote:
On Tue, 31 Jan 2017 14:16:16, Corinna Vinschen wrote:
Ok, here's what happens on Linux:  The termios code support a flag
IUTF8.  This flag determines if the termios code checks for UTF8
characters in the input when performing an ERASE.  It checks if the
IUTF8 flag is set and if so, it checks in a loop if the just erased byte
is a UTF-8 continuation character.  If so, it erases another byte.
Agreed. One byte or more, depending on the "character" ... (which is
not a problem in case of UTF-8 encoding -- continuation bit).

Of course, the terminal driver must receive the characters encoded in UTF-8.

... It's the termios implementation
inside Cygwin.  I created a patch introducing the IUTF8 flag as on Linux
as well as a code snippet trying to remove entire utf-8 characters from
the input if the IUTF8 flag is set.  And it's set now by default since
we default to UTF-8 anyway.

Thomas, you may want to check for the IUTF8 flag in upcoming mintty
versions and unset it if character set configured in the mintty options
dialog is != UTF-8.
So the flag is always set initially? Also on Linux? Does it (on Linux) also
have an effect for non-UTF-8 multibyte encodings?
Yes, yes, and yes.

And cannot the Cygwin DLL set the flag to match the locale setting when it
was invoked?

I can (and will if appropriate) handle the flag in mintty as needed, but
what if someone calls LC_ALL=.other_encoding dash later within the terminal
session? I guess the more consistent solution would be to handle this in the
No.  We're talking about a function in the master side of the tty, while
the applications started in the terminal are on the slave side.
I am not familiar with the concept of setting termios properties on either the master or slave side of a pty. I've only ever set them in the client application, including my tests about IUTF8 which worked. Would setting on the master side imply it's set for the clients implicitly, and can it be changed later, e.g. when mintty character encoding is being changed from the Options dialog? And you say the function of erasing characters on BS is in the master side? To be honest, this confuses me. I thought it's a client function, like readline() would perform if used (apparently not by dash), which is kind of an enhanced version of the tty cooked mode and used to work even without the new flag, right?

iutf8 is set in Linux by default and by most terminal applications ionly
reset if the LC_CTYPE setting in the environment of the terminal
application is not set to the utf8 codeset.  This is determined at
terminal startup, not by the inferior processes runnin in the terminal.
The applications still can set iutf8 via termios control (or stty(1)).
Will you patch stty as well to address the new flag?

For mintty I just thought it might be helpful to honor the character set
setting in its options and to default to iutf8 if it's not set.
Sure, but it would be better to find a solution that implicitly works in all terminals. Isn't it possible to handle this in forkpty()/openpty()?


Problem reports:
Unsubscribe info:

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]