"Music Player Daemon (MPD) is a flexible, powerful, server-side
application for playing music." .
`elmpd' is a tight, ergonomic, asynchronous MPD client library in
Emacs Lisp.
See also `libmpdel' ,
`libmpdee' and the
`mpc' package which ships with Emacs beginning with version 23.2.
Create an MPD connection by calling `elmpd-connect'; this will
return an `elmpd-connection' instance immediately. Asynchronously,
it will be parsing the MPD greeting message, perhaps sending an
initial password, and if so requested, sending the "idle" command.
There are two idioms I've seen in MPD client libraries for sending
commands while receiving notifications of server-side changes:
1. just maintain two connections (e.g. mpdfav
); issue the
"idle" command on one, send commands on the other
2. use one connection, issue the "idle" command, and when asked
to issue another command, send "noidle", issue the
requested command, collect the response, and then send
"idle" again (e.g. `libmpdel'). Note that this is not a
race condition per
https://www.musicpd.org/doc/html/protocol.html#idle -- any
server-side changes that took place while processing the
command will be saved & returned on "idle"
Since `elmpd' is a library, I do not make that choice here, but
rather support both styles.
The implementation is callback-based; each connection comes at the
cost of a single socket plus whatever memory is needed to do the
text processing in handling command responses. In particular, I
declined to use `tq' despite the natural fit because I didn't want
to use a buffer for each connection, as well.