Skip to content

Commit

Permalink
undercurl: support semicolons in SGR character attributes ref. #148
Browse files Browse the repository at this point in the history
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/
  • Loading branch information
bakkeby committed Oct 1, 2024
1 parent fe065cc commit 398aeb1
Showing 1 changed file with 11 additions and 8 deletions.
19 changes: 11 additions & 8 deletions st.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down Expand Up @@ -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;
Expand Down Expand Up @@ -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++;
Expand Down

0 comments on commit 398aeb1

Please sign in to comment.