(require 'emms) (require 'emms-source-file) (require 'emms-source-playlist) (require 'emms-player-mpd) (require 'emms-player-simple) (require 'emms-playlist-mode) (require 'emms-playlist-limit) (require 'emms-info) (require 'emms-cache) (require 'emms-mode-line) (require 'emms-streams) (require 'emms-stream-info) (require 'emms-playing-time) (require 'emms-playlist-sort) (require 'emms-browser) (require 'emms-metaplaylist-mode) (require 'emms-bookmarks) (require 'emms-history) (require 'emms-volume) (require 'gawd-lists)
(setq emms-history-file "~/.emms/history"
emms-score-file "~/.emms/scores"
emms-cache-file "~/.emms/cache"
emms-stream-bookmarks-file "~/.emms/stream-bookmarks")
(setq emms-source-file-default-directory "/usr/archive/music"
emms-player-mpd-music-directory "/usr/archive/music"
emms-player-mpd-server-name "music.srvr.nix")
(setq emms-player-list '(emms-player-mpd
emms-player-gstreamer))
(add-to-list 'emms-info-functions 'emms-info-mpd)
(setq emms-volume-change-function 'emms-volume-mpd-change)
(if (featurep 'xemacs)
(progn
(define-modeline-control "emms" nil
"Modeline control for EMMS.")
(setq-default modeline-emms '((emms-mode-line-active-p . (emms-mode-line-string))
(emms-playing-time-display-p . (emms-playing-time-string))))
(setq modeline-format (splice-equal '(")%]") (cons modeline-emms-extent 'modeline-emms) modeline-format)))
(defvar mode-line-emms '((emms-mode-line-active-p . (emms-mode-line-string))
(emms-playing-time-display-p . (emms-playing-time-string)))
"String displayed in the modeline for EMMS.")
(put 'mode-line-emms 'risky-local-variable t)
(setq mode-line-format (splice-before 'gawd-uptime-mode-line-string 'mode-line-emms mode-line-format)))
(setq emms-mode-line-format " «%s»")
(setq emms-playing-time-display-format " [%s]")
(defun emms-mode-line (arg)
"Turn on `emms-mode-line' iff ARG is positive, off otherwise."
(if (and arg (> arg 0))
(progn
(setq emms-mode-line-active-p t)
(add-hook 'emms-track-updated-functions 'emms-mode-line-alter)
(add-hook 'emms-player-finished-hook 'emms-mode-line-blank)
(add-hook 'emms-player-stopped-hook 'emms-mode-line-blank)
(add-hook 'emms-player-started-hook 'emms-mode-line-alter))
(setq emms-mode-line-active-p nil)
(remove-hook 'emms-track-updated-functions 'emms-mode-line-alter)
(remove-hook 'emms-player-finished-hook 'emms-mode-line-blank)
(remove-hook 'emms-player-stopped-hook 'emms-mode-line-blank)
(remove-hook 'emms-player-started-hook 'emms-mode-line-alter)))
(defun emms-playing-time-mode-line ())
(defun emms-playing-time-restore-mode-line ())
(emms-mode-line 1)
(emms-playing-time-enable-display)
(setq emms-playlist-sort-list '(info-composer info-album info-artist 'info-tracknumber))
(defun nix-emms-browser-track-composer-or-artist-format (bdata fmt)
"Display the composer or the artist, whichever is set, then the item."
(concat
"%i"
(let ((track (emms-browser-format-elem fmt "T"))
(composer (emms-browser-format-elem fmt "C"))
(artist (emms-browser-format-elem fmt "a")))
(if (and track (not (string= track "0")))
"%T "
"")
(if composer
"%C: "
(if artist
"%a: ")))
"%n"))
(setq emms-browser-info-title-format 'nix-emms-browser-track-composer-or-artist-format)
(setq emms-browser-playlist-info-title-format 'nix-emms-browser-track-composer-or-artist-format)
(setq emms-browser-info-album-format 'nix-emms-browser-track-composer-or-artist-format)
(setq emms-browser-playlist-info-album-format 'nix-emms-browser-track-composer-or-artist-format)
(defun emms-browser-next-mapping-type (current-mapping)
"Return the next sensible mapping.
Eg. if CURRENT-MAPPING is currently 'info-artist, return 'info-album."
(cond
((eq current-mapping 'info-artist) 'info-album)
((eq current-mapping 'info-composer) 'info-album)
((eq current-mapping 'info-performer) 'info-album)
((eq current-mapping 'info-album) 'info-title)
((eq current-mapping 'info-genre) 'info-composer)
((eq current-mapping 'info-year) 'info-composer)))
(defun nix-emms-browser-make-composer-name (entry type)
"Return a name for ENTRY, used for making a bdata object.
Prioritizes composer over artist."
(let ((key (car entry))
(track (cadr entry))
artist composer title) (cond
((eq type 'info-title)
(setq artist (emms-track-get track 'info-artist))
(setq composer (emms-track-get track 'info-composer))
(setq title (emms-track-get track 'info-title))
(if (not (or (and artist title)
(and composer title)))
key
(concat (or composer artist) " - " title)))
(t key))))
(setq emms-browser-default-browse-type 'info-composer
emms-browser-make-name-function 'nix-emms-browser-make-composer-name)
(defun nix-emms-info-track-description (track)
"Return a description of the current track."
(let ((person (or (emms-track-get track 'info-composer)
(emms-track-get track 'info-artist)))
(album (emms-track-get track 'info-album))
(title (emms-track-get track 'info-title)))
(if (and person album title)
(format "%s's %s: %s" person album title)
(if (and person title)
(format "%s's %s" person title)
(emms-track-simple-description track)))))
(setq emms-track-description-function 'nix-emms-info-track-description)
(define-minor-mode emms-volume-minor-mode
"Allows volume setting with + and - after an initial key combo."
:global t
:init-value nil
:lighter " (+/-)"
:keymap '(("<F11>" . emms-volume-mode-plus)
("<F2>" . emms-volume-mode-minus)))
(setq emms-source-file-directory-tree-function 'emms-source-file-directory-tree-find)
(emms-cache-enable)
(emms-history-load)
(condition-case nil (emms-player-mpd-connect) (error nil))
(provide 'init-music)