emacs-elpa-diffs
[Top][All Lists]
Advanced

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

[elpa] externals/listen 7cec46f690 05/16: Change: (listen-queue-complete


From: ELPA Syncer
Subject: [elpa] externals/listen 7cec46f690 05/16: Change: (listen-queue-complete) Add :allow-new-p argument
Date: Thu, 29 Feb 2024 06:58:30 -0500 (EST)

branch: externals/listen
commit 7cec46f690e1f3a223669a19f144dd5b732ab258
Author: Adam Porter <adam@alphapapa.net>
Commit: Adam Porter <adam@alphapapa.net>

    Change: (listen-queue-complete) Add :allow-new-p argument
---
 README.org      |  1 +
 listen-queue.el | 36 +++++++++++++++++++++---------------
 2 files changed, 22 insertions(+), 15 deletions(-)

diff --git a/README.org b/README.org
index bf840f20cd..b8f9779b48 100644
--- a/README.org
+++ b/README.org
@@ -76,6 +76,7 @@ Use the command ~listen~ to show the Transient menu.  From 
there, it is--hopeful
 + Various improvements in robustness.
 + Command ~listen-queue~ doesn't recreate its buffer when already open.
 + Key bindings in ~listen~ Transient menu.
++ Function ~listen-queue-complete~ accepts argument ~:allow-new-p~ to return a 
new queue if the entered name doesn't match an existing one.
 
 *Fixes*
 + Completing read of tracks from MPD.
diff --git a/listen-queue.el b/listen-queue.el
index bcc3c6e190..2aac891a20 100644
--- a/listen-queue.el
+++ b/listen-queue.el
@@ -249,22 +249,28 @@ select track as well."
       (alist-get selected map nil nil #'equal))))
 
 (declare-function listen--playing-p "listen-vlc")
-(cl-defun listen-queue-complete (&key (prompt "Queue"))
+(cl-defun listen-queue-complete (&key (prompt "Queue") allow-new-p)
   "Return a Listen queue selected with completion.
-PROMPT is passed to `format-prompt', which see."
-  (pcase (length listen-queues)
-    (0 (listen-queue--new (read-string "New queue name: ")))
-    (1 (car listen-queues))
-    (_ (let* ((player (listen--player))
-              (default-queue-name (or (when listen-queue
-                                        ;; In a listen buffer: offer its queue 
as default.
-                                        (listen-queue-name listen-queue))
-                                      (when (listen--playing-p player)
-                                        (listen-queue-name (map-elt 
(listen-player-etc player) :queue)))))
-              (queue-names (mapcar #'listen-queue-name listen-queues))
-              (prompt (format-prompt prompt default-queue-name))
-              (selected (completing-read prompt queue-names nil t nil nil 
default-queue-name)))
-         (cl-find selected listen-queues :key #'listen-queue-name :test 
#'equal)))))
+If ALLOW-NEW-P, accept the name of a non-existent queue and
+return a new one having it.  PROMPT is passed to `format-prompt',
+which see."
+  (cl-labels ((read-queue ()
+                (let* ((player (listen--player))
+                       (default-queue-name (or (when listen-queue
+                                                 ;; In a listen buffer: offer 
its queue as default.
+                                                 (listen-queue-name 
listen-queue))
+                                               (when (listen--playing-p player)
+                                                 (listen-queue-name (map-elt 
(listen-player-etc player) :queue)))))
+                       (queue-names (mapcar #'listen-queue-name listen-queues))
+                       (prompt (format-prompt prompt default-queue-name))
+                       (selected (completing-read prompt queue-names nil (not 
allow-new-p)
+                                                  nil nil default-queue-name)))
+                  (or (cl-find selected listen-queues :key #'listen-queue-name 
:test #'equal)
+                      (when allow-new-p
+                        (listen-queue--new selected))))))
+    (pcase (length listen-queues)
+      (0 (listen-queue--new (read-string "New queue name: ")))
+      (_ (read-queue)))))
 
 ;;;###autoload
 (defun listen-queue-new (name)



reply via email to

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