st-flexipatch

My st-flexipatch configuration
git clone git://git.ethandl.dev/st-flexipatch
Log | Files | Refs | README | LICENSE

commit 398aeb1cd6c8d1d4c8c5461bc7cc421c2c442302
parent fe065cc366d882cae765a8b664a7be8f212db0c1
Author: Bakkeby <bakkeby@gmail.com>
Date:   Wed, 21 Aug 2024 09:33:57 +0200

undercurl: support semicolons in SGR character attributes ref. #148

Back in May 2024 support for colons in SGR character attributes was
added to allow both colons and semicolons to be used to separate the
subparameters in SGR escape codes.

The undercurl patch only read colons to separate parameters. This
commit allows for semicolons to be used as well when using escape
codes for undercurl.

https://invisible-island.net/xterm/ctlseqs/ctlseqs.html
https://git.suckless.org/st/commit/5dbcca49263be094fc38159c297458ae323ef647.html
https://st.suckless.org/patches/undercurl/

Diffstat:
Mst.c | 19+++++++++++--------
1 file changed, 11 insertions(+), 8 deletions(-)

diff --git a/st.c b/st.c @@ -170,7 +170,7 @@ static void csihandle(void); static void dcshandle(void); #endif // SIXEL_PATCH #if UNDERCURL_PATCH -static void readcolonargs(char **, int, int[][CAR_PER_ARG]); +static void readcolonargs(char **, int, int[][CAR_PER_ARG], int sep); #endif // UNDERCURL_PATCH static void csiparse(void); static void csireset(void); @@ -1483,20 +1483,21 @@ tnewline(int first_col) #if UNDERCURL_PATCH void -readcolonargs(char **p, int cursor, int params[][CAR_PER_ARG]) +readcolonargs(char **p, int cursor, int params[][CAR_PER_ARG], int sep) { int i = 0; + for (; i < CAR_PER_ARG; i++) params[cursor][i] = -1; - if (**p != ':') + if (**p != sep) return; char *np = NULL; i = 0; - while (**p == ':' && i < CAR_PER_ARG) { - while (**p == ':') + while (**p == sep && i < CAR_PER_ARG) { + while (**p == sep) (*p)++; params[cursor][i] = strtol(*p, &np, 10); *p = np; @@ -1528,11 +1529,13 @@ csiparse(void) v = -1; csiescseq.arg[csiescseq.narg++] = v; p = np; - #if UNDERCURL_PATCH - readcolonargs(&p, csiescseq.narg-1, csiescseq.carg); - #endif // UNDERCURL_PATCH if (sep == ';' && *p == ':') sep = ':'; /* allow override to colon once */ + #if UNDERCURL_PATCH + if (v == 4 || v == 58) + readcolonargs(&p, csiescseq.narg-1, csiescseq.carg, sep); + #endif // UNDERCURL_PATCH + if (*p != sep || csiescseq.narg == ESC_ARG_SIZ) break; p++;