1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
|
[[!meta title="Play and control your music with Emacs - Damien Cassou"]]
- Hi everyone. In this lightening talk, I would like to present
MPDel, which is a user interface for MPD, the Music Player Daemon,
that's implemented in Emacs Lisp and runs entirely within Emacs. So
it relies on Music Player Daemon, which is quite old because it's a
sixteen years old project serving music with many different clients.
So if I look at clients of MPD you see there are all different kinds
so this ?android? projects or web projects or GTK projects and a
curses project, web projects, so yeah many different kinds of
clients. MPDel is implemented in Emacs Lisp, it's divided into
three parts. So there is a library libmpdel, which is it's own
project. That's doesn't propose any user interface, but instead it
proposes a set of primitive functions to build user interfaces on
top. Then you have the screenshot here on top of the MPDel, so it's
mostly tabulated lists based, and then you have another UI which is
based on ?IV?, and I will present ?the? two user interfaces in this
context of this project. So let's start the video by navigating the
music database. So it's a simple job to get the list of all your
artists. You can navigate with ?turned-out? shortcuts. And you
have isearch obviously ?for? imenu, and so I can go to ?pink? sites
with quick shortcuts. When you select your artists you can go to
which album by pressing return, and to go from an album to a
particular artist's songs, you also press return.
- So that is going ?deep? from the album to the artist and from the
artist to the songs, and with carrots or shift-6 on my keyboard you
go up to the parent from the song to the albums, and from the albums
to the artists. So the next thing we can see is the playlists, so
on the left you have the database, and on the right I will put the
playlist. So for now there is nothing to listen to, and I will add
things in these lists, so we can add either artists, albums or
individual songs, so let's add one of my favorite songs, ?So equals?
from Pink Floyd. So you can add it to the playlist, or add it
immediately stop playing it, so this time I want to immediately play
it, so I press P for play.
- And then I will press the carrot to go back to the artists and add
some more music, I will add an album by Dire Straits. So if I press
P now it will add all the album and also start with the first song,
but because I don't want to interrupt ?ecos? I will just press a to
add all the songs from this album. What we want to do now is
manipulate the playlists, so for now ?ecos? has started playing and
I can modify the playlist to decide what will be next, so by default
it's Sultans of Swing, but I can change that for prioritization for
example.
- Like that, so I can move one song, I can also mark multiple songs
and move them around.
- It's also possible to play the next song and the previous song so
you have M-n to play the next. And M-p to play the previous one. If
you wanted to delete a few songs from your album you can select them
and then press k for deletion, and then they are removed from the
database, not from the database, but only from the playlists. With
t you can toggle the mark, so if I want to select everything by
?except ...? I can just press t. And t again to ??, if I want to
select everything I can always press t when nothing is marked, so I
can erase everything at once.
- Something I can do now is display some information about the
currently played song, so I can press v wherever I am to get the
list of songs. It's very important to notice that whatever view you
are in the shortcuts are always the same, so if I go back to the
navigator with n, I can press ?? information about the current song,
so v here, which ?? about the current song. So you see that there
is the time, and the album and artist and ?? status, so if I pause
the music, it ?? pause. And backplaying. I can move forward and
move backward with M-s and M-v, I can do that slowly or fast with
different shortcuts, and from the current song you can press carrots
to go to the parents, so it's exactly the same shortcut as how we
were navigating from the songs to the albums and from the albums to
the artists, so it's carrots, and you go from the song to its album
and then from the album to the artist.
- I tried when designing the shortcuts to make the keybindings do
always the same thing wherever you are, so if I press M-f now I will
fast-forward the current song, so the same shortcuts work the same
everywhere. And if I press ?....? Another way to control the
current playlists or stop playlists is to use the Ivy based
interface so it doesn't pop up any buffer, but you can still
navigate your database and select the songs to play. So if I start
the interface I get the list of all my artists in the minibuffer, so
I can choose for example MCC artists and the ?? ?king? and the song
I will pick this one for example, and there are many things I can do
from here, so I can add to the current playlist I can start playing
immediately, I can start and stop playlists, so let's see I just p
for playing it immediately.
- So MPDel is mostly based on tabulated lists, which I really liked.
And after I implemented MPDel, I liked that kind of view so much I
decided to use the views for other kinds of packages, so I
implemented a database navigator, and also a network manager client
using tabulated lists, and I realized that all of those libraries
and tools they were sharing the same kind of code. So I decided to
abstract away from all of those and I created navigel which makes it
very easy to implement tabulated lists if you have a model of your
domain data that you want to navigate.
- There is a lightening talk at EmacsConf about navigel so I encourage
you to have a look at it if you're interested in how I reimplemented
MPDel so that it's much simpler, and how I implemented all the other
packages. This is the end of my talk, I hope you liked it. And
happy EmacsConf.
|