From 9d718daa11aed794baee85d0aa431e0a846f0974 Mon Sep 17 00:00:00 2001 From: zachir Date: Mon, 20 Feb 2023 01:58:46 -0600 Subject: apply copyurl-multiline patch --- patches/st-copyurl-20190202-0.8.1.diff | 109 --------------------------------- 1 file changed, 109 deletions(-) delete mode 100644 patches/st-copyurl-20190202-0.8.1.diff (limited to 'patches/st-copyurl-20190202-0.8.1.diff') diff --git a/patches/st-copyurl-20190202-0.8.1.diff b/patches/st-copyurl-20190202-0.8.1.diff deleted file mode 100644 index 8d6782b..0000000 --- a/patches/st-copyurl-20190202-0.8.1.diff +++ /dev/null @@ -1,109 +0,0 @@ -From be408247f1c1ff8ccf7ab128b126f54d19bd4392 Mon Sep 17 00:00:00 2001 -From: Michael Buch -Date: Sat, 2 Feb 2019 14:20:52 +0000 -Subject: [PATCH] Port the copyurl patch to the 0.8.1 st release. Mainly fix - usage of depracted selcopy - ---- - config.def.h | 1 + - st.c | 62 ++++++++++++++++++++++++++++++++++++++++++++++++++++ - st.h | 1 + - 3 files changed, 64 insertions(+) - -diff --git a/config.def.h b/config.def.h -index 82b1b09..cbe923e 100644 ---- a/config.def.h -+++ b/config.def.h -@@ -178,6 +178,7 @@ static Shortcut shortcuts[] = { - { TERMMOD, XK_Y, selpaste, {.i = 0} }, - { TERMMOD, XK_Num_Lock, numlock, {.i = 0} }, - { TERMMOD, XK_I, iso14755, {.i = 0} }, -+ { MODKEY, XK_l, copyurl, {.i = 0} }, - }; - - /* -diff --git a/st.c b/st.c -index 46c954b..476eb31 100644 ---- a/st.c -+++ b/st.c -@@ -2616,3 +2616,65 @@ redraw(void) - tfulldirt(); - draw(); - } -+ -+/* select and copy the previous url on screen (do nothing if there's no url). -+ * known bug: doesn't handle urls that span multiple lines (wontfix) -+ * known bug: only finds first url on line (mightfix) -+ */ -+void -+copyurl(const Arg *arg) { -+ /* () and [] can appear in urls, but excluding them here will reduce false -+ * positives when figuring out where a given url ends. -+ */ -+ static char URLCHARS[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ" -+ "abcdefghijklmnopqrstuvwxyz" -+ "0123456789-._~:/?#@!$&'*+,;=%"; -+ -+ int i, row, startrow; -+ char *linestr = calloc(sizeof(char), term.col+1); /* assume ascii */ -+ char *c, *match = NULL; -+ -+ row = (sel.ob.x >= 0 && sel.nb.y > 0) ? sel.nb.y-1 : term.bot; -+ LIMIT(row, term.top, term.bot); -+ startrow = row; -+ -+ /* find the start of the last url before selection */ -+ do { -+ for (i = 0; i < term.col; ++i) { -+ if (term.line[row][i].u > 127) /* assume ascii */ -+ continue; -+ linestr[i] = term.line[row][i].u; -+ } -+ linestr[term.col] = '\0'; -+ if ((match = strstr(linestr, "http://")) -+ || (match = strstr(linestr, "https://"))) -+ break; -+ if (--row < term.top) -+ row = term.bot; -+ } while (row != startrow); -+ -+ if (match) { -+ /* must happen before trim */ -+ selclear(); -+ sel.ob.x = strlen(linestr) - strlen(match); -+ -+ /* trim the rest of the line from the url match */ -+ for (c = match; *c != '\0'; ++c) -+ if (!strchr(URLCHARS, *c)) { -+ *c = '\0'; -+ break; -+ } -+ -+ /* select and copy */ -+ sel.mode = 1; -+ sel.type = SEL_REGULAR; -+ sel.oe.x = sel.ob.x + strlen(match)-1; -+ sel.ob.y = sel.oe.y = row; -+ selnormalize(); -+ tsetdirt(sel.nb.y, sel.ne.y); -+ xsetsel(getsel()); -+ xclipcopy(); -+ } -+ -+ free(linestr); -+} -diff --git a/st.h b/st.h -index dac64d8..5a58f8f 100644 ---- a/st.h -+++ b/st.h -@@ -85,6 +85,7 @@ void printscreen(const Arg *); - void printsel(const Arg *); - void sendbreak(const Arg *); - void toggleprinter(const Arg *); -+void copyurl(const Arg *); - - int tattrset(int); - void tnew(int, int); --- -2.20.1 - -- cgit v1.2.3