From 7e7809ed5442d04707ba3dc771ba03ebef3528b5 Mon Sep 17 00:00:00 2001 From: Mateja Date: Sat, 10 Apr 2021 22:48:43 +0200 Subject: Add `st-urlhandler`. From: https://github.com/LukeSmithxyz/st --- Makefile | 3 +++ README.md | 2 +- config.def.h | 5 +++++ st-urlhandler | 19 +++++++++++++++++++ 4 files changed, 28 insertions(+), 1 deletion(-) create mode 100755 st-urlhandler diff --git a/Makefile b/Makefile index be32361..7075407 100644 --- a/Makefile +++ b/Makefile @@ -45,6 +45,8 @@ install: st mkdir -p $(DESTDIR)$(PREFIX)/bin cp -f st $(DESTDIR)$(PREFIX)/bin chmod 755 $(DESTDIR)$(PREFIX)/bin/st + cp -f st-urlhandler $(DESTDIR)$(PREFIX)/bin + chmod 755 $(DESTDIR)$(PREFIX)/bin mkdir -p $(DESTDIR)$(MANPREFIX)/man1 sed "s/VERSION/$(VERSION)/g" < st.1 > $(DESTDIR)$(MANPREFIX)/man1/st.1 chmod 644 $(DESTDIR)$(MANPREFIX)/man1/st.1 @@ -55,6 +57,7 @@ install: st uninstall: rm -f $(DESTDIR)$(PREFIX)/bin/st + rm -f $(DESTDIR)$(PREFIX)/bin/st-urlhandler rm -f $(DESTDIR)$(MANPREFIX)/man1/st.1 rm -f $(DESTDIR)$(PREFIX)/share/applications/st.desktop diff --git a/README.md b/README.md index 9510ef5..3e80b22 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@ This is my fork of [st][stterm] terminal with following patches applied: - desktopentry - scrollback (with mouse) - clipboard -- externalpipe +- externalpipe (for URLs) ## Dependencies: diff --git a/config.def.h b/config.def.h index 3eaba27..5010e7f 100644 --- a/config.def.h +++ b/config.def.h @@ -202,6 +202,9 @@ static MouseShortcut mshortcuts[] = { #define MODKEY Mod1Mask #define TERMMOD (ControlMask|ShiftMask) +static char *openurlcmd[] = { "/bin/sh", "-c", "st-urlhandler -o", "externalpipe", NULL }; +static char *copyurlcmd[] = { "/bin/sh", "-c", "st-urlhandler -c", "externalpipe", NULL }; + static Shortcut shortcuts[] = { /* mask keysym function argument */ { XK_ANY_MOD, XK_Break, sendbreak, {.i = 0} }, @@ -219,6 +222,8 @@ static Shortcut shortcuts[] = { { TERMMOD, XK_Return, newterm, {.i = 0} }, { ShiftMask, XK_Page_Up, kscrollup, {.i = -1} }, { ShiftMask, XK_Page_Down, kscrolldown, {.i = -1} }, + { MODKEY, XK_l, externalpipe, {.v = openurlcmd } }, + { MODKEY, XK_y, externalpipe, {.v = copyurlcmd } }, }; /* diff --git a/st-urlhandler b/st-urlhandler new file mode 100755 index 0000000..e2a62f4 --- /dev/null +++ b/st-urlhandler @@ -0,0 +1,19 @@ +#!/bin/sh + +urlregex="(((http|https|gopher|gemini|ftp|ftps|git)://|www\\.)[a-zA-Z0-9.]*[:]?[a-zA-Z0-9./@$&%?$\#=_~-]*)|((magnet:\\?xt=urn:btih:)[a-zA-Z0-9]*)" + +urls="$(sed 's/.*│//g' | tr -d '\n' | # First remove linebreaks and mutt sidebars: + grep -aEo "$urlregex" | # grep only urls as defined above. + uniq | # Ignore neighboring duplicates. + sed "s/\(\.\|,\|;\|\!\\|\?\)$//; + s/^www./http:\/\/www\./")" # xdg-open will not detect url without http + +[ -z "$urls" ] && exit 1 + +while getopts "hoc" o; do case "${o}" in + h) printf "Optional arguments for custom use:\\n -c: copy\\n -o: xdg-open\\n -h: Show this message\\n" && exit 1 ;; + o) chosen="$(echo "$urls" | dmenu -i -p 'Follow which url?' -l 10)" + setsid xdg-open "$chosen" >/dev/null 2>&1 & ;; + c) echo "$urls" | dmenu -i -p 'Copy which url?' -l 10 | tr -d '\n' | xclip -selection clipboard ;; + *) printf "Invalid option: -%s\\n" "$OPTARG" && exit 1 ;; +esac done -- cgit v1.2.3