From 5078756e914850cc8cbaf068269010f371fe576b Mon Sep 17 00:00:00 2001 From: Mark Wooding Date: Fri, 20 Jul 2018 21:34:30 +0100 Subject: [PATCH] dot/e16-bindings, bin/media-keys: Keybindings for media players. --- Makefile | 1 + bin/media-keys | 85 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ dot/e16-bindings | 8 ++++++ 3 files changed, 94 insertions(+) create mode 100755 bin/media-keys diff --git a/Makefile b/Makefile index 000074c..fd34e33 100644 --- a/Makefile +++ b/Makefile @@ -281,6 +281,7 @@ SCRIPTLINKS += xinitcmd lock-screen xshutdown SCRIPTLINKS += un-backslashify-selection SCRIPTLINKS += xpra-start-xdummy SCRIPTLINKS += play-rawk +SCRIPTLINKS += media-keys DOTCPP += .Xdefaults Xdefaults_DEFS = -DEMACSWD=$(call mdw-conf,emacs-width,77) diff --git a/bin/media-keys b/bin/media-keys new file mode 100755 index 0000000..91e6d11 --- /dev/null +++ b/bin/media-keys @@ -0,0 +1,85 @@ +#! /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 "$@" diff --git a/dot/e16-bindings b/dot/e16-bindings index c0ad1db..064a3c3 100644 --- a/dot/e16-bindings +++ b/dot/e16-bindings @@ -60,6 +60,14 @@ KeyDown C5 s wop * stick 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 -- 2.11.0