diff options
Diffstat (limited to 'bin/lh')
-rwxr-xr-x | bin/lh | 56 |
1 files changed, 42 insertions, 14 deletions
diff --git a/bin/lh b/bin/lh index e662589..4332487 100755 --- a/bin/lh +++ b/bin/lh @@ -1,10 +1,12 @@ #!/bin/sh # lh: the Link Handler -# takes one path or URL as its argument, launches the appropriate program for this. +# takes one path or URL as its argument, launches the appropriate program for it # if $1 isn't provided, spawn $BROWSER and exit. this allows lh to be used as a pseudo-browser. [ -z "$1" ] && exec "$BROWSER" #from pure-sh-bible + +#splits a string by $2 split() { set -f old_ifs=$IFS @@ -14,32 +16,58 @@ split() { IFS=$old_ifs set +f } +#strips from the right end of a string +lstrip() { + printf '%s\n' "${1##$2}" +} + +# redir unwinding +# prints all redirect locations +findredir() { + #note: for loop turns all whitespace into newlines + for line in $(curl -sIL "$1") + do + # catch is used to find the line after location: + if [ -n "$catch" ] + then + # return caught line + echo "$line" + # reset catch variable + unset -- catch + fi + # set catch if the current line is location + if echo "$line"|grep -Fq 'ocation:' + then + catch=1 + fi + done +} # handle redirects. tr removes control characters, so the case statement below works as expected. -URL=$(curl -IL "$1"|grep '^location: '|tail -1|sed 's/location: //'|tr -d '[:cntrl:]') +URL=$(findredir|tail -1|tr -d '[:cntrl:]') + # if there were no redirects, just set URL to the first argument [ -z "$URL" ] && URL="$1" -echo $URL case "$URL" in gemini://*|gopher://*) $TERMINAL -e bombadillo "$URL" ;; - *mkv|*webm|*mp4) - mpv "$URL" >/dev/null 2>&1 & ;; + *.mkv*|*.webm*|*.mp4*) + mpv --no-terminal "$URL" & ;; *youtube.com/watch*|*youtube.com/playlist*|*youtu.be*|*hooktube.com*|*bitchute.com*|*twitch.tv/videos/*|*twitch.tv/*/v/*) - mpv --ytdl "$URL" >/dev/null 2>&1 & ;; + mpv --no-terminal --ytdl "$URL" & ;; *twitch.tv/*) STREAMQUAL="$(split "$(streamlink "$URL"|grep 'Available streams')" ", "|\ grep -E "[0-9]"|\ dmenu -p "choose stream quality for $URL")" streamlink -p mpv $URL $STREAMQUAL >/dev/null 2>&1 & ;; - *png|*jpg|*jpe|*jpeg|*gif) - IMGPATH="/tmp/$(echo "$URL"|sed "s/.*\\///")" - curl -sL "$URL" >"$IMGPATH"&&sxiv -a "$IMGPATH">/dev/null 2>&1 & ;; - *mp3|*m4a|*flac|*aiff|*opus|*ogg|*mp3?source*) - mpv "$URL" >/dev/null 2>&1 & ;; - *epub|*pdf|*djvu) - BOOKPATH="/tmp/$(echo "$URL"|sed 's/.*\///')" + *.png*|*.jpg*|*.jpe*|*.jpeg*|*.gif*) + IMGPATH="/tmp/$(lstrip "$URL" "*/")" + curl -sL "$URL" >"$IMGPATH"&&sxiv -pqa "$IMGPATH" & ;; + *.mp3*|*.m4a*|*.flac*|*.aiff*|*.opus*|*.ogg*|*.mp3?source*) + mpv --no-terminal "$URL"& ;; + *.epub*|*.pdf*|*.djvu*) + BOOKPATH="/tmp/$(lstrip "$URL" "*/")" if [ -n "$READER" ]; then curl -sL "$URL" >"$BOOKPATH"&&$READER "$BOOKPATH">/dev/null 2>&1 & else @@ -47,7 +75,7 @@ case "$URL" in fi ;; *) if [ -f "$URL" ]; then - $TERMINAL -e "${EDITOR:-vi} $URL" + op "$URL" else $BROWSER "$URL" >/dev/null 2>&1 & fi ;; |