support colons in SGR character attributes - st - simple terminal
 (HTM) git clone git://git.suckless.org/st
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit 5dbcca49263be094fc38159c297458ae323ef647
 (DIR) parent d63b9eb90245926b531bd54b1d591adb96613e70
 (HTM) Author: Hiltjo Posthuma <hiltjo@codemadness.org>
       Date:   Wed,  1 May 2024 20:45:39 +0200
       
       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).
       
       Diffstat:
         M st.c                                |       5 ++++-
       
       1 file changed, 4 insertions(+), 1 deletion(-)
       ---
 (DIR) 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++;
                }