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

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

[elpa] externals/listen 1d5f86ebc0 004/103: Updates


From: ELPA Syncer
Subject: [elpa] externals/listen 1d5f86ebc0 004/103: Updates
Date: Mon, 26 Feb 2024 12:58:58 -0500 (EST)

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

    Updates
---
 listen-lib.el |  7 +++++++
 listen-vlc.el | 45 +++++++++++++++++++++++++------------------
 listen.el     | 61 +++++++++++++++++++++++++++++++++++++++++++++++++++--------
 3 files changed, 87 insertions(+), 26 deletions(-)

diff --git a/listen-lib.el b/listen-lib.el
index a4ff44a73b..addf8a47fd 100644
--- a/listen-lib.el
+++ b/listen-lib.el
@@ -30,6 +30,13 @@
 (cl-defstruct listen-player
   process command args)
 
+;;;; Variables
+
+(defvar listen-debug-p nil
+  "When non-nil, don't erase process buffer after sending commands.")
+
+;;;; Footer
+
 (provide 'listen-lib)
 
 ;;; listen-lib.el ends here
diff --git a/listen-vlc.el b/listen-vlc.el
index 11e6377ec0..3c2741df46 100755
--- a/listen-vlc.el
+++ b/listen-vlc.el
@@ -38,13 +38,13 @@
 
 ;;;; Functions
 
-(cl-defmethod listen-info ((player listen-player-vlc))
-  (listen-send player "info"))
+(cl-defmethod listen--info ((player listen-player-vlc))
+  (listen--send player "info"))
 
-(cl-defmethod listen-title ((player listen-player-vlc))
-  (listen-send player "get_title"))
+(cl-defmethod listen--title ((player listen-player-vlc))
+  (listen--send player "get_title"))
 
-(cl-defmethod listen-ensure ((player listen-player-vlc))
+(cl-defmethod listen--ensure ((player listen-player-vlc))
   "Ensure PLAYER is ready."
   (pcase-let (((cl-struct listen-player command args process) player))
     (unless (and process (process-live-p process))
@@ -55,36 +55,36 @@
 (cl-defmethod listen--play ((player listen-player-vlc) file)
   "Play FILE with PLAYER."
   (dolist (command `("clear" ,(format "add %s" (expand-file-name file)) 
"play"))
-    (listen-send player command)))
+    (listen--send player command)))
 
 (cl-defmethod listen--stop ((player listen-player-vlc))
   "Stop playing with PLAYER."
-  (listen-send player "stop"))
+  (listen--send player "stop"))
 
 (cl-defmethod listen--status ((player listen-player-vlc))
-  (let ((status (listen-send player "status")))
+  (let ((status (listen--send player "status")))
     (when (string-match (rx "( state " (group (1+ alnum)) " )") status)
       (match-string 1 status))))
 
 (cl-defmethod listen--pause ((player listen-player-vlc))
   "Pause playing with PLAYER."
-  (listen-send player "pause"))
+  (listen--send player "pause"))
 
-(cl-defmethod listen-playing-p ((player listen-player-vlc))
+(cl-defmethod listen--playing-p ((player listen-player-vlc))
   "Return non-nil if PLAYER is playing."
-  (equal "1" (listen-send player "is_playing")))
+  (equal "1" (listen--send player "is_playing")))
 
-(cl-defmethod listen-elapsed ((player listen-player-vlc))
+(cl-defmethod listen--elapsed ((player listen-player-vlc))
   "Return seconds elapsed for PLAYER's track."
-  (cl-parse-integer (listen-send player "get_time")))
+  (cl-parse-integer (listen--send player "get_time")))
 
-(cl-defmethod listen-length ((player listen-player-vlc))
+(cl-defmethod listen--length ((player listen-player-vlc))
   "Return length of  PLAYER's track."
-  (cl-parse-integer (listen-send player "get_length")))
+  (cl-parse-integer (listen--send player "get_length")))
 
-(cl-defmethod listen-send ((player listen-player-vlc) command)
+(cl-defmethod listen--send ((player listen-player-vlc) command)
   "Send COMMAND to PLAYER and return output."
-  (listen-ensure player)
+  (listen--ensure player)
   (pcase-let (((cl-struct listen-player process) player))
     (with-current-buffer (process-buffer process)
       (let ((pos (marker-position (process-mark process))))
@@ -92,7 +92,16 @@
         (process-send-string process "\n")
         (with-local-quit
           (accept-process-output process))
-        (buffer-substring pos (- (process-mark process) 4))))))
+        (prog1 (buffer-substring pos (max (point-min) (- (process-mark 
process) 4)))
+          (unless listen-debug-p
+            (erase-buffer)))))))
+
+(cl-defmethod listen--volume ((player listen-player-vlc) &optional volume)
+  "Return or set PLAYER's VOLUME.
+VOLUME is an integer percentage."
+  (if volume
+      (listen--send player (format "volume %s" (* 255 (/ volume 100.0))))
+    (* 100 (/ (cl-parse-integer (listen--send player "volume")) 255.0))))
 
 (provide 'listen-vlc)
 
diff --git a/listen.el b/listen.el
index f5f2471798..e8f467f175 100755
--- a/listen.el
+++ b/listen.el
@@ -43,16 +43,27 @@
   "Music player."
   :group 'applications)
 
+(defcustom listen-directory "~/Music"
+  "Default music directory."
+  :type 'directory)
+
 ;;;; Functions
 
 (cl-defmethod listen-running-p ((player listen-player))
   "Return non-nil if PLAYER is running."
   (process-live-p (listen-player-process player)))
 
+(defun listen--player ()
+  "Return `listen-player' or a newly set one if nil."
+  (or listen-player
+      (setf listen-player (make-listen-player-vlc))))
+
+;;;; Mode
+
 (defvar listen-mode-lighter nil)
 
 (define-minor-mode listen-mode
-  "Show EMP player status in the mode line."
+  "Show Listen player status in the mode line."
   :global t
   (let ((lighter '(listen-mode listen-mode-lighter)))
     (if listen-mode
@@ -79,23 +90,23 @@
   (cl-labels ((format-time (seconds)
                 (format-seconds "%h:%.2m:%.2s%z" seconds))
               (format-track ()
-                (listen-title listen-player))
+                (listen--title listen-player))
               (format-status ()
                 (pcase (listen--status listen-player)
                   ("playing" "▶")
                   ("paused" "⏸")
                   ("stopped" "■"))))
-    (if (listen-playing-p listen-player)
+    (if (listen--playing-p listen-player)
         (concat "🎵 "
                 (format-track)
                 " ("
                 (pcase listen-lighter-format
-                  ('remaining (concat "-" (format-time (- (listen-length 
listen-player)
-                                                          (listen-elapsed 
listen-player)))))
-                  (_ (concat (format-time (listen-elapsed listen-player))
+                  ('remaining (concat "-" (format-time (- (listen--length 
listen-player)
+                                                          (listen--elapsed 
listen-player)))))
+                  (_ (concat (format-time (listen--elapsed listen-player))
                              "/"
-                             (format-time (listen-length listen-player)))))
-                ")" (format-status) " ")
+                             (format-time (listen--length listen-player)))))
+                ") " (format-status) " ")
       "")))
 
 (defun listen--mode-line-update (&rest _ignore)
@@ -105,6 +116,8 @@
     ;; (force-mode-line-update 'all)
     ))
 
+;;;; Commands
+
 (defun listen-pause (player)
   (interactive (list listen-player))
   (listen--pause player))
@@ -113,6 +126,38 @@
   (interactive (list listen-player))
   (listen--stop player))
 
+(defun listen-play (player file)
+  (interactive
+   (list (listen--player)
+         (read-file-name "Play file: " listen-directory nil t)))
+  (listen--play player file))
+
+(defun listen-volume (volume)
+  "Set volume to VOLUME %."
+  (interactive
+   (let ((volume (floor (listen--volume (listen--player)))))
+     (list (read-number "Volume %: " volume))))
+  (listen--volume (listen--player) volume))
+
+;;;; Transient
+
+(require 'transient)
+
+(transient-define-prefix listen-menu ()
+  "Show Listen menu."
+  :refresh-suffixes t
+  [["Listen"
+    :description
+    (lambda ()
+      (if listen-player
+          (concat "Listening: " (listen-mode-lighter))
+        "Not listening"))
+    ("SPC" "Pause" listen-pause)
+    ("p" "Play" listen-play)
+    ("s" "Stop" listen-stop)
+    ]]
+  )
+
 (provide 'listen)
 
 ;;; listen.el ends here



reply via email to

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