From 425bdb7d43de9224b24e1adc1687adcf19a023c8 Mon Sep 17 00:00:00 2001 From: jao Date: Tue, 18 Jan 2022 22:43:24 +0000 Subject: jao-spt: telecommands for spotify-ui --- exwm.org | 9 ++++++ init.org | 2 ++ lib/media/jao-spt.el | 77 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 88 insertions(+) create mode 100644 lib/media/jao-spt.el 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 +;; 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 . + +;;; 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 -- cgit v1.2.3