From 398aeb1cd6c8d1d4c8c5461bc7cc421c2c442302 Mon Sep 17 00:00:00 2001 From: Bakkeby Date: Wed, 21 Aug 2024 09:33:57 +0200 Subject: [PATCH] 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/ --- st.c | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/st.c b/st.c index 7b25227..0271109 100644 --- 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++;