---- - 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 -_AT_@ -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 -_AT_@ -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" -_AT_@ -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-._~:/?#_AT_!$&'*+,;=%"; -+ -+ 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] = 'Received on Mon Oct 20 2014 - 01:44:23 CEST
This archive was generated by hypermail 2.3.0 : Thu Jun 18 2015 - 17:39:43 CEST