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++;