[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
- [elpa] branch externals/listen created (now 731e02125a), ELPA Syncer, 2024/02/26
- [elpa] externals/listen 11f81225c3 001/103: Let there be light, ELPA Syncer, 2024/02/26
- [elpa] externals/listen 9ed97e2238 007/103: Tidy, ELPA Syncer, 2024/02/26
- [elpa] externals/listen 95d5f42100 008/103: Lighter format, ELPA Syncer, 2024/02/26
- [elpa] externals/listen b1eeaff4b8 002/103: Rename to listen.el, ELPA Syncer, 2024/02/26
- [elpa] externals/listen 4a5ed2f7a7 005/103: More, ELPA Syncer, 2024/02/26
- [elpa] externals/listen 1d5f86ebc0 004/103: Updates,
ELPA Syncer <=
- [elpa] externals/listen d28f58805b 006/103: Not-yet-functional queue, ELPA Syncer, 2024/02/26
- [elpa] externals/listen 87a916839f 003/103: Add -lib, etc., ELPA Syncer, 2024/02/26
- [elpa] externals/listen a6ca9bd249 009/103: Tidy, ELPA Syncer, 2024/02/26
- [elpa] externals/listen e1194accde 010/103: Lighter stuff, ELPA Syncer, 2024/02/26
- [elpa] externals/listen 5a0a5683e0 011/103: Things, ELPA Syncer, 2024/02/26
- [elpa] externals/listen 11466911d5 012/103: Mostly queue stuff, ELPA Syncer, 2024/02/26
- [elpa] externals/listen eca9034d41 014/103: Tiny, ELPA Syncer, 2024/02/26
- [elpa] externals/listen 9d116dc78d 013/103: More, ELPA Syncer, 2024/02/26
- [elpa] externals/listen 1cab9f9892 015/103: Stuff, ELPA Syncer, 2024/02/26
- [elpa] externals/listen bbc0b2e55d 023/103: Tidying, ELPA Syncer, 2024/02/26