From 2e9ce571d23e4675e7e310d19944748641de847c Mon Sep 17 00:00:00 2001 From: josephmturner <50191376+josephmturner@users.noreply.github.com> Date: Tue, 8 Feb 2022 04:12:35 -0800 Subject: [PATCH] simple-mpc: initial support (#588) --- evil-collection.el | 1 + .../simple-mpc/evil-collection-simple-mpc.el | 117 ++++++++++++++++++ 2 files changed, 118 insertions(+) create mode 100644 modes/simple-mpc/evil-collection-simple-mpc.el diff --git a/evil-collection.el b/evil-collection.el index a990733..3f4fbd5 100644 --- a/evil-collection.el +++ b/evil-collection.el @@ -248,6 +248,7 @@ This will bind additional find-* type commands, e.g. usages, assignments, etc.." sh-script ,@(when (>= emacs-major-version 28) '(shortdoc)) simple + simple-mpc slime sly speedbar diff --git a/modes/simple-mpc/evil-collection-simple-mpc.el b/modes/simple-mpc/evil-collection-simple-mpc.el new file mode 100644 index 0000000..7676aff --- /dev/null +++ b/modes/simple-mpc/evil-collection-simple-mpc.el @@ -0,0 +1,117 @@ +;;; evil-collection-simple-mpc.el --- Bindings for `simple-mpc' -*- lexical-binding: t -*- +;; Copyright (C) 2022 Joseph Turner + +;; Author: Joseph Turner +;; Maintainer: Joseph Turner +;; URL: https://github.com/emacs-evil/evil-collection +;; Version: 0.0.1 +;; Package-Requires: ((emacs "26.3")) +;; Keywords: evil, simple-mpc, processes, mpd + +;; 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: +;;; Bindings for `simple-mpc'. + +;;; Code: +(require 'simple-mpc nil t) +(require 'evil-collection) + +(defconst evil-collection-simple-mpc-maps '(simple-mpc-mode-map + simple-mpc-query-mode-map + simple-mpc-current-playlist-mode-map)) + +(defun evil-collection-simple-mpc-set-bindings () + "Set up 'evil' bindings for 'simple-mpc-mode', 'simple-mpc-query-mode', and 'simple-mpc-current-playlist-mode'." + (evil-collection-define-key 'normal 'simple-mpc-mode-map + "p" 'simple-mpc-toggle + ">" 'simple-mpc-next + "<" 'simple-mpc-prev + "f" 'simple-mpc-seek-forward + "b" 'simple-mpc-seek-backward + "s" 'simple-mpc-query + "c" 'simple-mpc-view-current-playlist + "l" 'simple-mpc-load-playlist + "S" 'simple-mpc-shuffle-current-playlist + "C" 'simple-mpc-clear-current-playlist + "+" 'simple-mpc-increase-volume + "-" 'simple-mpc-decrease-volume + + "q" 'simple-mpc-quit + "ZQ" 'simple-mpc-quit + "ZZ" 'simple-mpc-quit) + + (evil-collection-define-key 'normal 'simple-mpc-current-playlist-mode-map + "x" 'simple-mpc-delete + "d" 'simple-mpc-delete + + "q" 'simple-mpc-current-playlist-quit + "ZQ" 'simple-mpc-current-playlist-quit + "ZZ" 'simple-mpc-current-playlist-quit + + "" 'simple-mpc-play-current-line + (kbd "RET") 'simple-mpc-play-current-line) + + (evil-collection-define-key 'normal 'simple-mpc-query-mode-map + "o" 'simple-mpc-query-sort + + "q" 'simple-mpc-query-quit + "ZQ" 'simple-mpc-query-quit + "ZZ" 'simple-mpc-query-quit + + "" 'simple-mpc-query-add + (kbd "M-RET") 'simple-mpc-query-add + + "" 'simple-mpc-query-add-and-play + (kbd "RET") 'simple-mpc-query-add-and-play)) + +(defvar simple-mpc-main-buffer-name "*simple-mpc-main*") + +(defun evil-collection-simple-mpc-replace-main-view () + "Update main view to show keys in use with evil mode." + (interactive) + (when + (string= (buffer-name) simple-mpc-main-buffer-name) + (read-only-mode -1) + (erase-buffer) + (insert (propertize "* simple-mpc *\n\n" + 'face 'simple-mpc-main-name) + (propertize " * controls\n" 'face 'simple-mpc-main-headers) + " * [p]lay/pause toggle\n" + " * [>] next track\n" + " * [<] previous track\n" + " * seek [f]orward\n" + + " * seek [b]ackward\n" + " * [+] increase volume\n" + " * [-] decrease volume\n" + (propertize "\n * playlist\n" 'face 'simple-mpc-main-headers) + " * view [c]urrent playlist\n" + " * [C]lear current playlist\n" + " * [S]huffle playlist\n" + " * [l]oad playlist\n" + " * [s]earch database\n" + (propertize "\n * misc\n" 'face 'simple-mpc-main-headers) + " * [q]uit"))) + +;;;###autoload +(defun evil-collection-simple-mpc-setup () + "Set up simple-mpc bindings and main view." + (evil-collection-simple-mpc-set-bindings) + (add-hook 'simple-mpc-mode-hook 'evil-collection-simple-mpc-replace-main-view) + (add-hook 'simple-mpc-query-mode-hook 'evil-normalize-keymaps) + (add-hook 'simple-mpc-current-playlist-mode-hook 'evil-normalize-keymaps)) + +(provide 'evil-collection-simple-mpc) +;;; evil-collection-simple-mpc.el ends here