emms: Fix emms-browser settings
EMMS bindings used to be broken because emms-browse-mode-map was defconst'd. This is now fixed upstream. We set the bindings in a separate function since it's not needed by EMMS users who don't use the browser.
This commit is contained in:
parent
9fb666e8bc
commit
4ce6968d22
|
@ -43,13 +43,7 @@
|
||||||
;;; - next/previous
|
;;; - next/previous
|
||||||
;;; - fast-forward/backward
|
;;; - fast-forward/backward
|
||||||
|
|
||||||
;;; TODO: Add bindings to emms-browser-search-mode-map.
|
;;; TODO: Add bindings to emms-browser-search-mode-map and emms-metaplaylist-mode-map.
|
||||||
|
|
||||||
;;; emms-browser does not run any mode hook. As such the default state is 'normal.
|
|
||||||
;;; TODO: Report upstream.
|
|
||||||
(defun evil-collection-emms-browser ()
|
|
||||||
"Default `emms-browser' to motion state."
|
|
||||||
(evil-motion-state))
|
|
||||||
|
|
||||||
(defun evil-collection-emms-playlist-mode-insert-newline-above ()
|
(defun evil-collection-emms-playlist-mode-insert-newline-above ()
|
||||||
"Insert a newline above point."
|
"Insert a newline above point."
|
||||||
|
@ -81,64 +75,67 @@ The return value is the yanked text."
|
||||||
(evil-next-line)
|
(evil-next-line)
|
||||||
(evil-collection-emms-playlist-mode-paste-before))
|
(evil-collection-emms-playlist-mode-paste-before))
|
||||||
|
|
||||||
|
(defun evil-collection-emms-browser-setup ()
|
||||||
|
;; TODO: Why doesn't evil-set-initial-state work with emms-browser-mode?
|
||||||
|
(add-hook 'emms-browser-mode-hook 'evil-motion-state)
|
||||||
|
|
||||||
|
(evil-define-key 'motion emms-browser-mode-map
|
||||||
|
;; playback controls
|
||||||
|
"x" 'emms-pause
|
||||||
|
"X" 'emms-stop
|
||||||
|
"r" 'emms-random
|
||||||
|
"<" 'emms-seek-backward
|
||||||
|
">" 'emms-seek-forward
|
||||||
|
(kbd "<return>") 'emms-browser-add-tracks
|
||||||
|
(kbd "C-<return>") 'emms-browser-add-tracks-and-play
|
||||||
|
|
||||||
|
;; volume controls
|
||||||
|
"+" 'emms-volume-raise
|
||||||
|
"=" 'emms-volume-raise
|
||||||
|
"-" 'emms-volume-lower
|
||||||
|
|
||||||
|
"u" 'emms-playlist-mode-undo
|
||||||
|
|
||||||
|
;; motion
|
||||||
|
"[" 'emms-browser-prev-non-track
|
||||||
|
"]" 'emms-browser-next-non-track
|
||||||
|
"gj" 'emms-browser-prev-non-track
|
||||||
|
"gk" 'emms-browser-next-non-track
|
||||||
|
|
||||||
|
(kbd "<tab>") 'emms-browser-toggle-subitems
|
||||||
|
(kbd "SPC") 'emms-browser-toggle-subitems
|
||||||
|
;; TODO: Use S-<tab>?
|
||||||
|
"g1" 'emms-browser-collapse-all
|
||||||
|
"g2" 'emms-browser-expand-to-level-2
|
||||||
|
"g3" 'emms-browser-expand-to-level-3
|
||||||
|
"g4" 'emms-browser-expand-to-level-4
|
||||||
|
"g0" 'emms-browser-expand-all
|
||||||
|
"ga" 'emms-browse-by-artist
|
||||||
|
"gA" 'emms-browse-by-album
|
||||||
|
"gb" 'emms-browse-by-genre
|
||||||
|
"gy" 'emms-browse-by-year
|
||||||
|
"gc" 'emms-browse-by-composer
|
||||||
|
"gp" 'emms-browse-by-performer
|
||||||
|
|
||||||
|
"/" 'emms-isearch-buffer ; This shows hidden items during search.
|
||||||
|
|
||||||
|
;; filter
|
||||||
|
;; "" 'emms-browser-previous-filter ; TODO: What does this do?
|
||||||
|
;; "" 'emms-browser-next-filter
|
||||||
|
|
||||||
|
"s" (lookup-key emms-browser-mode-map (kbd "s"))
|
||||||
|
"g" (lookup-key emms-browser-mode-map (kbd "W")) ;; TODO: This overrides other "g-" prefixed keys.
|
||||||
|
|
||||||
|
"C" 'emms-browser-clear-playlist
|
||||||
|
"D" 'emms-browser-delete-files
|
||||||
|
"d" 'emms-browser-view-in-dired
|
||||||
|
"gd" 'emms-playlist-mode-goto-dired-at-point)) ; "d" does the same, keep "gd" for consistency.
|
||||||
|
|
||||||
(defun evil-collection-emms-setup ()
|
(defun evil-collection-emms-setup ()
|
||||||
"Set up `evil' bindings for `emms'."
|
"Set up `evil' bindings for `emms'."
|
||||||
(advice-add 'emms-browser :after 'evil-collection-emms-browser)
|
|
||||||
(evil-set-initial-state 'emms-playlist-mode 'motion)
|
|
||||||
|
|
||||||
(with-eval-after-load 'emms-browser
|
(with-eval-after-load 'emms-browser
|
||||||
(dolist (map (list emms-browser-mode-map emms-playlist-mode-map))
|
(evil-collection-emms-browser-setup))
|
||||||
(evil-define-key* 'motion map
|
(evil-set-initial-state 'emms-playlist-mode 'motion)
|
||||||
"+" 'emms-volume-raise
|
|
||||||
"=" 'emms-volume-raise
|
|
||||||
"-" 'emms-volume-lower
|
|
||||||
"u" 'emms-playlist-mode-undo))
|
|
||||||
|
|
||||||
;; TODO: Why do we need to define emms-browser-mode-map after load and not emms-playlist-mode-map?
|
|
||||||
(evil-define-key 'motion emms-browser-mode-map
|
|
||||||
;; playback controls
|
|
||||||
"x" 'emms-pause
|
|
||||||
"X" 'emms-stop
|
|
||||||
"r" 'emms-random
|
|
||||||
"<" 'emms-seek-backward
|
|
||||||
">" 'emms-seek-forward
|
|
||||||
(kbd "<return>") 'emms-browser-add-tracks
|
|
||||||
(kbd "C-<return>") 'emms-browser-add-tracks-and-play
|
|
||||||
|
|
||||||
;; motion
|
|
||||||
"[" 'emms-browser-prev-non-track
|
|
||||||
"]" 'emms-browser-next-non-track
|
|
||||||
"gj" 'emms-browser-prev-non-track
|
|
||||||
"gk" 'emms-browser-next-non-track
|
|
||||||
|
|
||||||
(kbd "<tab>") 'emms-browser-toggle-subitems
|
|
||||||
(kbd "SPC") 'emms-browser-toggle-subitems
|
|
||||||
;; TODO: Use S-<tab>?
|
|
||||||
"g1" 'emms-browser-collapse-all
|
|
||||||
"g2" 'emms-browser-expand-to-level-2
|
|
||||||
"g3" 'emms-browser-expand-to-level-3
|
|
||||||
"g4" 'emms-browser-expand-to-level-4
|
|
||||||
"g0" 'emms-browser-expand-all
|
|
||||||
"ga" 'emms-browse-by-artist
|
|
||||||
"gA" 'emms-browse-by-album
|
|
||||||
"gb" 'emms-browse-by-genre
|
|
||||||
"gy" 'emms-browse-by-year
|
|
||||||
"gc" 'emms-browse-by-composer
|
|
||||||
"gp" 'emms-browse-by-performer
|
|
||||||
|
|
||||||
"/" 'emms-isearch-buffer ; This shows hidden items during search.
|
|
||||||
|
|
||||||
;; filter
|
|
||||||
;; "" 'emms-browser-previous-filter ; TODO: What does this do?
|
|
||||||
;; "" 'emms-browser-next-filter
|
|
||||||
|
|
||||||
"s" (lookup-key emms-browser-mode-map (kbd "s"))
|
|
||||||
"g" (lookup-key emms-browser-mode-map (kbd "W")) ;; TODO: This overrides other "g-" prefixed keys.
|
|
||||||
|
|
||||||
"C" 'emms-browser-clear-playlist
|
|
||||||
"D" 'emms-browser-delete-files
|
|
||||||
"d" 'emms-browser-view-in-dired
|
|
||||||
"gd" 'emms-playlist-mode-goto-dired-at-point)) ; "d" does the same, keep "gd" for consistency.
|
|
||||||
|
|
||||||
(evil-define-key 'motion emms-playlist-mode-map
|
(evil-define-key 'motion emms-playlist-mode-map
|
||||||
;; playback controls
|
;; playback controls
|
||||||
|
@ -153,13 +150,18 @@ The return value is the yanked text."
|
||||||
"gk" 'emms-previous
|
"gk" 'emms-previous
|
||||||
(kbd "<return>") 'emms-playlist-mode-play-smart
|
(kbd "<return>") 'emms-playlist-mode-play-smart
|
||||||
|
|
||||||
|
;; volume controls
|
||||||
|
"+" 'emms-volume-raise
|
||||||
|
"=" 'emms-volume-raise
|
||||||
|
"-" 'emms-volume-lower
|
||||||
|
|
||||||
|
"u" 'emms-playlist-mode-undo
|
||||||
|
|
||||||
;; motion
|
;; motion
|
||||||
"gg" 'emms-playlist-mode-first
|
"gg" 'emms-playlist-mode-first
|
||||||
"G" 'emms-playlist-mode-last
|
"G" 'emms-playlist-mode-last
|
||||||
"]" 'emms-playlist-mode-next
|
"]" 'emms-playlist-mode-next
|
||||||
"[" 'emms-playlist-mode-previous
|
"[" 'emms-playlist-mode-previous
|
||||||
"gj" 'emms-playlist-mode-next
|
|
||||||
"gk" 'emms-playlist-mode-previous
|
|
||||||
|
|
||||||
"D" 'emms-playlist-mode-kill-track ; emms-browser uses "D"
|
"D" 'emms-playlist-mode-kill-track ; emms-browser uses "D"
|
||||||
"C" 'emms-playlist-mode-clear
|
"C" 'emms-playlist-mode-clear
|
||||||
|
|
Loading…
Reference in New Issue