sites

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs

commit 19be37ad9c84bc2ee6ac11059a8413be8e4b4dee
parent dc3e5f1061ca3d437a8acacbb8655a2afd131724
Author: FRIGN <dev@frign.de>
Date:   Mon,  1 Jun 2015 19:47:20 +0200

Update copyurl patches for latest git (st)

and host them locally again. Brandon didn't update it, and in case
he wants to, he should do it here, not intransparently on his server.

Diffstat:
Mst.suckless.org/patches/copyurl.md | 6++++--
Ast.suckless.org/patches/st-git-20141017-copyurl.diff | 84+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Ast.suckless.org/patches/st-git-20150601-copyurl.diff | 85+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
3 files changed, 173 insertions(+), 2 deletions(-)

diff --git a/st.suckless.org/patches/copyurl.md b/st.suckless.org/patches/copyurl.md @@ -10,9 +10,11 @@ the available URLs. Download -------- -* [st-git-copyurl.diff](http://jangler.info/code/st-git-copyurl.diff) +* [st-git-20141017-copyurl.diff](st-git-20141017-copyurl.diff) +* [st-git-20150601-copyurl.diff](st-git-20150601-copyurl.diff) Author ------ - * Brandon Mulcahy - brandon @ jangler . info + * Brandon Mulcahy - brandon@jangler.info + * FRIGN - dev@frign.de (git port) diff --git a/st.suckless.org/patches/st-git-20141017-copyurl.diff b/st.suckless.org/patches/st-git-20141017-copyurl.diff @@ -0,0 +1,84 @@ +diff --git a/config.def.h b/config.def.h +index 1667ed6..be25f2a 100644 +--- a/config.def.h ++++ b/config.def.h +@@ -120,6 +120,7 @@ static Shortcut shortcuts[] = { + { ShiftMask, XK_Insert, selpaste, {.i = 0} }, + { MODKEY|ShiftMask, XK_Insert, clippaste, {.i = 0} }, + { MODKEY, XK_Num_Lock, numlock, {.i = 0} }, ++ { MODKEY, XK_l, copyurl, {.i = 0} }, + }; + + /* +diff --git a/st.c b/st.c +index bcf96e9..38e923e 100644 +--- a/st.c ++++ b/st.c +@@ -323,6 +323,7 @@ static void xzoomreset(const Arg *); + static void printsel(const Arg *); + static void printscreen(const Arg *) ; + static void toggleprinter(const Arg *); ++static void copyurl(const Arg *); + + /* Config.h for applying patches and the configuration. */ + #include "config.h" +@@ -3989,3 +3990,59 @@ run: + return 0; + } + ++/* 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; ++ row = startrow = LIMIT(row, term.top, term.bot); ++ ++ /* find the start of the last url before selection */ ++ do { ++ for (i = 0; i < term.col; ++i) ++ linestr[i] = term.line[row][i].c[0]; ++ 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(NULL); ++ 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); ++ selcopy(); ++ } ++ ++ free(linestr); ++} diff --git a/st.suckless.org/patches/st-git-20150601-copyurl.diff b/st.suckless.org/patches/st-git-20150601-copyurl.diff @@ -0,0 +1,85 @@ +diff --git a/config.def.h b/config.def.h +index bb5596e..34ce569 100644 +--- a/config.def.h ++++ b/config.def.h +@@ -128,6 +128,7 @@ static Shortcut shortcuts[] = { + { MODKEY|ShiftMask, XK_C, clipcopy, {.i = 0} }, + { MODKEY|ShiftMask, XK_V, clippaste, {.i = 0} }, + { MODKEY, XK_Num_Lock, numlock, {.i = 0} }, ++ { MODKEY, XK_l, copyurl, {.i = 0} }, + }; + + /* +diff --git a/st.c b/st.c +index 3460a37..699ec3b 100644 +--- a/st.c ++++ b/st.c +@@ -332,6 +332,7 @@ static void xzoomreset(const Arg *); + static void printsel(const Arg *); + static void printscreen(const Arg *) ; + static void toggleprinter(const Arg *); ++static void copyurl(const Arg *); + + /* Config.h for applying patches and the configuration. */ + #include "config.h" +@@ -4074,3 +4075,60 @@ run: + return 0; + } + ++/* 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; ++ startrow = LIMIT(row, term.top, term.bot); ++ row = startrow; ++ ++ /* find the start of the last url before selection */ ++ do { ++ for (i = 0; i < term.col; ++i) ++ 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(NULL); ++ 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); ++ selcopy(0); ++ } ++ ++ free(linestr); ++}