From 2bc4236bb1b1cf1605ea155fb8d22c6b2ab06283 Mon Sep 17 00:00:00 2001 From: Pierre Neidhardt Date: Mon, 9 Apr 2018 15:59:19 +0530 Subject: * lisp/emms-browser.el: Use albumartist before artist by default I believe it to be the most common use-case. For the old behaviour, revert `emms-browser-get-track-field-function' to 'emms-browser-get-track-field-simple. --- doc/emms.texinfo | 6 ++++++ lisp/emms-browser.el | 28 ++++++++++++++++++++++++++-- 2 files changed, 32 insertions(+), 2 deletions(-) diff --git a/doc/emms.texinfo b/doc/emms.texinfo index 863e236..d18ce6b 100644 --- a/doc/emms.texinfo +++ b/doc/emms.texinfo @@ -1726,6 +1726,12 @@ artist->album->track when you switch to the 'singles' filter: (add-hook 'emms-browser-filter-changed-hook 'toggle-album-display) @end lisp +Furthermore, you can customize +@var{emms-browser-get-track-field-function} to choose which the metadata +fields used for the different tree nodes (@code{'info-artist}, +@code{info-year}, etc.). For instance, you can choose whether to +organize the tree by artist, album artist or performer. + @subheading Changing Display Format Format strings govern the way items are displayed in the browser and diff --git a/lisp/emms-browser.el b/lisp/emms-browser.el index 0ff8a4f..4079181 100644 --- a/lisp/emms-browser.el +++ b/lisp/emms-browser.el @@ -319,7 +319,7 @@ are displayed. It is called with two arguments - track and type." :type 'function) (defcustom emms-browser-get-track-field-function - 'emms-browser-get-track-field-simple + 'emms-browser-get-track-field-albumartist "*A function to get an element from a track. Change this to customize the way data is organized in the browser. For example, @@ -328,7 +328,9 @@ directory name to determine the artist. This means that soundtracks, compilations and so on don't populate the artist view with lots of 1-track elements." :group 'emms-browser - :type 'function) + :type '(choice (function :tag "Simple" 'emms-browser-get-track-field-simple) + (function :tag "Albumartist-sorting" 'emms-browser-get-track-field-albumartist) + (function :tag "Other"))) (defcustom emms-browser-covers '("cover_small" "cover_med" "cover_large") @@ -645,8 +647,30 @@ compilations, etc." (funcall emms-browser-get-track-field-function track type)) (defun emms-browser-get-track-field-simple (track type) + "Return TYPE from TRACK without any heuristic. +This function can be used as +`emms-browser-get-track-field-function'." (emms-track-get track type "misc")) +(defun emms-browser-get-track-field-albumartist (track type) + "Return TYPE from TRACK with an albumartist-oriented heuristic. +For 'info-artist TYPE, use 'info-albumartistsort, 'info-albumartist, +'info-artistsort. +For 'info-year TYPE, use 'info-originalyear, 'info-originaldate and +'info-date symbols." + (cond ((eq type 'info-artist) + (or (emms-track-get track 'info-albumartistsort) + (emms-track-get track 'info-albumartist) + (emms-track-get track 'info-artistsort) + (emms-track-get track 'info-artist ""))) + ((eq type 'info-year) + (let ((date (or (emms-track-get track 'info-originaldate) + (emms-track-get track 'info-originalyear) + (emms-track-get track 'info-date) + (emms-track-get track 'info-year "")))) + (emms-format-date-to-year date))) + (t (emms-track-get track type "misc")))) + (defun emms-browser-get-track-field-use-directory-name (track type) (if (eq type 'info-artist) (emms-browser-get-artist-from-path -- cgit v1.2.3