La última vez
comencé una biblioteca llamado Racket y hoy lo
he extendido para que pueda manejar un playlist simple de favoritos.
El playlist se almacena en un formato llamado m3u (la
única razón que elegí este es porque es el menos complicado que
utiliza VLC). Es tan simple como esto:
#EXTM3U
file:///nombre/del/archivo/1.ogg
file:///nombre/del/archivo/2.wav
Para comenzar definí un variable personalizable llamado
racket-favourites-playlist que describe el nombre del
archivo del playlist:
(defcustom racket-favourites-playlist "~/Music/playlists/Favourites.m3u"
"File path where favourites playlist is stored."
:type 'string
:group 'racket)
A continuación añadí unos funciones simples para tocar este playlist en EMMS:
(defun racket-add-favourites ()
"Add favourites playlist"
(interactive)
(emms-add-playlist-file racket-favourites-playlist))
(defun racket-play-favourites ()
"Play favourites playlist"
(interactive)
(emms-play-playlist-file racket-favourites-playlist))
Ahora viene la parte divertida: añadir la pista que se está tocando en
este momento al playlist, para que pueda añadirlo fácilmente con una
combinación de teclas en cualquier momento. Para encontrar el nombre
del archivo de la pista actual, puedo utilizar la función con un
nombre kilométrico
emms-score-current-selected-track-filename. La función
que creé evida hacer ningún cambio si la pista ya se encuetra en el
playlist, y añade un newline al final del archivo si falta.
(defun racket-add-track-to-favourites ()
"Add current track to favourites"
(interactive)
(let ((line (concat "file://" (emms-score-current-selected-track-filename))))
(with-current-buffer (or (get-file-buffer racket-favourites-playlist)
(find-file-noselect racket-favourites-playlist))
(save-excursion
(beginning-of-buffer)
(if (search-forward-regexp
(concat "^" (regexp-quote line) "$")
nil t)
;; Don’t do anything if the track is already added
(message "The track is already inside the playlist.")
;; Add to playlist
(progn
(end-of-buffer)
(unless (eq ?\C-j (char-before))
(insert "\n"))
(insert line "\n")
(save-buffer)
(message "Track added to playlist.")))))))
También creé dos funciones más: uno para eliminar la pista actual de
los favoritos y otro para abrir el archivo para que pueda reordenarlo
fácilmente. Puedes encontrar
el código completo para Racket aquí. Finalmente, creé una combinación de teclas para cada una de estas
funciones, debajo de C-SPC r (C-SPC es donde defino
todos mis combinaciones personalizadas, y el r es para Racket). Puedes
encontrar
el código para eso aquí.