X-Recipient: archive-cygwin@delorie.com
X-Original-To: cygwin@cygwin.com
Delivered-To: cygwin@cygwin.com
DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 3150C3858D37
Authentication-Results: sourceware.org;
 dmarc=pass (p=none dis=none) header.from=gmail.com
Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=gmail.com
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112;
 h=mime-version:from:date:message-id:subject:to;
 bh=4Dj2owPNSxd0s8Bow5WurNX0peBs5U3HjmuoWt7yO2g=;
 b=YkXrOmhv5Rwt3tGOD+tW/3MivhyzBMA7EB1SJ5bmkLg/IP15H4oy/zxK7KYIQyBugr
 lOL51GZDuoT9TyRj/UTiz5ks3brf2EeAlPTUqUd9CPZ3tO4jdyHKYkzGJWl/shIkN0V6
 j6buZX3paSgHl3MWxivEDr1ANH3RpvI/Yfhzz0HXvQU9fcNjnPGD7xHEvrojDWlhGg/m
 wTYAfbk91vE0ZCxNJ3r1v2uxmKo6xUUkzYyiv05rxzw8R85WJt4dURfnNhfEnq71zzPT
 P23GQji02OyFOUlOdlX2tx40G8xVASF12cnmph6qH2LxEyiqBx1cAgoYfhB5sdJT+7Bh
 SiXg==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20210112;
 h=x-gm-message-state:mime-version:from:date:message-id:subject:to;
 bh=4Dj2owPNSxd0s8Bow5WurNX0peBs5U3HjmuoWt7yO2g=;
 b=Ffch0HCYZ5aVYdPSkFkExdoPmCNgTt6VeqmMVjTOO4yH1cGv57F2z3H4J7J5t2O6rK
 roQDfTQCiaLHB4+DSkEI/jQI9KKsGjjHbkXqmoXwly7KiZACx+MDxRMeHc4KA0ML7Rxu
 Zx4w90PpMEryAuXr5uoiSatpE3S520H0c6TKG3cfU7BQDFEODxH2sZb1TkqVmJeJsRJi
 0RTkyeYOMuXfdaCidL6MeNJqg/Tq9yOR1+YiS3QrAle2VkvslwtkTGyPrCaFswlZufUq
 gEUwP4E5ZbX0PskJndLz+FoGhthtWtP6hg3pOoRsWZU+BXblj7QCJ0xji12v0vrJpTNx
 5G+A==
X-Gm-Message-State: AOAM5325Ghy8CAiMINSyRta0uBF6YyZBAUBj3Pu8I+1R+lYrMiELOXzP
 q70/tFnLTiwVcpbRnSDArcbFnSOdB6n+JEh+wwG0LRbf+mA=
X-Google-Smtp-Source: ABdhPJxJPzTbwk9U7asHTbPSq4dd/1ulroXirWckJ+5TtgKC1mnlk8vwi75sNXPeRxG39Juf0lKvDntAZj+FstOJ4+M=
X-Received: by 2002:a05:6e02:10c2:: with SMTP id
 s2mr19865115ilj.3.1643882571137; 
 Thu, 03 Feb 2022 02:02:51 -0800 (PST)
MIME-Version: 1.0
From: Koichi Murase <myoga.murase@gmail.com>
Date: Thu, 3 Feb 2022 19:02:14 +0900
Message-ID: <CAFLRLk_GF_BZSdOrSqMtnUO6Lt4rBE_xjwJAVQQT4_1x9zd4Hw@mail.gmail.com>
Subject: In Cygwin console (not Mintty), escape sequences DL/IL at the last
 line misbehave
To: cygwin@cygwin.com
X-Spam-Status: No, score=-0.9 required=5.0 tests=BAYES_00, DKIM_SIGNED,
 DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, FREEMAIL_FROM, RCVD_IN_DNSWL_NONE,
 SPF_HELO_NONE, SPF_PASS, TXREP,
 T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.4
X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on
 server2.sourceware.org
X-BeenThere: cygwin@cygwin.com
X-Mailman-Version: 2.1.29
List-Id: General Cygwin discussions and problem reports <cygwin.cygwin.com>
List-Archive: <https://cygwin.com/pipermail/cygwin/>
List-Post: <mailto:cygwin@cygwin.com>
List-Help: <mailto:cygwin-request@cygwin.com?subject=help>
List-Subscribe: <https://cygwin.com/mailman/listinfo/cygwin>,
 <mailto:cygwin-request@cygwin.com?subject=subscribe>
Content-Type: text/plain; charset="us-ascii"
Content-Transfer-Encoding: 7bit
Sender: "Cygwin" <cygwin-bounces+archive-cygwin=delorie.com@cygwin.com>

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

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