diff options
-rw-r--r-- | exwm.org | 9 | ||||
-rw-r--r-- | init.org | 2 | ||||
-rw-r--r-- | lib/media/jao-spt.el | 77 |
3 files changed, 88 insertions, 0 deletions
@@ -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) @@ -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 |