This is the mail archive of the cygwin-patches 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: [PATCH] Cygwin: console, pty: Prevent error in legacy console mode.


On 2019-11-06 08:44, Takashi Yano wrote:
> On Wed, 6 Nov 2019 08:06:55 -0700
> Brian Inglis wrote:
>>> +      if (con.is_legacy)
>>> +	setenv ("TERM", "cygwin", 1);
>>>      }
>>
>> handlers should not be changing user's env vars: that is the user's selection to
>> get their preferred operation in their apps.
>>
>> If you need to set TERM, shouldn't you also set it appropriately for non-legacy
>> console?
> 
> The environment TERM is set to cygwin or xterm-256color in environ.cc
> based on wincap.has_con_24bit_colors().
> 
> However, if legacy console mode is enabled, new terminal capability
> compatible with xterm is disabled. So TERM is override to cygwin by
> the code above.
> 
> This is done only in the first initialization stage, so TERM value
> set by user in .login, .bashrc, .tcshrc and etc, ... will be kept.
> 
> Only the case in which TERM is overrid is:
> 1) Enable console legacy mode.
> 2) Open command prompt.
> 3) set TERMq
> 4) start cygwin
> 
> What situation do you assume this causes problem?

Is this not executed on every object creation and on every fork?
If that is not the case, then legacy_console/() should be a singleton
object/method, constructed when accessed, or in wincap, like
has_con_24bit_colors() - is_con_legacy().

When user explicitly sets TERM before starting Cygwin, or after forking, Cygwin
does not touch it, so you should not, and perhaps the legacy console check
should be added there:

newlib-cygwin/winsup/doc/setup-env.xml:
<para>
The <envar>TERM</envar> environment variable specifies your terminal
type.  It is automatically set to <literal>cygwin</literal> if you have
not set it to something else.
</para>

newlib-cygwin/winsup/cygwin/environ.cc:
   /* If console has 24 bit color capability, TERM=xterm-256color,
      otherwise, TERM=cygwin */
   if (!sawTERM)
-    envp[i++] = strdup (wincap.has_con_24bit_colors () ? xterm : cygterm);
+    envp[i++] = strdup (wincap.has_con_24bit_colors () &&
!wincap.is_con_legacy() ? xterm : cygterm);

-- 
Take care. Thanks, Brian Inglis, Calgary, Alberta, Canada

This email may be disturbing to some readers as it contains
too much technical detail. Reader discretion is advised.


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