sites

public wiki contents of suckless.org
git clone git://git.suckless.org/sites
Log | Files | Refs

commit a7672e2fbd353fbe1423e503a736d65cbc853c81
parent 41bfb65da09aa81d17f3fa66db04348322975f0e
Author: Ashish Kumar Yadav <ashishkumar.yadav@students.iiserpune.ac.in>
Date:   Wed,  4 Aug 2021 18:31:38 +0530

[st][patch][title_parsing_fix] Added patch to fix title parsing

Diffstat:
Ast.suckless.org/patches/title_parsing_fix/index.md | 18++++++++++++++++++
Ast.suckless.org/patches/title_parsing_fix/st-title_parsing_fix-0.8.4.diff | 107+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 125 insertions(+), 0 deletions(-)

diff --git a/st.suckless.org/patches/title_parsing_fix/index.md b/st.suckless.org/patches/title_parsing_fix/index.md @@ -0,0 +1,18 @@ +title parsing fix +================= + +Description +----------- + +Window titles in st get truncated after the first ';' character. I don't know +whether this is the expected behaviour but all terminals I have come across +do not truncate (for instance xterm, termite and alacritty). This patch "fixes" +that behaviour. + +Download +-------- +* [st-title\_parsing\_fix-0.8.4.diff](st-title_parsing_fix-0.8.4.diff) + +Authors +------- +* Ashish Kumar Yadav - <ashishkumar.yadav@students.iiserpune.ac.in> diff --git a/st.suckless.org/patches/title_parsing_fix/st-title_parsing_fix-0.8.4.diff b/st.suckless.org/patches/title_parsing_fix/st-title_parsing_fix-0.8.4.diff @@ -0,0 +1,107 @@ +From 6585da1be120d86316e4a9d620e9dfdfb3755822 Mon Sep 17 00:00:00 2001 +From: Ashish Kumar Yadav <ashishkumar.yadav@students.iiserpune.ac.in> +Date: Wed, 4 Aug 2021 18:21:01 +0530 +Subject: [PATCH] Fixes title parsing + +In st, titles get truncated after the first ';' character, this patch +fixes that. +--- + st.c | 26 ++++++++++++++------------ + 1 file changed, 14 insertions(+), 12 deletions(-) + +diff --git a/st.c b/st.c +index 76b7e0d..8c68218 100644 +--- a/st.c ++++ b/st.c +@@ -42,6 +42,8 @@ + #define ISCONTROLC1(c) (BETWEEN(c, 0x80, 0x9f)) + #define ISCONTROL(c) (ISCONTROLC0(c) || ISCONTROLC1(c)) + #define ISDELIM(u) (u && wcschr(worddelimiters, u)) ++#define STRESCARGREST(n) ((n) == 0 ? strescseq.buf : strescseq.argp[(n)-1] + 1) ++#define STRESCARGJUST(n) (*(strescseq.argp[n]) = '\0', STRESCARGREST(n)) + + enum term_mode { + MODE_WRAP = 1 << 0, +@@ -148,7 +150,7 @@ typedef struct { + char *buf; /* allocated raw string */ + size_t siz; /* allocation size */ + size_t len; /* raw string length */ +- char *args[STR_ARG_SIZ]; ++ char *argp[STR_ARG_SIZ]; /* pointers to the end of nth argument */ + int narg; /* nb of args */ + } STREscape; + +@@ -1846,21 +1848,22 @@ strhandle(void) + int j, narg, par; + + term.esc &= ~(ESC_STR_END|ESC_STR); +- strparse(); +- par = (narg = strescseq.narg) ? atoi(strescseq.args[0]) : 0; ++ strescseq.buf[strescseq.len] = '\0'; + + switch (strescseq.type) { + case ']': /* OSC -- Operating System Command */ ++ strparse(); ++ par = (narg = strescseq.narg) ? atoi(STRESCARGJUST(0)) : 0; + switch (par) { + case 0: + case 1: + case 2: + if (narg > 1) +- xsettitle(strescseq.args[1]); ++ xsettitle(STRESCARGREST(1)); + return; + case 52: + if (narg > 2 && allowwindowops) { +- dec = base64dec(strescseq.args[2]); ++ dec = base64dec(STRESCARGJUST(2)); + if (dec) { + xsetsel(dec); + xclipcopy(); +@@ -1872,10 +1875,10 @@ strhandle(void) + case 4: /* color set */ + if (narg < 3) + break; +- p = strescseq.args[2]; ++ p = STRESCARGJUST(2); + /* FALLTHROUGH */ + case 104: /* color reset, here p = NULL */ +- j = (narg > 1) ? atoi(strescseq.args[1]) : -1; ++ j = (narg > 1) ? atoi(STRESCARGJUST(1)) : -1; + if (xsetcolorname(j, p)) { + if (par == 104 && narg <= 1) + return; /* color reset without parameter */ +@@ -1892,7 +1895,7 @@ strhandle(void) + } + break; + case 'k': /* old title set compatibility */ +- xsettitle(strescseq.args[0]); ++ xsettitle(strescseq.buf); + return; + case 'P': /* DCS -- Device Control String */ + case '_': /* APC -- Application Program Command */ +@@ -1911,18 +1914,17 @@ strparse(void) + char *p = strescseq.buf; + + strescseq.narg = 0; +- strescseq.buf[strescseq.len] = '\0'; + + if (*p == '\0') + return; + + while (strescseq.narg < STR_ARG_SIZ) { +- strescseq.args[strescseq.narg++] = p; + while ((c = *p) != ';' && c != '\0') +- ++p; ++ p++; ++ strescseq.argp[strescseq.narg++] = p; + if (c == '\0') + return; +- *p++ = '\0'; ++ p++; + } + } + +-- +2.32.0 +