aboutsummaryrefslogtreecommitdiff
path: root/bin/open
blob: 23c579cf75b211e6f7296a6afb9f15a1cb2dd134 (plain) (blame)
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
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
#!/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