st

simple terminal

git clone https://9o.is/git/st.git

commit 6cbd9d7534fda3b9dbb60f4c224856313dfb8f5a
parent 58705b2db6407bb9df5f980b41b9bd8fbaab0d21
Author: sasha <sasha.code@posteo.mx>
Date:   Sun, 27 Jul 2025 05:43:47 +0000

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'

Diffstat:
Mst.c | 6++++++
1 file changed, 6 insertions(+), 0 deletions(-)

diff --git a/st.c b/st.c @@ -1430,6 +1430,12 @@ tsetattr(const int *attr, int l) case 49: term.c.attr.bg = defaultbg; break; + case 58: + /* This starts a sequence to change the color of + * "underline" pixels. We don't support that and + * instead eat up a following "5;n" or "2;r;g;b". */ + tdefcolor(attr, &i, l); + break; default: if (BETWEEN(attr[i], 30, 37)) { term.c.attr.fg = attr[i] - 30;