evil-collection/modes/lms/evil-collection-lms.el

208 lines
8.4 KiB
EmacsLisp

;;; evil-collection-lms.el --- Evil bindings for lms.el -*- lexical-binding: t -*-
;; Copyright (C) 2021 Edgar Vincent
;; Author: Edgar Vincent <e-v@posteo.net>
;; URL: https://github.com/emacs-evil/evil-collection
;; Version: 0.0.1
;; Package-Requires: ((emacs "25.1"))
;; Keywords: evil, multimedia, music, logitechmediaserver, squeezebox
;; This file is not part of GNU Emacs.
;;
;; This file 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, or (at your
;; option) any later version.
;;
;; This file 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.
;;
;; For a full copy of the GNU General Public License
;; see <http://www.gnu.org/licenses/>.
;;; Commentary:
;; Evil bindings for lms.el.
;;
;;; Code:
(require 'lms nil t)
(require 'evil-collection)
(defvar lms-ui-playing-now-mode-map)
(defvar lms-ui-players-mode-map)
(defvar lms-ui-playlist-mode-map)
(defvar lms-ui-track-info-mode-map)
(defvar lms-ui-tracks-list-mode-map)
(defvar lms--ui-pl-tracks) ;; Prevents 'Reference to free variable' error.
(defconst evil-collection-lms-maps '(lms-ui-players-mode-map
lms-ui-playing-now-mode-map
lms-ui-playlist-mode-map
lms-ui-track-info-mode-map
lms-ui-tracks-list-mode-map
lms-ui-year-album-artist-list-mode-map))
(defconst evil-collection-lms-modes '(lms-players-mode
lms-ui-playing-now-mode
lms-ui-track-info-mode
lms-ui-players-mode
lms-ui-playlist-mode
lms-ui-tracks-list-mode
lms-ui-year-album-artist-list-mode))
(defun evil-collection-lms-ui-track-info-mode-quit ()
"Exit lms-ui-track-info-mode."
(interactive)
(kill-buffer "*LMS: Track Information*")
(lms-ui-playing-now-refresh))
(defun evil-collection-lms-ui-players-mode-quit ()
"Exit lms-ui-players-mode."
(interactive)
(kill-buffer (format "*LMS: Players*"))
(lms-ui-playing-now-refresh))
(defun evil-collection-lms-ui-playlist-mode-quit ()
"Exit lms-ui-playlist-mode."
(interactive)
(kill-buffer (format "*LMS: Playlist [%d tracks]*" (length lms--ui-pl-tracks)))
(lms-ui-playing-now-refresh))
(defun evil-collection-lms-ui-tracks-list-mode-quit ()
"Exit lms-ui-tracks-list-mode."
(interactive)
(kill-buffer)
(lms-ui-playing-now-refresh))
(defalias 'evil-collection-lms-ui-year-album-artist-list-mode-quit
'evil-collection-lms-ui-tracks-list-mode-quit
"Exit lms-ui-tracks-list-mode.")
(defun evil-collection-lms-goto-bottom ()
"Move the point to the last penultimate line of the current buffer."
(goto-char (max-char))
(forward-line -1))
(defun evil-collection-lms-next-line ()
"Move the point to the next line, except if it is at the end of the buffer."
(interactive)
(forward-line 1)
(when (eobp) (forward-line -1)))
;;;###autoload
(defun evil-collection-lms-setup ()
"Set up `evil' bindings for `lms'."
(dolist (map evil-collection-lms-maps)
(evil-collection-inhibit-insert-state map))
(dolist (mode evil-collection-lms-modes)
(evil-set-initial-state mode 'normal))
(evil-collection-define-key 'normal 'lms-ui-playing-now-mode-map
"t" 'lms-ui-playing-now-change-player-power-state
(kbd "C-p") 'lms-ui-playing-now-players-list
"R" 'lms-ui-playing-now-change-rating
(kbd "C-=") 'lms-ui-playing-now-set-volume
"x" 'lms-ui-playing-now-play-pause
(kbd "RET") 'lms-ui-playing-now-play-pause
"p" 'lms-ui-playing-now-play
"s" 'lms-ui-playing-now-stop
"J" 'lms-ui-playing-now-next
(kbd "<right>") 'lms-ui-playing-now-next
"K" 'lms-ui-playing-now-prev
(kbd "<left>") 'lms-ui-playing-now-prev
"+" 'lms-ui-playing-now-volume-up
"=" 'lms-ui-playing-now-volume-up
"-" 'lms-ui-playing-now-volume-down
"m" 'lms-ui-playing-now-volume-mute
"r" 'lms-ui-playing-now-cycle-repeat
"S" 'lms-ui-playing-now-cycle-shuffle
"u" 'lms-ui-playing-now-refresh
"i" 'lms-ui-playing-now-show-track-info
"P" 'lms-ui-playing-now-show-playlist
"T" 'lms-ui-playing-now-album-tracks-list
"A" 'lms-ui-playing-now-artist-albums-list
"Y" 'lms-ui-playing-now-year-albums-list
"M" 'lms-ui-playing-now-browse-music-library
"g?" 'lms-ui-playing-now-help
"gh" 'lms-ui-playing-now-help
"q" 'lms-ui-playing-now-quit)
(evil-collection-define-key 'normal 'lms-ui-track-info-mode-map
"R" 'lms-ui-track-info-change-rating
"K" 'lms-ui-track-info-prev
(kbd "<left>") 'lms-ui-track-info-prev
"J" 'lms-ui-track-info-next
(kbd "<right>") 'lms-ui-track-info-next
"g?" 'lms-ui-playing-now-help
"gh" 'lms-ui-playing-now-help
"q" 'evil-collection-lms-ui-track-info-mode-quit)
(evil-collection-define-key 'normal 'lms-ui-players-mode-map
[remap evil-goto-line] 'evil-collection-lms-goto-bottom
[remap end-of-defun] 'evil-collection-lms-goto-bottom
[remap evil-forward-paragraph] 'evil-collection-lms-goto-bottom
[remap evil-next-line] 'evil-collection-lms-next-line
(kbd "RET") 'lms-ui-players-select
"x" 'lms-ui-players-playpause
"t" 'lms-ui-players-toggle-power
"g?" 'lms-ui-playing-now-help
"gh" 'lms-ui-playing-now-help
"q" 'evil-collection-lms-ui-players-mode-quit)
(evil-collection-define-key 'normal 'lms-ui-playlist-mode-map
[remap evil-goto-line] 'evil-collection-lms-goto-bottom
[remap end-of-defun] 'evil-collection-lms-goto-bottom
[remap evil-forward-paragraph] 'evil-collection-lms-goto-bottom
[remap evil-next-line] 'evil-collection-lms-next-line
(kbd "RET") 'lms-ui-playlist-play
"i" 'lms-ui-playlist-track-info
"C" 'lms-ui-playlist-jump-to-current
"d" 'lms-ui-playlist-delete-track
(kbd "<delete>") 'lms-ui-playlist-delete-track
"cc" 'lms-ui-playlist-clear
"ct" 'lms-ui-playlist-clear-until-track
"cf" 'lms-ui-playlist-clear-from-track
"u" 'lms-ui-playlist
"A" 'lms-ui-playlist-artist-albums-list
"T" 'lms-ui-playlist-album-tracks-list
"Y" 'lms-ui-playlist-year-albums-list
"g?" 'lms-ui-playing-now-help
"gh" 'lms-ui-playing-now-help
"q" 'evil-collection-lms-ui-playlist-mode-quit)
(evil-collection-define-key 'normal 'lms-ui-tracks-list-mode-map
[remap evil-goto-line] 'evil-collection-lms-goto-bottom
[remap end-of-defun] 'evil-collection-lms-goto-bottom
[remap evil-forward-paragraph] 'evil-collection-lms-goto-bottom
[remap evil-next-line] 'evil-collection-lms-next-line
"i" 'lms-ui-tl-track-info
(kbd "RET") 'lms-ui-tl-track-info
"p" 'lms-ui-tl-to-playlist
"P" 'lms-ui-tl-all-to-playlist
"Y" 'lms-ui-tl-by-year
"A" 'lms-ui-tl-by-artist
"g?" 'lms-ui-playing-now-help
"gh" 'lms-ui-playing-now-help
"q" 'evil-collection-lms-ui-tracks-list-mode-quit)
(evil-collection-define-key 'normal 'lms-ui-year-album-artist-list-mode-map
[remap evil-goto-line] 'evil-collection-lms-goto-bottom
[remap end-of-defun] 'evil-collection-lms-goto-bottom
[remap evil-forward-paragraph] 'evil-collection-lms-goto-bottom
[remap evil-next-line] 'evil-collection-lms-next-line
"Y" 'lms-ui-yaal-by-year
"A" 'lms-ui-yaal-by-artist
"a" 'lms-ui-yaal-by-album
"p" 'lms-ui-yaal-to-playlist
"g?" 'lms-ui-playing-now-help
"gh" 'lms-ui-playing-now-help
"q" 'evil-collection-lms-ui-year-album-artist-list-mode-quit))
(provide 'evil-collection-lms)
;;; evil-collection-lms.el ends here