support colons in SGR character attributes - st - simple terminal | |
git clone git://git.suckless.org/st | |
Log | |
Files | |
Refs | |
README | |
LICENSE | |
--- | |
commit 5dbcca49263be094fc38159c297458ae323ef647 | |
parent d63b9eb90245926b531bd54b1d591adb96613e70 | |
Author: Hiltjo Posthuma <[email protected]> | |
Date: Wed, 1 May 2024 20:45:39 +0200 | |
support colons in SGR character attributes | |
Patch by Mikhail Kot <[email protected]> | |
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). | |
Diffstat: | |
M st.c | 5 ++++- | |
1 file changed, 4 insertions(+), 1 deletion(-) | |
--- | |
diff --git a/st.c b/st.c | |
@@ -1132,6 +1132,7 @@ csiparse(void) | |
{ | |
char *p = csiescseq.buf, *np; | |
long int v; | |
+ int sep = ';'; /* colon or semi-colon, but not both */ | |
csiescseq.narg = 0; | |
if (*p == '?') { | |
@@ -1149,7 +1150,9 @@ csiparse(void) | |
v = -1; | |
csiescseq.arg[csiescseq.narg++] = v; | |
p = np; | |
- if (*p != ';' || csiescseq.narg == ESC_ARG_SIZ) | |
+ if (sep == ';' && *p == ':') | |
+ sep = ':'; /* allow override to colon once */ | |
+ if (*p != sep || csiescseq.narg == ESC_ARG_SIZ) | |
break; | |
p++; | |
} |