sites

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

commit 962c164647e3ed8e12e151e0a2c79763f39b932d
parent bdc9c8e7c85ac7f19ca19fde0fc5e54c8532a36d
Author: Brandon Mulcahy <brandon@jangler.info>
Date:   Sun, 19 Oct 2014 19:44:17 -0400

Move copyurl diff off-site

Diffstat:
Mst.suckless.org/patches/copyurl.md | 2+-
Dst.suckless.org/patches/st-git-copyurl.diff | 98-------------------------------------------------------------------------------
2 files changed, 1 insertion(+), 99 deletions(-)

diff --git a/st.suckless.org/patches/copyurl.md b/st.suckless.org/patches/copyurl.md @@ -10,7 +10,7 @@ the available URLs. Download -------- -* [st-git-copyurl.diff](st-git-copyurl.diff) +* [st-git-copyurl.diff](http://jangler.info/code/st-git-copyurl.diff) Author ------ diff --git a/st.suckless.org/patches/st-git-copyurl.diff b/st.suckless.org/patches/st-git-copyurl.diff @@ -1,98 +0,0 @@ -From 3aa97780747496b08ec2057266a0a030737cf153 Mon Sep 17 00:00:00 2001 -From: Brandon Mulcahy <brandon@jangler.info> -Date: Fri, 17 Oct 2014 00:27:46 -0400 -Subject: [PATCH] copyurl patch - -Select and copy the last URL in the display. Multiple invocations cycle through -the available URLs. ---- - config.def.h | 1 + - st.c | 56 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ - 2 files changed, 57 insertions(+) - -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..50065e9 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,58 @@ 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 = startrow = (sel.ob.x >= 0 && sel.nb.y > 0) ? sel.nb.y-1 : term.row-1; -+ -+ /* 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 < 0) -+ row = term.row-1; -+ } 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); -+} --- -2.1.2 -