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: 3.1.x: Mangled input/output when calling non-cygwin programs


On Sun, 2 Feb 2020 13:18:03 +0100
m0viefreak wrote:
> On 02.02.2020 10:59, Takashi Yano wrote:
> >> 4) Importance of TERM: When connecting to my Cygwin installation using
> >>    SSH using Putty, TERM=putty-256color is set. When executing non-
> >>    native program from that session using that TERM, output is broken
> >>    even worse than in 1), and also keybindings are broken. I need to
> >>    force TERM=xterm-256color for those invocations.
> >>    Shouldn't this be handled transparently and enforced automatically by
> >>    the pcon code?
> > 
> > Which keybinding is broken? In my environment, arrow keys and function
> > keys work as expected in cmd.exe and windows-native vim.
> 
> HOME/END keys were broken if the native app brought up an interactive
> prompt.

In my environment, HOME/END keys are working as expected in cmd.exe
and windows-native vim in putty even if TERM=putty-256color.

I guess Maven changes its behaviour depending on TERM.

> It seems that the cygwin1.dll does not care about TERM, but if a
> non-native application *uses* TERM for whatever reason things start to
> break. If indeed 'cygwin' is the right terminfo to be used, should the
> PTY code then somehow set TERM=cygwin in the non-native process? But
> what if the none-native program doesn't even know the 'cygwin' terminfo?

This make sens only if apps use TERM *right way*. In other words,
if apps uses TERM in the manner of termcap or terminfo. I don't
think Maven does that.

Now I am looking into jansi library which Maven uses, and found
it sets IS_CYGWIN flag according to TERM environmen. It seems
that IS_CYGWIN is set to false if TERM=cygwin. In this case,
jansi uses SetConsoleTextAttribute() call to set text color
rather than escape sequences such as ESC[31m. Ohterwise, escape
sequence is used.

See:
https://github.com/fusesource/jansi/blob/master/jansi/src/main/java/org/fusesource/jansi/AnsiConsole.java

New cygwin provide pure windows console for native apps, so
escape sequence is not handled correctly. This is the cause
of the problem 1) and 2). It may be a problem that TERM is
set even though pure windows console does not have the
capability which TERM environment declares. For the one
thought, it can make sense to unset TERM before execute
native-console apps. However, this does not solve the issue
of Maven. If Maven (jansi) handles TERM *correctly*, this
can be a solution.

> One more thing (maybe also related): When calling a non-native program
> that prints very sinle long line (e.g. just 'mvn' without args) that
> wraps around the terminal, and then copying that multi-line output from
> mintty, the result differs:
> - disable_pcon: A single line is copied
> - default: Multiple lines are copied (like in block selection mode)

This is because pseudo console insert "\r\n" at the each wrapped
point. This is the internal bhaviour of pseudo console, so we
cannot control it.

-- 
Takashi Yano <takashi.yano@nifty.ne.jp>

--
Problem reports:       http://cygwin.com/problems.html
FAQ:                   http://cygwin.com/faq/
Documentation:         http://cygwin.com/docs.html
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple


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