chiark / gitweb /
el/dot-emacs.el (mdw-fontify-rust): Fix integer literal syntax.
[profile] / bin / media-keys
1 #! /usr/bin/zsh -e
2
3 bail () { echo >&2 "$*"; exit 2; }
4
5 disorder=(disorder)
6
7 get-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
30 alsa_mixer=Master,0
31 op-volume-up () { amixer sset $alsa_mixer 5%+ >/dev/null; }
32 op-volume-down () { amixer sset $alsa_mixer 5%- >/dev/null; }
33
34 op-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
42   read -p k _
43   case $k in id) ;; *) bail "unexpected second-line token \`$k'" ;; esac
44   read -p k _
45   case $k in played) ;; *) bail "unexpected third-line token \`$k'" ;; esac
46   read -pA t
47   case $t[-1] in started | ok) st="" ;; paused) st=" (paused)" ;; esac
48   kill $kid
49
50   artist=$(disorder part $track display artist)
51   album=$(disorder part $track display album)
52   title=$(disorder part $track display title)
53   case $artist in [A-Z]) artist=$album album= ;; esac
54   echo "$artist: ‘$title’${album+, from ‘$album’}"
55 }
56
57 op-scratch () { disorder scratch; }
58 op-enable/disable () {
59   get-disorder-state
60   case $playp in
61     t) disorder disable ;;
62     nil) disorder enable ;;
63   esac
64 }
65 op-play/pause () {
66   get-disorder-state
67   case $playp,$pausep in
68     nil,t) disorder enable; disorder resume ;;
69     nil,nil) disorder enable ;;
70     t,t) disorder resume ;;
71     t,nil) disorder pause ;;
72   esac
73 }
74
75 if [[ -e $HOME/etc/media-keys.local ]]; then
76   . $HOME/etc/media-keys.local
77 fi
78
79 case $# in 0) echo >&2 "usage: $0 OP"; exit 2 ;; esac
80 op=$1; shift
81 case $(whence -w op-$op) in
82   "op-$op: function") ;;
83   *) echo >&2 "$0: unknown operation \`$op'"; exit 2 ;;
84 esac
85 op-$op "$@"