major springcleaning
This commit is contained in:
51
.local/bin/tools/nsxiv-rifle
Executable file
51
.local/bin/tools/nsxiv-rifle
Executable file
@ -0,0 +1,51 @@
|
||||
#!/bin/sh
|
||||
|
||||
TMPDIR="${TMPDIR:-/tmp}"
|
||||
tmp="$TMPDIR/nsxiv_rifle_$$"
|
||||
|
||||
is_img_extension() {
|
||||
grep -iE '\.(jpe?g|png|gif|svg|webp|tiff|heif|avif|ico|bmp)$'
|
||||
}
|
||||
|
||||
listfiles() {
|
||||
find -L "$1" -maxdepth 1 -type f -print |
|
||||
is_img_extension | sort | tee "$tmp"
|
||||
}
|
||||
|
||||
open_img() {
|
||||
file="$1"; shift;
|
||||
# only go through listfiles() if the file has a valid img extension
|
||||
if echo "$file" | is_img_extension >/dev/null 2>&1; then
|
||||
trap 'rm -f $tmp' EXIT
|
||||
count="$(listfiles "///${file%/*}" | grep -nF "$file")"
|
||||
fi
|
||||
if [ -n "$count" ]; then
|
||||
nsxiv -i -n "${count%%:*}" "$@" -- < "$tmp"
|
||||
else
|
||||
# fallback incase file didn't have a valid extension, or we couldn't
|
||||
# find it inside the list
|
||||
nsxiv "$@" -- "$file"
|
||||
fi
|
||||
}
|
||||
|
||||
uri2path() {
|
||||
python3 - "$@" <<'___HEREDOC'
|
||||
from urllib.parse import unquote, urlparse
|
||||
from sys import argv
|
||||
for arg in argv[1:]:
|
||||
print(unquote(urlparse(arg).path))
|
||||
___HEREDOC
|
||||
}
|
||||
|
||||
[ "$1" = '--' ] && shift
|
||||
case "$1" in
|
||||
"") echo "Usage: ${0##*/} PICTURES" >&2; exit 1 ;;
|
||||
/*) open_img "$1" ;;
|
||||
"~"/*) open_img "$HOME/${1#"~"/}" ;;
|
||||
file:///*) open_img "$(uri2path "$1")" ;;
|
||||
trash:///*)
|
||||
trash_dir="${XDG_DATA_HOME:-$HOME/.local/share}/Trash/files"
|
||||
open_img "${trash_dir}$(uri2path "$1")" -N "nsxiv_trash"
|
||||
;;
|
||||
*) open_img "$PWD/$1" ;;
|
||||
esac
|
Reference in New Issue
Block a user