123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
(package-initialize)
;; Install use-package
;; (https://jwiegley.github.io/use-package/installation/)
;; mkdir -p "~/.emacs.d/plugins/"
;; torsocks git clone https://github.com/jwiegley/use-package.git ~/.emacs.d/plugins/use-package
;; cd ~/.emacs.d/plugins/use-package
;; make
;; (add-to-list 'load-path "~/.emacs.d/plugins/use-package")
(require 'use-package)
(use-package emms
;; Configuration for MPV and simple modeline ----------
;; mkdir -p "~/.emacs.d/plugins/"
;; cd "~/.emacs.d/plugins/"
;; torsocks git clone https://git.savannah.gnu.org/git/emms.git
;; cd emms
;; make emms-print-metadata
;; mv src/emms-print-metadata .
:load-path "~/.emacs.d/plugins/emms/"
:config
;; Load only what is needed from emms-minimalistic
(use-package emms-source-file)
(use-package emms-source-playlist)
(use-package emms-player-simple)
(use-package emms-player-mpv)
;; Load only what is needed from emms-setup
(use-package emms-playlist-mode)
(use-package emms-info)
(use-package emms-mode-line)
(use-package emms-mark)
(use-package emms-show-all)
(use-package emms-playing-time)
(use-package emms-player-mpd)
(use-package emms-playlist-sort)
(use-package emms-mode-line-icon)
(use-package emms-cue)
(use-package emms-last-played)
(use-package emms-metaplaylist-mode)
(use-package emms-i18n)
;; Use emms-print-metadata
(use-package emms-info-libtag
:config
(setq emms-info-libtag-program-name
"~/.emacs.d/plugins/emms/emms-print-metadata"
emms-info-functions '(emms-info-libtag)))
(setq
;; Default time to seek back and forward
emms-seek-seconds 5
;; Use MPV only
emms-player-list '(emms-player-mpv)
;; emms-show-format "♪ %s" ; overriden by emms-cycle-mode
emms-source-file-default-directory "~/Music/"
emms-info-asynchronously t
;; Auto-set the playlist mode
emms-playlist-default-major-mode 'emms-playlist-mode)
;; Show the track in the mode-line
(emms-mode-line 1)
;; Clear the mode-line (at the beginning)
(emms-mode-line-blank)
;; Show the playing time in the modeline
(emms-playing-time 1)
;; Does emms-print-metadata deal with CUE? ==> remove
(add-to-list 'emms-info-functions 'emms-info-cueinfo)
;; Testing
(add-hook 'emms-player-started-hook
'emms-last-played-update-current)
(with-eval-after-load 'info
(info-initialize)
(add-to-list 'Info-directory-list
"~/.emacs.d/plugins/emms/docs/"))
;; ;; Disable cache (loading bunch of files on start?!)
;; (emms-cache-disable)
;; Redefine emms to just load the playlist
(defun my-emms ()
"my: Switch to the current emms-playlist buffer, use
emms-playlist-mode and query for a directory tree to add to
the playlist."
(interactive)
(if (or (null emms-playlist-buffer)
(not (buffer-live-p emms-playlist-buffer)))
(call-interactively 'dired))
(emms-playlist-mode-go))
(defun my-emms-random ()
"my: Toggle the emms random play mode"
(interactive)
(if emms-random-playlist
(setq emms-random-playlist nil)
(setq emms-random-playlist t)))
(defun my-emms-track-description (track)
"my: Get the EMMS description or the base file name of the
current track"
(let ((desc (emms-info-track-description track)))
(if (file-readable-p desc)
(file-name-nondirectory desc)
desc))
)
;; Show the track artist and song name, or file name
(setq emms-track-description-function
'my-emms-track-description)
(add-to-list 'emms-track-initialize-functions
'emms-info-initialize-track)
;; Short mode-line for EMMS
(use-package emms-mode-line-cycle
;; https://github.com/momomo5717/emms-mode-line-cycle.git
:load-path "~/.emacs.d/plugins/emms-mode-line-cycle"
:config
(emms-mode-line-cycle 1)
)
(define-key emms-playlist-mode-map "a" 'emms-add-file)
(define-key emms-playlist-mode-map "P" 'emms-add-playlist)
(define-key emms-playlist-mode-map "S" 'emms-seek)
(define-key emms-playlist-mode-map "\C-cs" 'emms-shuffle)
:bind
("s-m s-m" . my-emms)
;; ("s-m s-B" . emms-browser)
("s-m a" . emms-add-file)
("s-m P" . emms-add-playlist)
("s-m e" . emms-tag-editor-edit)
("<XF86AudioPrev>" . emms-previous)
("<XF86AudioNext>" . emms-next)
("s-m SPC" . emms-pause)
("s-m n" . emms-next)
("s-m p" . emms-previous)
("s-m SPC" . emms-pause)
("<XF86AudioPlay>" . emms-pause)
("s-m S" . emms-seek)
("s-m <" . emms-seek-backward)
("s-m >" . emms-seek-forward)
("s-m s" . emms-stop)
("s-m C" . emms-playlist-current-clear)
("s-m C-c s" . emms-shuffle)
("<XF86AudioStop>" . emms-stop)
("s-m d a" . emms-add-dired)
)