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

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

[elpa] externals/listen e4cdd0cf6c 064/103: Library and shell command im


From: ELPA Syncer
Subject: [elpa] externals/listen e4cdd0cf6c 064/103: Library and shell command improvements
Date: Mon, 26 Feb 2024 12:59:30 -0500 (EST)

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

    Library and shell command improvements
---
 listen-library.el | 57 ++++++++++++++++++++++++++++++++++++++++++-------------
 listen.el         | 16 ++++++++++------
 2 files changed, 54 insertions(+), 19 deletions(-)

diff --git a/listen-library.el b/listen-library.el
index 4ad055fb8f..8f9c5e3eb7 100644
--- a/listen-library.el
+++ b/listen-library.el
@@ -65,7 +65,7 @@
                             (list #'genre #'artist #'date #'album 
#'track-string)))))
 
 ;;;###autoload
-(cl-defun listen-library (paths &key name)
+(cl-defun listen-library (paths &key name buffer)
   "Show a library view of PATHS.
 PATHS is a list of paths to files and/or directories.
 Interactively, with prefix, NAME may be specified to show in the
@@ -79,20 +79,51 @@ mode line and bookmark name."
                              append (directory-files-recursively path "." t)
                              else collect path))
          (tracks (remq nil (mapcar #'listen-queue-track filenames)))
-         (buffer (thread-last listen-library-taxy
-                              taxy-emptied
-                              (taxy-fill tracks)
-                              ;; (taxy-sort #'string< #'listen-queue-track-)
-                              (taxy-sort* #'string< #'taxy-name)
-                              taxy-magit-section-pp))
          (buffer-name (if name
                           (format "*Listen library: %s" name)
-                        (generate-new-buffer-name (format "*Listen 
library*")))))
-    (pop-to-buffer buffer)
-    (rename-buffer buffer-name)
-    (setq-local bookmark-make-record-function 
#'listen-library--bookmark-make-record)
-    (setf listen-library-paths paths
-          listen-library-name name)))
+                        (generate-new-buffer-name (format "*Listen 
library*"))))
+         (buffer (or buffer (get-buffer-create buffer-name)))
+         (inhibit-read-only t))
+    (with-current-buffer buffer
+      (listen-library-mode)
+      (setf listen-library-paths paths
+            listen-library-name name)
+      (erase-buffer)
+      (thread-last listen-library-taxy
+                   taxy-emptied
+                   (taxy-fill tracks)
+                   ;; (taxy-sort #'string< #'listen-queue-track-)
+                   (taxy-sort* #'string< #'taxy-name)
+                   taxy-magit-section-insert))
+    (pop-to-buffer buffer)))
+
+(defvar-keymap listen-library-mode-map
+  :parent magit-section-mode-map
+  "!" #'listen-library-shell-command
+  "g" #'listen-library-revert)
+
+(define-derived-mode listen-library-mode magit-section-mode "Listen-Library"
+  (setq-local bookmark-make-record-function 
#'listen-library--bookmark-make-record))
+
+(declare-function listen-shell-command "listen")
+(defun listen-library-shell-command (command filenames)
+  "Run COMMAND on FILENAMES.
+Interactively, read COMMAND and use tracks at point in
+`listen-library' buffer."
+  (interactive
+   (let* ((value (oref (magit-current-section) value))
+          (filenames (cl-typecase value
+                       (listen-track (list (listen-track-filename value)))
+                       (taxy-magit-section (mapcar #'listen-track-filename 
(taxy-flatten value)))))
+          (command (read-shell-command (format "Run command on %S: " 
filenames))))
+     (list command filenames)))
+  (listen-shell-command command filenames))
+
+(defun listen-library-revert ()
+  "Revert current listen library buffer."
+  (interactive)
+  (cl-assert listen-library-paths)
+  (listen-library listen-library-paths :name listen-library-name))
 
 ;;;;; Bookmark support
 
diff --git a/listen.el b/listen.el
index cba7e4356a..b2c5a08702 100755
--- a/listen.el
+++ b/listen.el
@@ -152,16 +152,20 @@ relative seek."
      (list player (concat prefix (number-to-string seconds)))))
   (listen--seek player seconds))
 
-(cl-defun listen-shell-command (command filename)
-  "Run shell COMMAND on FILENAME.
+(cl-defun listen-shell-command (command filenames)
+  "Run shell COMMAND on FILENAMES.
 Interactively, use the current player's current track, and read
 command with completion."
   (interactive
    (let* ((player (listen--player))
-          (filename (abbreviate-file-name (listen--filename player)))
-          (command (read-shell-command (format "Run command on %S: " 
filename))))
-     (list command filename)))
-  (let ((command (format "%s %s" command (shell-quote-argument 
(expand-file-name filename)))))
+          (filenames (list (abbreviate-file-name (listen--filename player))))
+          (command (read-shell-command (format "Run command on %S: " 
filenames))))
+     (list command filenames)))
+  (let ((command (format "%s %s" command
+                         (mapconcat (lambda (filename)
+                                      (shell-quote-argument (expand-file-name 
filename)))
+                                    filenames " ")))
+        (display-buffer-alist `((,(regexp-quote 
shell-command-buffer-name-async) display-buffer-no-window))))
     (async-shell-command command)))
 
 ;;;; Mode



reply via email to

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