#!/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