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

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

[elpa] externals/emms 7d56cdf822: * emms-setup.el: player discovery


From: ELPA Syncer
Subject: [elpa] externals/emms 7d56cdf822: * emms-setup.el: player discovery
Date: Thu, 8 Sep 2022 08:57:38 -0400 (EDT)

branch: externals/emms
commit 7d56cdf822c4d88baddb570e1228d901d6ca0ed4
Author: Yoni Rabkin <yoni@rabkins.net>
Commit: Yoni Rabkin <yoni@rabkins.net>

    * emms-setup.el: player discovery
---
 emms-setup.el | 47 +++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 47 insertions(+)

diff --git a/emms-setup.el b/emms-setup.el
index 5fd3267b68..b7a9f4e267 100644
--- a/emms-setup.el
+++ b/emms-setup.el
@@ -57,6 +57,14 @@
   "Default list of players for emms-setup."
   :type 'list)
 
+(defvar emms-setup-discover-player-alist
+  '((emms-player-mpg321  . "mpg123")
+    (emms-player-ogg123  . "ogg123")
+    (emms-player-mplayer . "mplayer")
+    (emms-player-mpv     . "mpv")
+    (emms-player-vlc     . "vlc"))
+  "Association list of players and their binaries.")
+
 ;;;###autoload
 (defun emms-minimalistic ()
   "An Emms setup script.
@@ -148,5 +156,44 @@ the stable features which come with the Emms distribution."
 (make-obsolete 'emms-standard 'emms-all "4.1")
 
 
+;;; ------------------------------------------------------------------
+;;; Player discovery
+;;; ------------------------------------------------------------------
+(defun emms-setup-discover-player-binary (bin-str)
+  "Find if BIN-STR can be executed in the current environment."
+  (when (not (eq system-type 'gnu/linux))
+    (error "Player discovery only supported on GNU/Linux."))
+  (let ((result (call-process "which" nil nil nil bin-str)))
+    (cond ((eq 0 result) t)
+          ((eq 1 result) nil)
+          ((eq 2 result) (error "invalid arguments to `which'.")))))
+
+(defun emms-setup-discover-player-has-binary-p (player)
+  "Find if PLAYER has an excecutable in the current environment."
+  (let ((bin-str (alist-get player emms-setup-discover-player-alist)))
+    (if bin-str
+       (emms-setup-discover-player-binary bin-str)
+      nil)))
+
+(defun emms-setup-discover-players ()
+  "Interactively add players to `emms-player-list'."
+  (interactive)
+  (when (and emms-player-list
+             (y-or-n-p (format "emms-player-list is already set to %s, do you 
want to empty it first?"
+                              emms-player-list)))
+    (setq emms-player-list nil))
+  (let ((players (copy-tree emms-setup-default-player-list)))
+    (while players
+      (let ((player (car players)))
+       (when (emms-setup-discover-player-has-binary-p player)
+          (when (y-or-n-p
+                 (format "Player %s is installed on your system, add it to the 
Emms player list?"
+                         player))
+            (add-to-list 'emms-player-list player))))
+      (setq players (cdr players))))
+  (message "emms-player-list is now set to: %s" emms-player-list))
+
+
+
 (provide 'emms-setup)
 ;;; emms-setup.el ends here



reply via email to

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