mirror of
https://codeberg.org/scip/dot-emacs.git
synced 2025-12-17 12:30:59 +01:00
enhanced create playlist function
This commit is contained in:
@@ -40,30 +40,72 @@
|
|||||||
(emms-play-playlist filename))
|
(emms-play-playlist filename))
|
||||||
|
|
||||||
(defun audio-create-playlist(name)
|
(defun audio-create-playlist(name)
|
||||||
"Create a new audio playlist for EMMS player."
|
"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."
|
||||||
(interactive "sPlaylist name: ")
|
(interactive "sPlaylist name: ")
|
||||||
|
(let ((filename (expand-file-name (format "playlist-%s" name) emms-source-file-default-directory)))
|
||||||
|
(message filename)
|
||||||
|
(if (file-exists-p filename)
|
||||||
|
(message (format "Playlist %s already exists!" filename))
|
||||||
|
(progn
|
||||||
(emms-playlist-new name)
|
(emms-playlist-new name)
|
||||||
(switch-to-buffer name)
|
(switch-to-buffer name)
|
||||||
(emms-playlist-set-playlist-buffer name)
|
(emms-playlist-set-playlist-buffer name)
|
||||||
(let ((read-answer-short t)
|
(let ((read-answer-short t)
|
||||||
(answer (read-answer "add [D]irectory or [F]ile? "
|
(answer (read-answer "add [D]irectory or [F]ile? "
|
||||||
'(("dir" ?d "add dir")
|
'(("dir" ?d "add dir")
|
||||||
("file" ?f "add file"))))
|
("file" ?f "add file")
|
||||||
(done nil))
|
("url" ?u "add a streaming url")
|
||||||
(message answer)
|
("quit" ?q "quit"))))
|
||||||
|
(done nil)
|
||||||
|
(abort nil))
|
||||||
|
(setq default-directory emms-source-file-default-directory)
|
||||||
(cond
|
(cond
|
||||||
|
((equal answer "url")
|
||||||
|
(let ((url (read-string "Enter a url: ")))
|
||||||
|
(when url
|
||||||
|
(emms-add-url url))))
|
||||||
((equal answer "dir")
|
((equal answer "dir")
|
||||||
(emms-add-directory-tree (read-directory-name "Select directory:")))
|
(while (not done)
|
||||||
|
(emms-playlist-set-playlist-buffer name)
|
||||||
|
(let ((dir (read-directory-name "Select directory:")))
|
||||||
|
(when dir
|
||||||
|
(emms-add-directory-tree dir))
|
||||||
|
(setq answer (read-char-from-minibuffer "Add another dir [Yn]? "))
|
||||||
|
(when (equal answer ?n)
|
||||||
|
(setq done t)))))
|
||||||
((equal answer "file")
|
((equal answer "file")
|
||||||
(while (not done)
|
(while (not done)
|
||||||
;; FIXME: ask to continue
|
|
||||||
(emms-playlist-set-playlist-buffer name)
|
(emms-playlist-set-playlist-buffer name)
|
||||||
(let ((file (read-file-name "Select audio file:")))
|
(let ((file (read-file-name "Select audio file:")))
|
||||||
(if file
|
(when file
|
||||||
(emms-add-file file)
|
(emms-add-file file)
|
||||||
(setq done t))))))
|
(setq default-directory (file-name-directory file)))
|
||||||
(emms-playlist-save 'native (expand-file-name (format "playlist-%s" name) "~/MP3"))
|
(setq answer (read-char-from-minibuffer "Add another file [Yn]? "))
|
||||||
(emms-playlist-mode)))
|
(when (equal answer ?n)
|
||||||
|
(setq done t)))))
|
||||||
|
(t (setq abort t)))
|
||||||
|
(if abort
|
||||||
|
(kill-buffer)
|
||||||
|
(progn
|
||||||
|
(emms-playlist-save 'native filename)
|
||||||
|
(emms-playlist-mode))))))))
|
||||||
|
|
||||||
|
:hook
|
||||||
|
(emms-playlist-mode . hl-line-mode)
|
||||||
|
(emms-playlist-source-inserted . beginning-of-buffer)
|
||||||
|
|
||||||
:bind (:map emms-playlist-mode-map
|
:bind (:map emms-playlist-mode-map
|
||||||
( "<right>" . 'emms-seek-forward)
|
( "<right>" . 'emms-seek-forward)
|
||||||
|
|||||||
Reference in New Issue
Block a user