commit f114bcedd113017d907aad32031db92c050f4bf3 from: sasha via: Hiltjo Posthuma date: Sun Jul 27 18:06:54 2025 UTC 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 commit + f114bcedd113017d907aad32031db92c050f4bf3 blob - 03b9bc88b1b8335bd82c9a98c630abd99fd642db blob + 37f38c5464767da3c1bc5255c4cf451af02de10f --- st.c +++ 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;