--- /dev/null
+#! /usr/bin/zsh -e
+
+bail () { echo >&2 "$*"; exit 2; }
+
+disorder=(disorder)
+
+get-disorder-state () {
+ coproc stdbuf -oL $disorder log; kid=$!
+
+ while read -Ap i; do
+ case $i[2] in
+ state)
+ case $i[3] in
+ enable_random) randp=t ;;
+ disable_random) randp=nil ;;
+ enable_play) playp=t ;;
+ disable_play) playp=nil ;;
+ resume) pausep=nil ;;
+ pause) pausep=t ;;
+ esac
+ ;;
+ *)
+ break
+ ;;
+ esac
+ done
+ kill $kid
+}
+
+alsa_mixer=Master,0
+op-volume-up () { amixer sset $alsa_mixer 5%+ >/dev/null; }
+op-volume-down () { amixer sset $alsa_mixer 5%- >/dev/null; }
+
+op-now-playing () {
+ coproc $disorder playing; kid=$!
+ read -p k track
+ case $k in
+ nothing) echo "Not playing."; return ;;
+ track) ;;
+ *) bail "unexpected first-line token \`$k'" ;;
+ esac
+ read -p k _
+ case $k in id) ;; *) bail "unexpected second-line token \`$k'" ;; esac
+ read -p k _
+ case $k in played) ;; *) bail "unexpected third-line token \`$k'" ;; esac
+ read -pA t
+ case $t[-1] in started) st="" ;; paused) st=" (paused)" ;; esac
+ kill $kid
+
+ artist=$(disorder part $track display artist)
+ album=$(disorder part $track display album)
+ title=$(disorder part $track display title)
+ case $artist in [A-Z]) artist=$album album= ;; esac
+ echo "$artist: ‘$title’${album+, from ‘$album’}"
+}
+
+op-scratch () { disorder scratch; }
+op-enable/disable () {
+ get-disorder-state
+ case $playp in
+ t) disorder disable ;;
+ nil) disorder enable ;;
+ esac
+}
+op-play/pause () {
+ get-disorder-state
+ case $playp,$pausep in
+ nil,t) disorder enable; disorder resume ;;
+ nil,nil) disorder enable ;;
+ t,t) disorder resume ;;
+ t,nil) disorder pause ;;
+ esac
+}
+
+if [[ -e $HOME/etc/media-keys.local ]]; then
+ . $HOME/etc/media-keys.local
+fi
+
+case $# in 0) echo >&2 "usage: $0 OP"; exit 2 ;; esac
+op=$1; shift
+case $(whence -w op-$op) in
+ "op-$op: function") ;;
+ *) echo >&2 "$0: unknown operation \`$op'"; exit 2 ;;
+esac
+op-$op "$@"
KeyDown C5 v wop * th available
KeyDown C5 w menus show winops.menu
KeyDown C5 x wop * close
+KeyDown C5 numbersign exec xinitcmd pavucontrol
+KeyDown C5 apostrophe exec xinitcmd disobedience
+KeyDown C5 plus exec media-keys volume-up
+KeyDown C5 minus exec media-keys volume-down
+KeyDown C5 period exec media-keys enable/disable
+KeyDown C5 comma exec gdbus call -e -d org.freedesktop.Notifications -o /org/freedesktop/Notifications -m org.freedesktop.Notifications.Notify -- DisOrder 0 audio-volume-high "Now playing" "$(media-keys now-playing)" "[]" "{}" 5000
+KeyDown C5 slash exec media-keys scratch
+KeyDown C5 space exec media-keys play/pause
KeyDown C5 F1 menus show file.menu
KeyDown C5 F2 menus show enlightenment.menu
KeyDown C5 F3 menus show settings.menu