In Cygwin console (not Mintty), escape sequences DL/IL at the last line misbehave

Koichi Murase myoga.murase@gmail.com
Thu Feb 3 10:02:14 GMT 2022


I'm not sure what this exactly is related to, but I guess pcon is
closely related.

Cygwin version:

I can reproduce it in Cygwin 3.2.0 and the latest 3.3.4 for both
64-bit and 32-bit versions. I usually set CYGWIN=disable_pcon, but
this reproduces for both cases with and without disable_pcon.

I think I observed this behavior even earlier but don't exactly
remember in which Cygwin version I first noticed this broken behavior.
At least, this behavior has existed for a very long time. I have been
thinking that there are a few people using the Cygwin console
directly, but I recently noticed that it matters when I connect to
Cygwin from Windows Terminal. This puts very hard limitations on
implementing a line editor where the line editor does not know the
absolute vertical position in the terminal screen so cannot predict
the consequences of using DL/IL.

Repeat-by:

1. First open a Cygwin console (not to be confused with Mintty) by
double-clicking bash.exe in C:\cygwin64\bin or by executing "cygstart
bash".
2a. run the following command at the last line of the terminal:

$ printf '\e[5M'

2b. run the following command at the last line of the terminal

$ printf '\e[5L'

The control sequence \e[<Pn>M (CSI <Pn> M) is the ANSI escape sequence
DL (DELETE LINE), which is supposed to delete the current line and the
following <Pn>-1 lines and scrolls up the subsequence lines. This
control function functions correctly when it is not at the last line
in the Cygwin console. However, if the current cursor position is
located at the last line, DL(<Pn>) of the Cygwin console wrongly
scrolls up the entire screen by <Pn> lines (instead of the subsequent
lines after the delete lines).

Likely, \e[<Pn>L is the ANSI escape sequence IL (INSERT LINE), which
is supposed to insert <Pn> new lines at the current line and to scroll
down the subsequent lines. However, when the cursor is at the last
line, IL of the Cygwin console again scrolls down the entire screen.

This behavior is also reproduced in Windows Terminal with a profile of
Cygwin executing bash.exe --login -i. This doesn't happen when we use
Mintty or other terminal emulators relying on the genuine Cygwin PTY.

Fix:

Any other terminals do not behave in this unintuitive way. When the
cursor is located at the last line, DL/IL should not scroll any lines
but should just clear only the last line.

--
Koichi


More information about the Cygwin mailing list