summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--exwm.org11
-rw-r--r--lib/media/jao-spt.el53
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 ()