The hackers_AT_ mailinglist is intended for upstream patches.
Anyone can modify and push to the wiki repository.
On Sun, Feb 15, 2026 at 02:31:00PM -0300, . wrote:
> (rewritten my previous email in proper format)
>
> Hello. The original st-externalpipe-eternal patch (https://st.suckless.org/patches/externalpipe/st-externalpipe-eternal-0.8.3.diff), which allows the piping of the entire terminal buffer, does not work with the st-scrollback-ringbuffer patch (https://st.suckless.org/patches/scrollback/st-scrollback-ringbuffer-0.9.2.diff). I made a completely new patch that allows the entire screen to be piped while using the scrollback ringbuffer patch. Please note that the patch uses term.line and not TLINE because I expect this patch to be applied immediately after the externalpipe patch (since externalpipe is useless without eternal) and thus want the patching to be seamless. Please place this patch in the externalpipe page (https://st.suckless.org/patches/externalpipe/). Thank you very much.
>
>
> diff -up a/st.c b/st.c
> --- a/st.c 2026-02-12 14:56:55.248311919 -0300
> +++ b/st.c 2026-02-12 14:36:36.827197795 -0300
> _AT_@ -2513,21 +2513,21 @@ externalpipe(const Arg *arg)
> /* ignore sigpipe for now, in case child exists early */
> oldsigpipe = signal(SIGPIPE, SIG_IGN);
> newline = 0;
> - for (n = 0; n < term.row; n++) {
> - bp = term.line[n];
> - lastpos = MIN(tlinelen(n) + 1, term.col) - 1;
> - if (lastpos < 0)
> - break;
> - end = &bp[lastpos + 1];
> - for (; bp < end; ++bp)
> - if (xwrite(to[1], buf, utf8encode(bp->u, buf)) < 0)
> - break;
> - if ((newline = term.line[n][lastpos].mode & ATTR_WRAP))
> - continue;
> - if (xwrite(to[1], "\n", 1) < 0)
> - break;
> - newline = 0;
> - }
> + int histlen = term.screen[0].cur < term.screen[0].size
> + ? term.screen[0].cur
> + : term.screen[0].size;
> + int total = histlen + term.row;
> + for (int n = -histlen; n < term.row; n++) {
> + Line line = TLINE(n);
> + int len = tlinelen(n);
> + for (int i = 0; i < len; i++) {
> + char buf[UTF_SIZ];
> + if (xwrite(to[1], buf, utf8encode(line[i].u, buf)) < 0)
> + break;
> + }
> + if (len > 0 && !(line[len - 1].mode & ATTR_WRAP))
> + xwrite(to[1], "\n", 1);
> + }
> if (newline)
> (void)xwrite(to[1], "\n", 1);
> close(to[1]);
>
>
>
--
Kind regards,
Hiltjo
Received on Sun Feb 15 2026 - 20:17:00 CET