diff options
author | Hiltjo Posthuma <hiltjo@codemadness.org> | 2024-05-01 20:45:39 +0200 |
---|---|---|
committer | Hiltjo Posthuma <hiltjo@codemadness.org> | 2024-05-01 20:45:39 +0200 |
commit | 5dbcca49263be094fc38159c297458ae323ef647 (patch) | |
tree | a96e2e2c91be152faaba7cf54698c8104d799b67 | |
parent | d63b9eb90245926b531bd54b1d591adb96613e70 (diff) |
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).
-rw-r--r-- | st.c | 5 |
1 files changed, 4 insertions, 1 deletions
@@ -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++; } |