summaryrefslogtreecommitdiff
path: root/nsxiv_utils/nsxiv-rifle
blob: ac50568a0f9485559f0ac42d14cd85c51cce1736 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#!/bin/sh

TMPDIR="${TMPDIR:-/tmp}"
tmp="$TMPDIR/nsxiv_rifle_$$"

is_img_extension() {
    grep -iE '\.(jpe?g|png|gif|svg|jxl|webp|tiff|heif|avif|ico|bmp|pam|pbm|ppm|tga|qoi|ff)$'
}

listfiles() {
    find -L "$1" -maxdepth 1 -type f -print |
        is_img_extension | sort -V --ignore-case | 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 -a -g 1200x900 -n "${count%%:*}" "$@" -- < "$tmp"
    else
        # fallback incase file didn't have a valid extension, or we couldn't
        # find it inside the list
        nsxiv -a -g 1200x900 "$@" -- "$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