summaryrefslogtreecommitdiff
path: root/surf-menu
diff options
context:
space:
mode:
Diffstat (limited to 'surf-menu')
-rwxr-xr-xsurf-menu60
1 files changed, 60 insertions, 0 deletions
diff --git a/surf-menu b/surf-menu
new file mode 100755
index 0000000..b2e0111
--- /dev/null
+++ b/surf-menu
@@ -0,0 +1,60 @@
+#!/bin/sh
+set -e
+
+BOOKMARDS=~/notes/bookmarks.md
+
+run() {
+ echo "Run $1"
+ echo "$1" | grep -qE '^~?/' || true
+ echo $?
+ if echo "$1" | grep -qE '^\?'; then # We do search on duckduckgo
+
+ surf "https://duckduckgo.com/?q=${L#?}&t=surf&kk=-1&ia=web" &
+
+ elif echo "$1" | grep -qE '^~?/'; then # This is local path
+
+ surf "${1/#\~/$HOME}" &
+
+ elif echo "$1" | grep -qE '^[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+'; then # This ipv4 address
+
+ surf "$1" &
+
+ else # We follow address
+
+ LPROTOCOL="$(echo "$1" | sed -n 's#^\([^:]*\)://.*#\1#p')"
+ LHOST="$(echo "$1" | sed -n 's#^[^:]*://##;s#^\([^/]\+\)/\?.*#\1#p')"
+ LPATH="$(echo "$1" | sed 's#^[^:]*://##;s#^[^/]\+/\?##')"
+
+ if ! getent hosts "$LHOST" >/dev/null; then
+ if getent hosts "$LHOST.cz" >/dev/null; then
+ LHOST="$LHOST.cz"
+ elif getent hosts "$LHOST.org" >/dev/null; then
+ LHOST="$LHOST.org"
+ elif getent hosts "$LHOST.com" >/dev/null; then
+ LHOST="$LHOST.com"
+ fi
+ # TODO what to do when we can't expand it?
+ fi
+ # Decide on protocol (if connection to 443 is not possible then use http otherwise https)
+ if [ -z "$LPROTOCOL" ]; then # We already have protocol (given explicitly)
+ if nc -z -w1 "$LHOST" 443 2>/dev/null; then
+ LPROTOCOL="https"
+ else
+ LPROTOCOL="http"
+ fi
+ fi
+
+ surf "$LPROTOCOL://$LHOST/$LPATH" &
+
+ fi
+}
+
+if [ -n "$1" ]; then
+ run "$1"
+ exit
+else
+ # Note: Bookmarks starts with '* '
+ sed -n 's/\* //p' "$BOOKMARDS" | dmenu -p 'surf' | while read L; do
+ run "$L"
+ done
+fi