scripts: Add nsxiv-rifle script
Opens basically any path, local or remote in nsxiv. Can take multiple paths to open all of them. Additionally, alias whichever version of the image viewer is available on the system as `iv`, using `nsxiv-rifle`, `nsxiv`, `sxiv` in order of preference.
This commit is contained in:
parent
13ec6ed600
commit
aa47068fd0
2 changed files with 86 additions and 0 deletions
75
scripts/.local/bin/nsxiv-rifle
Executable file
75
scripts/.local/bin/nsxiv-rifle
Executable file
|
@ -0,0 +1,75 @@
|
||||||
|
#!/usr/bin/env sh
|
||||||
|
#
|
||||||
|
# Advanced nsxiv url opening script.
|
||||||
|
#
|
||||||
|
# Can open remote urls of individual images, galleries, and local files at the same time.
|
||||||
|
# Uses gallery-dl for remote gallery opening - so if gallery-dl can open it, so can nsxiv.
|
||||||
|
#
|
||||||
|
# Usage: simply add multiple urls/paths as arguments.
|
||||||
|
# nsxiv-rifle "https://linkto.my/image.png" my/local/relative-path.jpg /home/absolute.gif
|
||||||
|
|
||||||
|
cache_dir="$(mktemp -d)"
|
||||||
|
|
||||||
|
die() {
|
||||||
|
[ -n "$1" ] && printf '%s\n' "$*" >&2
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
cleanup() {
|
||||||
|
rm -f -- "$cache_dir"/*
|
||||||
|
}
|
||||||
|
|
||||||
|
from_local() {
|
||||||
|
fpath="$(realpath "$1")"
|
||||||
|
ln -s "$fpath" "$cache_dir"
|
||||||
|
}
|
||||||
|
|
||||||
|
# invokes single image downloading or gallery downloading depending on content type
|
||||||
|
from_remote() {
|
||||||
|
link="$(dereference "$1")"
|
||||||
|
if curl -sLI "$link" | grep -i '^Content-Type:' | grep -q image; then
|
||||||
|
get_single_image "$link"
|
||||||
|
else
|
||||||
|
get_gallery "$link"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
get_gallery() {
|
||||||
|
command -v gallery-dl 1>/dev/null 2>&1 || return
|
||||||
|
gallery-dl -q -D "$cache_dir" "$1"
|
||||||
|
}
|
||||||
|
|
||||||
|
get_single_image() {
|
||||||
|
pwd="$PWD"
|
||||||
|
cd "$cache_dir" && curl -sSLO "$1"
|
||||||
|
cd "$pwd" || exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
# unaliases urls which will not be downloaded correctly otherwise
|
||||||
|
dereference() {
|
||||||
|
# teddit
|
||||||
|
if echo "$1" | grep -qe "https\?://w\?w\?w\?\.\?teddit\.net.\+"; then
|
||||||
|
echo "$1" | sed -e 's|^.*pics/w:null_\(.\+\)$|https://i.redd.it/\1|'
|
||||||
|
else
|
||||||
|
echo "$1"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
### main ###
|
||||||
|
command -v nsxiv 1>/dev/null 2>&1 || die "Requires nsxiv installed"
|
||||||
|
|
||||||
|
[ -z "$1" ] && nsxiv
|
||||||
|
trap cleanup EXIT
|
||||||
|
[ -d "$cache_dir" ] || mkdir -p -- "$cache_dir" || die
|
||||||
|
im_number=1
|
||||||
|
while [ -n "$1" ]; do
|
||||||
|
case "$1" in
|
||||||
|
*://*.*) from_remote "$1" ;;
|
||||||
|
*) from_local "$1" ;;
|
||||||
|
esac
|
||||||
|
im_number=$((im_number + 1))
|
||||||
|
shift
|
||||||
|
done
|
||||||
|
|
||||||
|
[ "$(find "$cache_dir" -type f -print | wc -l)" -ne 0 ] &&
|
||||||
|
nsxiv -p "$cache_dir"
|
|
@ -93,6 +93,17 @@ if exist vifm; then
|
||||||
alias vmm='vifm ${PWD}'
|
alias vmm='vifm ${PWD}'
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# nsxiv image viewer
|
||||||
|
if exist nsxiv; then
|
||||||
|
if exist nsxiv-rifle; then
|
||||||
|
alias iv=nsxiv-rifle
|
||||||
|
else
|
||||||
|
alias iv=nsxiv
|
||||||
|
fi
|
||||||
|
elif exist sxiv; then
|
||||||
|
alias iv=sxiv
|
||||||
|
fi
|
||||||
|
|
||||||
# python
|
# python
|
||||||
if exist ptipython; then
|
if exist ptipython; then
|
||||||
alias py=ptipython
|
alias py=ptipython
|
||||||
|
|
Loading…
Reference in a new issue