#!/usr/bin/env bash 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%/*}" \( ! -path "${1%/*}" -prune \) -type f -print | is_img_extension | sort | tee "$tmp" } open_img () { # Only go through listfiles() if the file has a valid img extension if echo "$1" | is_img_extension >/dev/null 2>&1; then trap 'rm -f $tmp' EXIT count="$(listfiles "$1" | grep -nF "$1")" fi if [ -n "$count" ]; then nsxiv -o -i -a -n "${count%%:*}" -- < "$tmp" else # Fallback in case the file didn't have a valid extension, or we # couldn't find it inside the list nsxiv -- "$@" fi } [ "$1" = '--' ] && shift case "$1" in "") echo "Usage: ${0##*/} PICTURES" >&2; exit 1 ;; /*) open_img "$1" ;; "~"/*) open_img "$HOME/${1#"~"/}" ;; *) open_img "$PWD/$1" ;; esac