Commits
- Commit:
6e970474743d57a5d8b054c41fd3bff2bc895742- From:
- Hiltjo Posthuma <hiltjo@codemadness.org>
- Date:
bump version to 0.9.3
- Commit:
5a4666c19e3956069147aee43a06b326d998366e- From:
- Hiltjo Posthuma <hiltjo@codemadness.org>
- Date:
add a few comments
- Commit:
d6c431859c6c0201e0668ed24a9f17cebf0a68f5- From:
- Ayman Bagabas <ayman.bagabas@gmail.com>
- Via:
- Hiltjo Posthuma <hiltjo@codemadness.org>
- Date:
Support OSC 110, 111, and 112 for resetting colors
This adds support for OSC 110, 111, and 112 escape sequences to reset
the foreground, background, and cursor colors in the terminal. The
changes include handling these sequences in the `strhandle` function of
`st.c`, allowing applications to reset colors to their default values.
The OSC sequences originated from Xterm control sequences and are now
widely used in terminal applications and supported by many terminal
emulators. For applications, this allows them to reset colors to
default values without needing to know the colors beforehand.
Signed-off-by: Ayman Bagabas <ayman.bagabas@gmail.com>
- Commit:
f114bcedd113017d907aad32031db92c050f4bf3- From:
- sasha <sasha.code@posteo.mx>
- Via:
- Hiltjo Posthuma <hiltjo@codemadness.org>
- Date:
Eat up "CSI 58" sequences
This is used in the wild by systemd systemctl for example and st
misinterpreted it as "blink", because it didn't know "58", then saw "5"
as "blink", and then didn't know "245".
This should print "foo" as normal text:
printf '\e[58:5:245mfoo\n'
printf '\e[58:2:50:100:200mfoo\n'
- Commit:
98610fcd37f655d44586323dc86c1d013c2798ce- From:
- Johannes Altmanninger <aclopte@gmail.com>
- Via:
- Hiltjo Posthuma <hiltjo@codemadness.org>
- Date:
Do not interpret CSI ? u as DECRC
The kitty keyboard protocol docs recommend CSI ? u to query support for
that protocol, see https://sw.kovidgoyal.net/kitty/keyboard-protocol/
For better or worse, fish shell uses this query to work around bugs
in other terminals triggered by requesting that protocol via CSI = 5 u.
Unfortunately, st interprets CSI ? u as DECRC (restore cursor
position). reproduce with 'printf "\x1b[?u"; cat'.
fish could work around this by switching to the alternate screen
before running this query; but that might cause tearing on terminals
that don't support Synchronized Output. I'm not sure.
In the meantime, let's correct our parser.
This adds a redundant else-after-return, for consistency with the
surrounding code.
- Commit:
6009e6e25bdff9548f085e9ae562b1ca305d3a0b- From:
- Markus Rinne <markus.ka.rinne@gmail.com>
- Via:
- Hiltjo Posthuma <hiltjo@codemadness.org>
- Date:
Clear screen: Fix edge case
With sequence \e[1J, if cursor is on second line, clear the first line.
- Commit:
a0274bc20e11d8672bb2953fdd1d3010c0e708c5- From:
- Lucas de Sena <lucas@seninha.org>
- Via:
- Hiltjo Posthuma <hiltjo@codemadness.org>
- Date:
fix BadMatch error when embedding on some windows
When embedded, st fails with BadMatch error if the embedder's window has
non-default colormap/depth/visual. This commit fixes that by creating
st's window inside root and then reparent it into embedder.
The reference window for dc.gc is also changed to match root's visuals.
A similar commit had been made for dmenu[1].
See this issue[2] on github for context.
[1]: https://git.suckless.org/dmenu/commit/0fe460dbd469a1d5b6a7140d0e1801935e4a923b.html
[2]: https://github.com/phillbush/xfiles/issues/47
- Commit:
5dbcca49263be094fc38159c297458ae323ef647- From:
- Hiltjo Posthuma <hiltjo@codemadness.org>
- Date:
support colons in SGR character attributes
Patch by Mikhail Kot <to@myrrc.dev>
With some modifications to behave more like xterm (see note below).
Example:
printf '\033[48;2;255:0:0mtest\n'
https://invisible-island.net/xterm/ctlseqs/ctlseqs.html
Some notes:
"CSI Pm m Character Attributes (SGR).
[...]
o xterm allows either colons (standard) or semicolons
(legacy) to separate the subparameters (but after the
first colon, colons must be used).
- Commit:
d63b9eb90245926b531bd54b1d591adb96613e70- From:
- Hiltjo Posthuma <hiltjo@codemadness.org>
- Date:
bump version to 0.9.2
- Commit:
497a75638291454875ba1ec8d484c7f3d6f41d66- From:
- DOGMAN <dogman@aaathats3as.com>
- Via:
- Hiltjo Posthuma <hiltjo@codemadness.org>
- Date:
Reset title when an empty title string is given
With this patch, st will reset its window title when an empty string is
given as the terminal title. For example:
printf "\033]0;\007"
Some applications, like termdown, expect this functionality. xterm
implements it, but it seems that most other terminal emulators don't.
In any case, I don't see why there should ever be a case where the st
window doesn't have a title property.
- Commit:
8c68ec52419f3f965164cafcf589b87e8961348d- From:
- Hiltjo Posthuma <hiltjo@codemadness.org>
- Date:
Revert "Fix cursor move with wide glyphs"
This reverts commit 7473a8d1a57e5f9aba41b953f4e498c35e1c9dc5.
This patch needs some more work. It caused regressions with programs that use
GNU readline, etc.
Original test-case example from Tim Culverhouse <tim@timculverhouse.com>:
printf " 😀" && sleep 2 && printf "\e[D" && sleep 2 && printf "\e[D" && sleep 2
After the patch it caused regressions, example test-case:
printf "Aå—\bB\n"
- Commit:
5ce971628106fb767ef91bf4386227423f5fdf98- From:
- Hiltjo Posthuma <hiltjo@codemadness.org>
- Date:
bump version to 0.9.1
- Commit:
f20e169a20f3ee761f7e09714f1d4c10916cf4c6- From:
- Hiltjo Posthuma <hiltjo@codemadness.org>
- Date:
config.def.h: improve latency for the default configuration
- Commit:
95f22c53059ccd60ee701ccf2659dacd95e4e89a- From:
- Tommi Hirvola <tommi@hirvola.fi>
- Via:
- Hiltjo Posthuma <hiltjo@codemadness.org>
- Date:
set upper limit for REP escape sequence argument
Previously, printf 'L\033[2147483647b' would call tputc('L') 2^31 times,
making st unresponsive. This commit allows repeating the last character
at most 65535 times in order to prevent freezing and DoS attacks.
- Commit:
7473a8d1a57e5f9aba41b953f4e498c35e1c9dc5- From:
- Quentin Rameau <quinq@fifth.space>
- Via:
- Hiltjo Posthuma <hiltjo@codemadness.org>
- Date:
Fix cursor move with wide glyphs
st would always move back 1 column,
even with wide glyhps (using more than a single column).
The glyph rune is set on its first column,
and the other ones are to 0,
so loop until we detect the start of the previous glyph.
- Commit:
a3f7420310be0fd778ef9fe2abf20edc2d8dc81a- From:
- Tim Culverhouse <tim@timculverhouse.com>
- Via:
- Hiltjo Posthuma <hiltjo@codemadness.org>
- Date:
csi: check for private marker in 'S' case
The handler for 'S' final character does not check for a private
marker. This can cause a conflict with a sequence called 'XTSMGRAPHICS'
which also has an 'S' final character, but uses the private marker '?'.
Without checking for a private marker, st will perform a scroll up
operation when XTSMGRAPHICS is seen, which can cause unexpected display
artifacts.
- Commit:
9846a56bd7fdc86bf788db04bbbcbde7b7eb9952- From:
- Peter Hofmann <scm@uninformativ.de>
- Via:
- Hiltjo Posthuma <hiltjo@codemadness.org>
- Date:
Add terminfo entries for bracketed paste mode
Helps Vim (and hopefully others) to discover that this feature exists
without further user configuration.
- Commit:
559fdc278681c98470749adb59f01cd071720458- From:
- Peter Hofmann <scm@uninformativ.de>
- Via:
- Hiltjo Posthuma <hiltjo@codemadness.org>
- Date:
Unhide cursor on RIS (\033c)
It is unclear if it's "required" to do this on RIS, but it's useful when
calling reset(1) after interactive programs have crashed and garbled up
the screen.
FWIW, other terminals do it as well (tested with XTerm, VTE, Kitty,
Alacritty, Linux VT).
- Commit:
8abe4bcb41aa7fda0ae00823f6a20271124150db- From:
- Peter Hofmann <scm@uninformativ.de>
- Via:
- Hiltjo Posthuma <hiltjo@codemadness.org>
- Date:
Fix wide glyphs breaking "nowrap" mode
Consider the following example:
printf '\e[?7l';\
for i in $(seq $(($(tput cols) - 1))); do printf a; done;\
printf '🙈\n';\
printf '\e[?7h'
Even though MODE_WRAP has been disabled, the emoji appeared on the next
line. This patch keeps wide glyphs on the same line and moves them to
the right-most possible position.
- Commit:
2fc7e532b23e2f820c6b73d352ec7c41fefa45b5- From:
- Peter Hofmann <scm@uninformativ.de>
- Via:
- Hiltjo Posthuma <hiltjo@codemadness.org>
- Date:
Don't scroll selection on the other screen
Fixes garbage selections when switching to/from the alternate screen.
How to reproduce:
- Be in primary screen.
- Select something.
- Run this (switches to alternate screen, positions the cursor at the
bottom, triggers selscroll(), and then goes back to primary screen):
tput smcup; tput cup $(tput lines) 0; echo foo; tput rmcup
- Notice how the (visual) selection now covers a different line.
The reason is that selscroll() calls selnormalize() and that cannot find
the original range anymore. It's all empty lines now, so it snaps to
"select the whole line".
- Commit:
a6bbc0c96b0a1db804061b0db79101c6b26aec57- From:
- Peter Hofmann <scm@uninformativ.de>
- Via:
- Hiltjo Posthuma <hiltjo@codemadness.org>
- Date:
Fix bounds checks of dc.col
dc.collen is the length of dc.col, not the maximum index, hence if x is
equal to dc.collen, then it's an error.
With config.def.h, the last valid index is 259, so this correctly
reports "black":
$ printf '\033]4;259;?\e\\'
260 is an invalid index and this reports garbage instead of printing an
error:
$ printf '\033]4;260;?\e\\'
- Commit:
eb3b894f4076f2b25afc644a1f444b5cbd96aae8- From:
- Hiltjo Posthuma <hiltjo@codemadness.org>
- Date:
Makefile: remove the options target
The Makefile used to suppress output (by using @), so this target made sense at
the time.
But the Makefile should be simple and make debugging with less abstractions or
fancy printing. The Makefile was made verbose and doesn't hide the build
output, so remove this target.
Prompted by a question on the mailing list about the options target.
- Commit:
3a6d6d740110e6ee1b092d05ad746244eedabe4b- From:
- Shi Tian <shitian@cock.li>
- Via:
- Hiltjo Posthuma <hiltjo@codemadness.org>
- Date:
Fix for wide character being incorrectly cleared on MODE_INSERT
Under insert mode, when inserting a normal character in front of
a wide character, the affected region is shifted to the right by
one cell. However, the empty cell is reset as if being a part of a
wide character, causing the following cell being mishandled as a
dummy cell.
To reproduce the bug:
printf '\033[4h' # set MODE_INSERT
printf 妳好
printf '\033[4D'
printf 'x'
printf '\033[4l\n'
- Commit:
211964d56ee00a7d46e251cbc150afb79138ae37- From:
- Hiltjo Posthuma <hiltjo@codemadness.org>
- Date:
ignore C1 control characters in UTF-8 mode
Ignore processing and printing C1 control characters in UTF-8 mode.
These are in the range: 0x80 - 0x9f.
By default in st the mode is set to UTF-8.
This matches more the behaviour of xterm with the options -u8 or +u8 also.
Also see the xterm resource "allowC1Printable".
Let me know if this breaks something, in most cases I don't think so.
As usual a very good reference is:
https://invisible-island.net/xterm/ctlseqs/ctlseqs.html
- Commit:
f17abd25b376c292f783062ecf821453eaa9cc4c- From:
- Adam Price <komidore64@gmail.com>
- Via:
- Hiltjo Posthuma <hiltjo@codemadness.org>
- Date:
Add support for DSR response "OK" escape sequence
"VT100 defines an escape sequence [1] called Device Status Report (DSR). When
the DSR sequence received is `csi 5n`, an "OK" response `csi 0n` is returned.
This patch adds that "OK" response.
I encountered this missing sequence when I noticed that fzf [2] would clobber
my prompt whenever completing a find.
To test that ST doesn't currently respond to `csi 5n`, use fzf's shell
extension in ST's repo to complete the path for a file.
my-fancy-prompt $ vim **<tab>
<select a file>
st.c
Select a file with <enter>, and notice that fzf clobbers some or all of your
prompt.
After applying this patch, do the same test as above and notice that fzf has no
longer clobbered your prompt by placing the file name in the correct position
in your command.
my-fancy-prompt $ vim **<tab>
<select a file>
my-fancy prompt $ vim st.c
Thank you for considering my first patch submission.
[1] https://www.xfree86.org/current/ctlseqs.html#VT100%20Mode
[2] https://github.com/junegunn/fzf
"
Patch slightly adapted with input from the mailinglist,
