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 "") 'emms-browser-add-tracks + (kbd "C-") '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 "") 'emms-browser-toggle-subitems + (kbd "SPC") 'emms-browser-toggle-subitems + ;; TODO: Use S-? + "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 "") 'emms-browser-add-tracks - (kbd "C-") '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 "") 'emms-browser-toggle-subitems - (kbd "SPC") 'emms-browser-toggle-subitems - ;; TODO: Use S-? - "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 "") '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