aboutsummaryrefslogtreecommitdiff
#!/bin/sh
set -eu

usage() {
	cat <<-'EOF'
		Usage:
		  open FILE...
		  open -h
	EOF
}

help() {
	cat <<-'EOF'


		Options:
		  -h, --help    show this message

		  FILE          path to file to be opened


		Wrapper for xdg-open(1).


		Examples:

		  Open an HTML file on the current $BROWSER:

		    $ open index.html


		  Open multiple PDF files (with zathura):

		    $ open *.pdf
	EOF
}


for flag in "$@"; do
	case "$flag" in
		(--)
			break
			;;
		(--help)
			usage
			help
			exit
			;;
		(*)
			;;
	esac
done

while getopts 'h' flag; do
	case "$flag" in
		(h)
			usage
			help
			exit
			;;
		(*)
			usage >&2
			exit 2
			;;
	esac
done
shift $((OPTIND - 1))

if [ -z "${1:-}" ]; then
	usage >&2
	exit 2
fi

for f in "$@"; do
	case "$f" in
		*.ico|*.jpg|*.jpeg|*.png)
			feh "$f"
			;;
		https://www.youtube.com/watch*)
			vlc "$f" 1>&2 2>/dev/null &
			;;
		*.flac|*.ogg|*.mkv|*.avi|*.mp4)
			vlc "$f" 1>&2 2>/dev/null &
			;;
		http*|*.svg|*.html)
			"$BROWSER" "$f"
			;;
		gopher://*)
			amfora "$f"
			;;
		gemini://*)
			telescope "$f"
			;;
		*.pdf|*.djvu|*.ps|*.epub)
			zathura "$f" 1>&2 2>/dev/null &
			;;
		*.txt)
			less "$f"
			;;
		*.midi)
			timidity "$f"
			;;
		mailto:*)
			alot compose "$f"
			;;
		(*)
			DIR="$(cd -- "$(dirname -- "$0")"; pwd)"
			CMD="$(without-env PATH "$DIR" -- command -v xdg-open)"
			"$CMD" "$f"
			;;
	esac
done