emms-help
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[emms-help] Two new EMMS functions


From: Ian Dunn
Subject: [emms-help] Two new EMMS functions
Date: Thu, 14 Apr 2016 08:08:36 -0400
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/25.1.50 (gnu/linux)

    I've created two interactive functions for EMMS that I think other people 
may find useful.  Both of them are included in this email at the bottom, as 
well as a helper function for one of them.

    The first is 'emms-add-file-from-cache', which, as it sounds, adds a file 
from the EMMS cache database to the 
current EMMS playlist.  The second is a function to interactively select and 
play one of the tracks in the current EMMS playlist.

    Both of these functions use 'when-let' from subr-x, so I don't know if that 
creates a compatibility issue.  If it does, I'd be happy to quickly fix them.

    I hope other people will find these as useful as I do.

-- 
Ian Dunn

;;;###autoload
(defun emms-add-file-from-cache ()
  "Interactively add a file from EMMS cache."
  ;; Marked as interactive-only because ‘completing-read’ is used, forcing
  ;; interaction with the user.
  (declare (interactive-only t))
  (interactive)
  (when-let (file-name (completing-read "File: " emms-cache-db))
    (emms-add-file file-name)))

(defun emms--collect-playlist-tracks (&optional playlist-buffer)
  "Collect a hash table of tracks from PLAYLIST-BUFFER.

The returned hash table will have the track descriptions as the key,
and the point in the playlist buffer as the value.

If PLAYLIST-BUFFER is not specified, then it will default to the
current EMMS playlist."
  (let ((l (make-hash-table :test #'equal)))
    (with-current-buffer (or playlist-buffer emms-playlist-buffer)
      (goto-char (point-min))
      (emms-walk-tracks
        (puthash (emms-info-track-description (emms-playlist-track-at)) (point) 
l)))
    l))

;;;###autoload
(defun emms-select-playlist-track ()
  "Select a track in the current playlist."
  ;; Marked as interactive-only because ‘completing-read’ is used, forcing
  ;; interaction with the user.
  (declare (interactive-only t))
  (interactive)
  (let ((l (emms--collect-playlist-tracks emms-playlist-buffer)))
    (when-let (key (completing-read "Track: " l))
      (with-current-emms-playlist
        (goto-char (gethash key l))
        (emms-playlist-mode-play-smart)))))



reply via email to

[Prev in Thread] Current Thread [Next in Thread]