Fixing the obscure EMMS user interface
For years I am using a small shell wrapper script and mplayer to play mp3 songs in a loop, because I can’t sit at the computer and not listening to something. However, that script missed a lot of basic command such as “play the previous song” etc. Of yourse there are lots of terminal audio players, but most of them require a new set of key bindings to be learned. And to be honest, all my key binding related memory banks are full, I can’t just memoize yet another set of key bindings.
Then I discovered EMMS to my surprise. So I gave it a try.
And failed miserably.
The user interface of EMMS is not just bad, it is fucking crab. I needed more than an hour just to get it to play a damn song. Then when it finally did, I was unable to get it to stop playing because the buffer with the playlist went missing. A hidden buffer! What the hell were they thinking! Also it was (or rather IS) hard and complicated to create a new playlist and fill it with songs from a directory. Really this is the simplest task an audio player should be able to do. Not EMMS. I haven’t seen anything more fucked up than this.
From the deepest of my heart I really fucking hate EMMS!
On the other hand I truly love emacs. I love it so much that I am already mourning the day I’m dying because then I won’t be able to use emacs anymore.
Using emacs to me means, I am the sole dictator of what happens in my editor. And if I want it to play music and the code that offers such functionality doesn’t work the way I like it, I can and will just change it so that it does.
So, I went and wrote two functions which makes my live with EMMS much
much easier. The first one (and the more complicated one) is
audio-create-playlist
. Here’s the docstring of the function:
Create a new audio playlist for EMMS player.
It asks interactively for NAME. The playlistname will be derived
as this: 'source-file-default-directory + \"playlist-\" + NAME.
If the playlist already exists nothing will be done.
Otherwise the user will be asked wether to add a directory or
file[s] to the playlist. In the first case the user can then
interactively select a directory. In the latter case the user can
add interactively one or more files.
The playlist will be saved when a directory has been selected or
the user declines to add another file.
So when I want to create a new playlist, I just call this function, enter a name, add a directory or a couple of files using the interactive way for this the function provides and be done with it.
When I want to use this playlist the next day, I just call the other
function audio-open-playlist
, which asks me for the playlist
location, opens it in an EMMS buffer and starts playing. And the
buffer will also be properly named so that I can easily find it. Also
it is visible and not hidden somehow.
Inside this buffer I can then just use the usual EMMS keys to navigate the
songs, like p
, n
, <space>
, <ret>
etc. Pretty easy.
If you want to use these functions and also take a look at my EMMS config: init-audio.el can be found on github.