Configure EMMS (Emacs Multi-Media System) for Multimedia Keyboard

  |   Source

Emacs server need be started first.

I use emacsclient to execute emms commands in the emacs server.

Key bindings setup in ~/.i3/config for i3 window manager,

# music player client (mpc, emms ...)
bindsym XF86Search exec --no-startup-id ~/bin/music-player-client show
bindsym XF86Tools exec --no-startup-id ~/bin/music-player-client random
bindsym XF86AudioStop exec --no-startup-id ~/bin/music-player-client toggle
bindsym XF86AudioPause exec --no-startup-id ~/bin/music-player-client toggle
bindsym XF86AudioNext exec --no-startup-id ~/bin/music-player-client next
bindsym XF86AudioPrev exec --no-startup-id ~/bin/music-player-client prev

Content of ~/bin/music-player-client,

#!/bin/bash

# use mpc&mpd or emacsclient&emms to play music

if [ -z "$1" ]; then
    echo "Usage: music-player-client pre|next|toggle|random|show"
    exit 1
fi

# Please uninstall mpc&mpd if using emms
if command -v mpc &> /dev/null; then
    case $1 in
        prev )
            mpc prev
            ;;
        next )
            mpc next
            ;;
        toggle )
            mpc toggle
            ;;
    esac
elif command -v emacsclient &> /dev/null; then
    case $1 in
        prev )
            emacsclient --eval '(emms-previous)'
            ;;
        next )
            emacsclient --eval '(emms-next)'
            ;;
        toggle )
            emacsclient --eval '(emms-pause)'
            ;;
        random )
            emacsclient --eval '(progn (emms-shuffle) (emms-next))'
            ;;
        show )
            # program like dunst can show the notification
            notify-send "$(emacsclient --eval '(file-name-base (emms-show))')"
            ;;
    esac
fi

I usually run M-x emms-play-directory-tree to play music. My emms setup,

(with-eval-after-load 'emms
  ;; minimum setup is more robust
  (emms-minimalistic)
  (setq emms-player-list '(emms-player-mplayer
                           emms-player-vlc)))

Screen shot of running ~/bin/music-player-client show, emms-notification.png

Comments powered by Disqus