summaryrefslogtreecommitdiff
path: root/evil-collection-emms.el
diff options
context:
space:
mode:
authorPierre Neidhardt <ambrevar@gmail.com>2017-12-29 22:11:07 +0100
committerPierre Neidhardt <ambrevar@gmail.com>2017-12-29 22:11:07 +0100
commit4ce6968d221e98d0ad522082711ea927d80017af (patch)
tree92484e64360cfda8f8b7569ada873cbe5500c448 /evil-collection-emms.el
parent9fb666e8bcbb9ec9b227cdd3280933943a007e85 (diff)
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.
Diffstat (limited to 'evil-collection-emms.el')
-rw-r--r--evil-collection-emms.el130
1 files changed, 66 insertions, 64 deletions
diff --git a/evil-collection-emms.el b/evil-collection-emms.el
index 9ccbf41..a2866bc 100644
--- a/evil-collection-emms.el
+++ b/evil-collection-emms.el
@@ -43,13 +43,7 @@
;;; - next/previous
;;; - fast-forward/backward
-;;; TODO: Add bindings to emms-browser-search-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))
+;;; TODO: Add bindings to emms-browser-search-mode-map and emms-metaplaylist-mode-map.
(defun evil-collection-emms-playlist-mode-insert-newline-above ()
"Insert a newline above point."
@@ -81,64 +75,67 @@ The return value is the yanked text."
(evil-next-line)
(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 ()
"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
- (dolist (map (list emms-browser-mode-map emms-playlist-mode-map))
- (evil-define-key* 'motion map
- "+" '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-collection-emms-browser-setup))
+ (evil-set-initial-state 'emms-playlist-mode 'motion)
(evil-define-key 'motion emms-playlist-mode-map
;; playback controls
@@ -153,13 +150,18 @@ The return value is the yanked text."
"gk" 'emms-previous
(kbd "<return>") 'emms-playlist-mode-play-smart
+ ;; volume controls
+ "+" 'emms-volume-raise
+ "=" 'emms-volume-raise
+ "-" 'emms-volume-lower
+
+ "u" 'emms-playlist-mode-undo
+
;; motion
"gg" 'emms-playlist-mode-first
"G" 'emms-playlist-mode-last
"]" 'emms-playlist-mode-next
"[" 'emms-playlist-mode-previous
- "gj" 'emms-playlist-mode-next
- "gk" 'emms-playlist-mode-previous
"D" 'emms-playlist-mode-kill-track ; emms-browser uses "D"
"C" 'emms-playlist-mode-clear