;;; 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")) (defvar jao-spt-format "'%s %t - %a [%r] %f'") (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 -f %s" jao-spt-bin jao-spt-format))))) (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-toggle-shuffle () (interactive) (jao-spt--exec "pb" "--shuffle")) ;;;###autoload (defun jao-spt-set-up () (jao-minibuffer-add-msg-variable 'jao-spt--status-str)) (provide 'jao-spt) ;;; jao-spt.el ends here