Introduction
Introduction Statistics Contact Development Disclaimer Help
st-copyurl-20190202-0.8.1.diff - sites - public wiki contents of suckless.org
git clone git://git.suckless.org/sites
Log
Files
Refs
---
st-copyurl-20190202-0.8.1.diff (3010B)
---
1 From be408247f1c1ff8ccf7ab128b126f54d19bd4392 Mon Sep 17 00:00:00 2001
2 From: Michael Buch <[email protected]>
3 Date: Sat, 2 Feb 2019 14:20:52 +0000
4 Subject: [PATCH] Port the copyurl patch to the 0.8.1 st release. Mainly …
5 usage of depracted selcopy
6
7 ---
8 config.def.h | 1 +
9 st.c | 62 ++++++++++++++++++++++++++++++++++++++++++++++++++++
10 st.h | 1 +
11 3 files changed, 64 insertions(+)
12
13 diff --git a/config.def.h b/config.def.h
14 index 82b1b09..cbe923e 100644
15 --- a/config.def.h
16 +++ b/config.def.h
17 @@ -178,6 +178,7 @@ static Shortcut shortcuts[] = {
18 { TERMMOD, XK_Y, selpaste, {.i = …
19 { TERMMOD, XK_Num_Lock, numlock, {.i = …
20 { TERMMOD, XK_I, iso14755, {.i = …
21 + { MODKEY, XK_l, copyurl, {.i = …
22 };
23
24 /*
25 diff --git a/st.c b/st.c
26 index 46c954b..476eb31 100644
27 --- a/st.c
28 +++ b/st.c
29 @@ -2616,3 +2616,65 @@ redraw(void)
30 tfulldirt();
31 draw();
32 }
33 +
34 +/* select and copy the previous url on screen (do nothing if there's no…
35 + * known bug: doesn't handle urls that span multiple lines (wontfix)
36 + * known bug: only finds first url on line (mightfix)
37 + */
38 +void
39 +copyurl(const Arg *arg) {
40 + /* () and [] can appear in urls, but excluding them here will r…
41 + * positives when figuring out where a given url ends.
42 + */
43 + static char URLCHARS[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
44 + "abcdefghijklmnopqrstuvwxyz"
45 + "0123456789-._~:/?#@!$&'*+,;=%";
46 +
47 + int i, row, startrow;
48 + char *linestr = calloc(sizeof(char), term.col+1); /* assume asc…
49 + char *c, *match = NULL;
50 +
51 + row = (sel.ob.x >= 0 && sel.nb.y > 0) ? sel.nb.y-1 : term.bot;
52 + LIMIT(row, term.top, term.bot);
53 + startrow = row;
54 +
55 + /* find the start of the last url before selection */
56 + do {
57 + for (i = 0; i < term.col; ++i) {
58 + if (term.line[row][i].u > 127) /* assume ascii …
59 + continue;
60 + linestr[i] = term.line[row][i].u;
61 + }
62 + linestr[term.col] = '\0';
63 + if ((match = strstr(linestr, "http://"))
64 + || (match = strstr(linestr, "https://")…
65 + break;
66 + if (--row < term.top)
67 + row = term.bot;
68 + } while (row != startrow);
69 +
70 + if (match) {
71 + /* must happen before trim */
72 + selclear();
73 + sel.ob.x = strlen(linestr) - strlen(match);
74 +
75 + /* trim the rest of the line from the url match */
76 + for (c = match; *c != '\0'; ++c)
77 + if (!strchr(URLCHARS, *c)) {
78 + *c = '\0';
79 + break;
80 + }
81 +
82 + /* select and copy */
83 + sel.mode = 1;
84 + sel.type = SEL_REGULAR;
85 + sel.oe.x = sel.ob.x + strlen(match)-1;
86 + sel.ob.y = sel.oe.y = row;
87 + selnormalize();
88 + tsetdirt(sel.nb.y, sel.ne.y);
89 + xsetsel(getsel());
90 + xclipcopy();
91 + }
92 +
93 + free(linestr);
94 +}
95 diff --git a/st.h b/st.h
96 index dac64d8..5a58f8f 100644
97 --- a/st.h
98 +++ b/st.h
99 @@ -85,6 +85,7 @@ void printscreen(const Arg *);
100 void printsel(const Arg *);
101 void sendbreak(const Arg *);
102 void toggleprinter(const Arg *);
103 +void copyurl(const Arg *);
104
105 int tattrset(int);
106 void tnew(int, int);
107 --
108 2.20.1
109
You are viewing proxied material from suckless.org. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.