Compare commits

..

2 commits

Author SHA1 Message Date
0aeccdad4f
qutebrowser: Add maps for viewing images in nsxiv
Added two mappings: localleader+i and localleader+I (localleader being ,
in my case) to open single images or galleries in nsxiv.

The maps make use of nsxiv-rifle and mirror the setup for opening video
in mpv with +m/+M where capital letters open the current page and small
ones let you follow a link.
2022-08-06 22:12:06 +02:00
aa47068fd0
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.
2022-08-06 22:12:00 +02:00
3 changed files with 88 additions and 0 deletions

View file

@ -49,6 +49,8 @@ config.bind(leader + "tV", "set tabs.position left")
# bind mpv to play the current page/links, using a single instance which queues the next link passed
config.bind(lleader + "M", "spawn umpv {url}")
config.bind(lleader + "m", "hint links spawn umpv {hint-url}")
config.bind(lleader + "I", "spawn nsxiv-rifle {url}")
config.bind(lleader + "i", "hint --rapid links spawn nsxiv-rifle {hint-url}")
# bind youtube-dl to download the current page/links
config.bind(lleader + "dM", "spawn vidl {url}")

75
scripts/.local/bin/nsxiv-rifle Executable file
View 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"

View file

@ -93,6 +93,17 @@ if exist vifm; then
alias vmm='vifm ${PWD}'
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
if exist ptipython; then
alias py=ptipython