public inbox for cygwin@cygwin.com
 help / color / mirror / Atom feed
From: Koichi Murase <myoga.murase@gmail.com>
To: cygwin@cygwin.com
Subject: In Cygwin console (not Mintty), escape sequences DL/IL at the last line misbehave
Date: Thu, 3 Feb 2022 19:02:14 +0900	[thread overview]
Message-ID: <CAFLRLk_GF_BZSdOrSqMtnUO6Lt4rBE_xjwJAVQQT4_1x9zd4Hw@mail.gmail.com> (raw)

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

             reply	other threads:[~2022-02-03 10:02 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-02-03 10:02 Koichi Murase [this message]
2022-02-03 12:09 ` Takashi Yano
2022-02-03 12:41   ` Koichi Murase
2022-02-03 15:12     ` Takashi Yano

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=CAFLRLk_GF_BZSdOrSqMtnUO6Lt4rBE_xjwJAVQQT4_1x9zd4Hw@mail.gmail.com \
    --to=myoga.murase@gmail.com \
    --cc=cygwin@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).