commit 5dbcca49263be094fc38159c297458ae323ef647
Author:     Hiltjo Posthuma <hil...@codemadness.org>
AuthorDate: Wed May 1 20:45:39 2024 +0200
Commit:     Hiltjo Posthuma <hil...@codemadness.org>
CommitDate: Wed May 1 20:45:39 2024 +0200

    support colons in SGR character attributes
    
    Patch by Mikhail Kot <t...@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).

diff --git a/st.c b/st.c
index b9f66e7..57c6e96 100644
--- 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++;
        }

Reply via email to