chiark / gitweb /
bin/run-with-shell-env: Preserve the original argument list.
[profile] / bin / media-keys
CommitLineData
5078756e
MW
1#! /usr/bin/zsh -e
2
3bail () { echo >&2 "$*"; exit 2; }
4
5disorder=(disorder)
6
7get-disorder-state () {
8 coproc stdbuf -oL $disorder log; kid=$!
9
10 while read -Ap i; do
11 case $i[2] in
12 state)
13 case $i[3] in
14 enable_random) randp=t ;;
15 disable_random) randp=nil ;;
16 enable_play) playp=t ;;
17 disable_play) playp=nil ;;
18 resume) pausep=nil ;;
19 pause) pausep=t ;;
20 esac
21 ;;
22 *)
23 break
24 ;;
25 esac
26 done
27 kill $kid
28}
29
30alsa_mixer=Master,0
31op-volume-up () { amixer sset $alsa_mixer 5%+ >/dev/null; }
32op-volume-down () { amixer sset $alsa_mixer 5%- >/dev/null; }
33
34op-now-playing () {
35 coproc $disorder playing; kid=$!
36 read -p k track
37 case $k in
38 nothing) echo "Not playing."; return ;;
39 track) ;;
40 *) bail "unexpected first-line token \`$k'" ;;
41 esac
295a8377 42 unset who
5078756e
MW
43 read -p k _
44 case $k in id) ;; *) bail "unexpected second-line token \`$k'" ;; esac
295a8377
MW
45 read -p k _ name _
46 case $k in picked) who=$name; read -p k _ ;; esac
5078756e
MW
47 case $k in played) ;; *) bail "unexpected third-line token \`$k'" ;; esac
48 read -pA t
88ee8e2a 49 case $t[-1] in started | ok) st="" ;; paused) st=" (paused)" ;; esac
8142c849 50 kill $kid >/dev/null 2>&1 || :
5078756e
MW
51
52 artist=$(disorder part $track display artist)
53 album=$(disorder part $track display album)
54 title=$(disorder part $track display title)
55 case $artist in [A-Z]) artist=$album album= ;; esac
295a8377
MW
56 echo "$artist: ‘$title’${album+, from ‘$album’}${who+
57(chosen by $who)}"
5078756e
MW
58}
59
60op-scratch () { disorder scratch; }
61op-enable/disable () {
62 get-disorder-state
63 case $playp in
64 t) disorder disable ;;
65 nil) disorder enable ;;
66 esac
67}
68op-play/pause () {
69 get-disorder-state
70 case $playp,$pausep in
71 nil,t) disorder enable; disorder resume ;;
72 nil,nil) disorder enable ;;
73 t,t) disorder resume ;;
74 t,nil) disorder pause ;;
75 esac
76}
77
78if [[ -e $HOME/etc/media-keys.local ]]; then
79 . $HOME/etc/media-keys.local
80fi
81
82case $# in 0) echo >&2 "usage: $0 OP"; exit 2 ;; esac
83op=$1; shift
84case $(whence -w op-$op) in
85 "op-$op: function") ;;
86 *) echo >&2 "$0: unknown operation \`$op'"; exit 2 ;;
87esac
88op-$op "$@"