sixel: fix cursor positioning logic

This adjusts the logic that positions the text cursor after emitting a
sixel, when sixel scrolling mode is *enabled*.

We’ve always mimicked XTerm’s behavior. However, XTerm recently
changed its behavior, to better match that of an VT382.

Now, the cursor is placed *on* the last row of the sixel, instead of
on a new row after the sixel.

This allows applications to print sixels to the bottom row of the
terminal, without causing the content to scroll.

Finally, there was a bug in the horizontal positioning of the cursor;
it was placed on the *first* column of the row, instead of on the
first column of the sixel.
This commit is contained in:
Daniel Eklöf 2023-06-16 16:20:37 +02:00
parent 8a3620bafa
commit 66d9b8da60
No known key found for this signature in database
GPG key ID: 5BBD4992C116573F
2 changed files with 26 additions and 20 deletions

View file

@ -65,6 +65,15 @@
* Opaque sixels now retain the background opacity (when current
background color is the **default** background color)
([#1360][1360]).
* Text cursors vertical position after emitting a sixel, when sixel
scrolling is **enabled** (the default) has been updated to match
XTerms, and the VT382s behavior: the cursor is positioned **on**
the last sixel row, rather than _after_ it. This allows printing
sixels on the last row without scrolling up, but also means
applications may have to explicitly emit a newline to ensure the
sixel is visible. For example, `cat`:ing a sixel in the shell will
typically result in the last row not being visible, unless a newline
is explicitly added.
[1371]: https://codeberg.org/dnkl/foot/pulls/1371
[1360]: https://codeberg.org/dnkl/foot/issues/1360