From 46c6ce58fc6983e7f4a67a70916ce77adf9f0be6 Mon Sep 17 00:00:00 2001 From: jao Date: Wed, 19 Jan 2022 20:36:21 +0000 Subject: jao-spt improvements --- exwm.org | 11 +++++++++-- lib/media/jao-spt.el | 53 ++++++++++++++++++++++++++++++++++++++++------------ 2 files changed, 50 insertions(+), 14 deletions(-) diff --git a/exwm.org b/exwm.org index daf0bda..61588c0 100644 --- a/exwm.org +++ b/exwm.org @@ -539,10 +539,17 @@ jao-minibuffer-toggle)]]) (transient-define-prefix jao-transient-spt () - [["spt control" + [["play" ("x" "toggle" jao-spt-toggle) ("n" "next" jao-spt-next) - ("p" "previous" jao-spt-previous) + ("p" "previous" jao-spt-previous)] + ["current song" + ("l" "like" jao-spt-like) + ("d" "dislike" jao-spt-dislike)] + ["seek" + ("f" "forward 10 secs" jao-spt-seek :transient t) + ("b" "backward 10 secs" jao-spt-seek-back :transient t)] + ["status/ui" ("w" "status" jao-spt-echo-current) ("u" "spt ui" jao-exwm-spt)]]) diff --git a/lib/media/jao-spt.el b/lib/media/jao-spt.el index b8ef0f0..c4c1604 100644 --- a/lib/media/jao-spt.el +++ b/lib/media/jao-spt.el @@ -29,42 +29,71 @@ (defvar jao-spt-bin (expand-file-name "~/bin/spt")) (defvar jao-spt-format "'%s %t - %a [%r] %f'") +(defvar jao-spt-device nil) -(defun jao-spt--exec (&rest args) +(defun jao-spt--exec-async (&rest args) (let ((display-buffer-alist `((".*spt commands.*" display-buffer-no-window))) (buff (get-buffer-create "* spt commands *"))) (apply #'start-process "spt" buff jao-spt-bin args))) (defvar jao-spt--status-str "") +(defun jao-spt--pb (&rest args) + (let* ((args (mapconcat #'identity args " ")) + (dev (if jao-spt-device (format "-d '%s'" jao-spt-device) "")) + (cmd (format "%s pb %s -f %s %s" jao-spt-bin args jao-spt-format dev)) + (st (string-trim (shell-command-to-string cmd)))) + (setq jao-spt--status-str (when (string-prefix-p "▶" st) st)) + (jao-minibuffer-refresh) + st)) + +(defun jao-spt--pb* (&rest args) + (message (apply 'jao-spt--pb args))) + ;;;###autoload (defun jao-spt-play-uri (uri) - (jao-spt--exec "play" "--uri" uri)) + (jao-spt--exec-async "play" "--uri" uri)) ;;;###autoload (defun jao-spt-update-status () (interactive) - (let ((st (string-trim (shell-command-to-string (format "%s pb -f %s" - jao-spt-bin - jao-spt-format))))) - (setq jao-spt--status-str (when (string-prefix-p "▶" st) st)) - (jao-minibuffer-refresh) - st)) + (jao-spt--pb)) ;;;###autoload (defun jao-spt-toggle () (interactive) - (jao-spt--exec "pb" "-t")) + (jao-spt--pb* "-t")) ;;;###autoload (defun jao-spt-next () (interactive) - (jao-spt--exec "pb" "-n")) + (jao-spt--pb* "-n")) ;;;###autoload (defun jao-spt-previous () (interactive) - (jao-spt--exec "pb" "-p")) + (jao-spt--pb* "-p")) + +;;;###autoload +(defun jao-spt-like () + (interactive) + (jao-spt--pb* "--like")) + +;;;###autoload +(defun jao-spt-dislike () + (interactive) + (jao-spt--pb* "--dislike")) + +;;;###autoload +(defun jao-spt-seek (secs) + (interactive "p") + (let ((secs (if (zerop secs) 10 secs))) + (jao-spt--pb* "--seek" (format "%s%s" (if (> secs 0) "+" "-") secs)))) + +;;;###autoload +(defun jao-spt-seek-back (secs) + (interactive "p") + (jao-spt-seek (- secs))) ;;;###autoload (defun jao-spt-echo-current () @@ -75,7 +104,7 @@ ;;;###autoload (defun jao-spt-toggle-shuffle () (interactive) - (jao-spt--exec "pb" "--shuffle")) + (jao-spt--pb* "--shuffle")) ;;;###autoload (defun jao-spt-set-up () -- cgit v1.2.3