summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorjao <jao@gnu.org>2022-01-18 22:43:24 +0000
committerjao <jao@gnu.org>2022-01-18 22:43:24 +0000
commit425bdb7d43de9224b24e1adc1687adcf19a023c8 (patch)
treee0a42edb2ae72c255b707f392f2f1f2a7c2749e4
parent0c4548bfa3450b55c4fb6dc4e263e66299d7e086 (diff)
downloadelibs-425bdb7d43de9224b24e1adc1687adcf19a023c8.tar.gz
elibs-425bdb7d43de9224b24e1adc1687adcf19a023c8.tar.bz2
jao-spt: telecommands for spotify-ui
-rw-r--r--exwm.org9
-rw-r--r--init.org2
-rw-r--r--lib/media/jao-spt.el77
3 files changed, 88 insertions, 0 deletions
diff --git a/exwm.org b/exwm.org
index 8009070..5e76817 100644
--- a/exwm.org
+++ b/exwm.org
@@ -538,6 +538,14 @@
("M" (lambda () (concat "minibuffer" (when jao-minibuffer-enabled-p "*")))
jao-minibuffer-toggle)]])
+ (transient-define-prefix jao-transient-spt ()
+ [["spt control"
+ ("s" "toggle" jao-spt-toggle)
+ ("n" "next" jao-spt-next)
+ ("p" "previous" jao-spt-previous)
+ ("w" "status" jao-spt-echo-current)
+ ("u" "spt ui" jao-exwm-spt)]])
+
#+end_src
* Keybindings
#+begin_src emacs-lisp
@@ -566,6 +574,7 @@
([?\s-p] . jao-prev-window)
([?\s-r] . app-launcher-run-app)
([?\s-s] . jao-transient-spotify)
+ ([?\s-S] . jao-transient-spt)
;; ([?\s-t] . jao-exwm-xterm)
([?\s-t] . vterm)
([?\s-w] . jao-transient-exwm)
diff --git a/init.org b/init.org
index d6992ab..fef1454 100644
--- a/init.org
+++ b/init.org
@@ -2941,6 +2941,8 @@
(jao-mpris-setup-aliases)
(jao-mpris-register "mopidy" :system (if jao-modeline-in-minibuffer-p -10 70))
+ (use-package jao-spt :demand t)
+
#+end_src
*** mpc
#+begin_src emacs-lisp
diff --git a/lib/media/jao-spt.el b/lib/media/jao-spt.el
new file mode 100644
index 0000000..adafed6
--- /dev/null
+++ b/lib/media/jao-spt.el
@@ -0,0 +1,77 @@
+;;; jao-spt.el --- Access to the spotify-tui CLI -*- lexical-binding: t; -*-
+
+;; Copyright (C) 2021, 2022 jao
+
+;; Author: jao <mail@jao.io>
+;; Keywords: multimedia
+
+;; This program is free software; you can redistribute it and/or modify
+;; it under the terms of the GNU General Public License as published by
+;; the Free Software Foundation, either version 3 of the License, or
+;; (at your option) any later version.
+
+;; This program is distributed in the hope that it will be useful,
+;; but WITHOUT ANY WARRANTY; without even the implied warranty of
+;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+;; GNU General Public License for more details.
+
+;; You should have received a copy of the GNU General Public License
+;; along with this program. If not, see <https://www.gnu.org/licenses/>.
+
+;;; Commentary:
+
+;; Simple spotifyd controls via the spt executable.
+
+;;; Code:
+
+(require 'jao-minibuffer)
+(require 'jao-notify)
+
+(defvar jao-spt-bin (expand-file-name "~/bin/spt"))
+
+(defun jao-spt--exec (&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 "")
+
+;;;###autoload
+(defun jao-spt-play-uri (uri)
+ (jao-spt--exec "play" "--uri" uri))
+
+;;;###autoload
+(defun jao-spt-update-status ()
+ (interactive)
+ (let ((st (string-trim (shell-command-to-string (format "%s pb" jao-spt-bin)))))
+ (setq jao-spt--status-str (when (string-prefix-p "▶" st) st))
+ (jao-minibuffer-refresh)
+ st))
+
+;;;###autoload
+(defun jao-spt-toggle ()
+ (interactive)
+ (jao-spt--exec "pb" "-t"))
+
+;;;###autoload
+(defun jao-spt-next ()
+ (interactive)
+ (jao-spt--exec "pb" "-n"))
+
+;;;###autoload
+(defun jao-spt-previous ()
+ (interactive)
+ (jao-spt--exec "pb" "-p"))
+
+;;;###autoload
+(defun jao-spt-echo-current ()
+ (interactive)
+ (let ((jao-notify-use-messages-p t))
+ (jao-notify (jao-spt-update-status))))
+
+;;;###autoload
+(defun jao-spt-set-up ()
+ (jao-minibuffer-add-variable 'jao-spt--status-str 20))
+
+(provide 'jao-spt)
+;;; jao-spt.el ends here