]> Sergey Matveev's repositories - st.git/commitdiff
Eat up "CSI 58" sequences
authorsasha <sasha.code@posteo.mx>
Sun, 27 Jul 2025 05:43:47 +0000 (05:43 +0000)
committerHiltjo Posthuma <hiltjo@codemadness.org>
Sun, 27 Jul 2025 18:06:54 +0000 (20:06 +0200)
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'

st.c

diff --git a/st.c b/st.c
index 03b9bc88b1b8335bd82c9a98c630abd99fd642db..37f38c5464767da3c1bc5255c4cf451af02de10f 100644 (file)
--- 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;