aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNix <Nix>2007-08-18 13:34:00 +0000
committerNix <nix@esperi.org.uk>2007-08-18 13:34:00 +0000
commitd4e5e5f2f58f45b79296b907ccac28272703a7fb (patch)
treeb19874b35a117855578b5a25eb9d9795579a96fe
parent44f24c3b68c3155099fdc484804d00ddd909170d (diff)
Add support for composer and performer tags.
The browser keybindings are somewhat discontiguous to avoid breaking people's finger macros: browsing by composer and performer are `b 5' and `b 6' respectively, where artist is `b 1'. In the tag editor, I changed the note format character to %;, making room for composer as %c. I've not added support to last.fm for composer or performer, as it doesn't seem to support either. (I suspect that in most cases the composer should be reported as the artist if it is present, but that is not impolemented here.) darcs-hash:20070818133412-984cd-07ed55c9bf357ee6119f6d70fc2f267e9e8ecef9.gz
-rw-r--r--emms-browser.el69
-rw-r--r--emms-info-ogg.el2
-rw-r--r--emms-info.el2
-rw-r--r--emms-player-mpd.el2
-rw-r--r--emms-playlist-limit.el4
-rw-r--r--emms-playlist-sort.el10
-rw-r--r--emms-tag-editor.el10
7 files changed, 87 insertions, 12 deletions
diff --git a/emms-browser.el b/emms-browser.el
index 48df21c..171eaaa 100644
--- a/emms-browser.el
+++ b/emms-browser.el
@@ -46,8 +46,8 @@
;; c) the extra window closed, and both buffers buried
;; If you just want access to the browser, try M-x
-;; emms-browse-by-TYPE, where TYPE is one of artist, album, genre or
-;; year. These commands can also be used while smart browsing to
+;; emms-browse-by-TYPE, where TYPE is one of artist, album, composer,
+;; genre or year. These commands can also be used while smart browsing to
;; change the browsing category.
;; If you don't want to activate the code with (emms-devel), you can
@@ -82,13 +82,17 @@
;; s A emms-browser-search-by-album
;; s a emms-browser-search-by-artist
+;; s c emms-browser-search-by-composer
;; s s emms-browser-search-by-names
;; s t emms-browser-search-by-title
+;; s p emms-browser-search-by-performer
;; b 1 emms-browse-by-artist
;; b 2 emms-browse-by-album
;; b 3 emms-browse-by-genre
;; b 4 emms-browse-by-year
+;; b 5 emms-browse-by-composer
+;; b 6 emms-browse-by-performer
;; W a p emms-browser-lookup-album-on-pitchfork
;; W a w emms-browser-lookup-album-on-wikipedia
@@ -96,6 +100,12 @@
;; W A p emms-browser-lookup-artist-on-pitchfork
;; W A w emms-browser-lookup-artist-on-wikipedia
+;; W C p emms-browser-lookup-composer-on-pitchfork
+;; W C w emms-browser-lookup-composer-on-wikipedia
+
+;; W P p emms-browser-lookup-performer-on-pitchfork
+;; W P w emms-browser-lookup-performer-on-wikipedia
+
;; Displaying covers
;; -------------------------------------------------------------------
@@ -221,6 +231,8 @@
;; %y the album year
;; %A the album name
;; %a the artist name of the track
+;; %C the composer name of the track
+;; %p the performer name of the track
;; %t the title of the track
;; %T the track number
;; %cS a small album cover
@@ -235,9 +247,10 @@
;; The faces used to display the various fields are also customizable.
;; They are in the format emms-browser-<type>-face, where type is one
-;; of "year/genre", "artist", "album" or "track". Note that faces lack
-;; the initial "info-" part. For example, to change the artist face,
-;; type M-x customize-face emms-browser-artist-face.
+;; of "year/genre", "artist", "composer", "performer", "album" or
+;; "track". Note that faces lack the initial "info-" part. For example,
+;; to change the artist face, type
+;; M-x customize-face emms-browser-artist-face.
;; Deleting files
;; -------------------------------------------------------------------
@@ -437,12 +450,20 @@ Called once for each directory."
(define-key map (kbd "b 2") 'emms-browse-by-album)
(define-key map (kbd "b 3") 'emms-browse-by-genre)
(define-key map (kbd "b 4") 'emms-browse-by-year)
+ (define-key map (kbd "b 5") 'emms-browse-by-composer)
+ (define-key map (kbd "b 6") 'emms-browse-by-performer)
(define-key map (kbd "s a") 'emms-browser-search-by-artist)
+ (define-key map (kbd "s c") 'emms-browser-search-by-composer)
+ (define-key map (kbd "s p") 'emms-browser-search-by-performer)
(define-key map (kbd "s A") 'emms-browser-search-by-album)
(define-key map (kbd "s t") 'emms-browser-search-by-title)
(define-key map (kbd "s s") 'emms-browser-search-by-names)
(define-key map (kbd "W A w") 'emms-browser-lookup-artist-on-wikipedia)
(define-key map (kbd "W A p") 'emms-browser-lookup-artist-on-pitchfork)
+ (define-key map (kbd "W C w") 'emms-browser-lookup-composer-on-wikipedia)
+ (define-key map (kbd "W C p") 'emms-browser-lookup-composer-on-pitchfork)
+ (define-key map (kbd "W P w") 'emms-browser-lookup-performer-on-wikipedia)
+ (define-key map (kbd "W P p") 'emms-browser-lookup-performer-on-pitchfork)
(define-key map (kbd "W a w") 'emms-browser-lookup-album-on-wikipedia)
(define-key map (kbd "W a p") 'emms-browser-lookup-album-on-pitchfork)
(define-key map (kbd ">") 'emms-browser-next-filter)
@@ -590,6 +611,8 @@ example function is `emms-browse-by-artist'."
(goto-char (point-min))))
(emms-browser-add-category "artist" 'info-artist)
+(emms-browser-add-category "composer" 'info-composer)
+(emms-browser-add-category "performer" 'info-performer)
(emms-browser-add-category "album" 'info-album)
(emms-browser-add-category "genre" 'info-genre)
(emms-browser-add-category "year" 'info-year)
@@ -693,6 +716,8 @@ browser, and hit 'b 1' to refresh.")))
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-artist)
((eq current-mapping 'info-year) 'info-artist)))
@@ -882,6 +907,8 @@ Uses `emms-browser-alpha-sort-function'."
(cond
((or
(eq type 'info-artist)
+ (eq type 'info-composer)
+ (eq type 'info-performer)
(eq type 'info-year)
(eq type 'info-genre))
'emms-browser-sort-by-name)
@@ -1312,6 +1339,14 @@ Disabled by default."
(interactive)
(emms-browser-lookup-wikipedia 'info-artist))
+(defun emms-browser-lookup-composer-on-wikipedia ()
+ (interactive)
+ (emms-browser-lookup-wikipedia 'info-composer))
+
+(defun emms-browser-lookup-performer-on-wikipedia ()
+ (interactive)
+ (emms-browser-lookup-wikipedia 'info-performer))
+
(defun emms-browser-lookup-album-on-wikipedia ()
(interactive)
(emms-browser-lookup-wikipedia 'info-album))
@@ -1320,6 +1355,14 @@ Disabled by default."
(interactive)
(emms-browser-lookup-pitchfork 'info-artist))
+(defun emms-browser-lookup-composer-on-pitchfork ()
+ (interactive)
+ (emms-browser-lookup-pitchfork 'info-composer))
+
+(defun emms-browser-lookup-composer-on-pitchfork ()
+ (interactive)
+ (emms-browser-lookup-pitchfork 'info-composer))
+
(defun emms-browser-lookup-album-on-pitchfork ()
(interactive)
(emms-browser-lookup-pitchfork 'info-album))
@@ -1506,6 +1549,14 @@ included."
(interactive)
(emms-browser-search '(info-artist)))
+(defun emms-browser-search-by-composer ()
+ (interactive)
+ (emms-browser-search '(info-composer)))
+
+(defun emms-browser-search-by-performer ()
+ (interactive)
+ (emms-browser-search '(info-performer)))
+
(defun emms-browser-search-by-title ()
(interactive)
(emms-browser-search '(info-title)))
@@ -1516,7 +1567,7 @@ included."
(defun emms-browser-search-by-names ()
(interactive)
- (emms-browser-search '(info-artist info-title info-album)))
+ (emms-browser-search '(info-artist info-composer info-performer info-title info-album)))
;; --------------------------------------------------
;; Album covers
@@ -1618,6 +1669,8 @@ If > album level, most of the track data will not make sense."
("y" . ,(emms-track-get track 'info-year))
("A" . ,(emms-track-get track 'info-album))
("a" . ,(emms-track-get track 'info-artist))
+ ("C" . ,(emms-track-get track 'info-composer))
+ ("p" . ,(emms-track-get track 'info-performer))
("t" . ,(emms-track-get track 'info-title))
("T" . ,(emms-browser-track-number track))
("cS" . ,(emms-browser-get-cover-str path 'small))
@@ -1668,6 +1721,8 @@ If > album level, most of the track data will not make sense."
((or (eq type 'info-year)
(eq type 'info-genre)) "year/genre")
((eq type 'info-artist) "artist")
+ ((eq type 'info-composer) "composer")
+ ((eq type 'info-performer) "performer")
((eq type 'info-album) "album")
((eq type 'info-title) "track"))))
(intern
@@ -1797,6 +1852,8 @@ the text that it generates."
(emms-browser-make-face "year/genre" "#aaaaff" "#444477" 1.5)
(emms-browser-make-face "artist" "#aaaaff" "#444477" 1.3)
+(emms-browser-make-face "composer" "#aaaaff" "#444477" 1.3)
+(emms-browser-make-face "performer" "#aaaaff" "#444477" 1.3)
(emms-browser-make-face "album" "#aaaaff" "#444477" 1.1)
(emms-browser-make-face "track" "#aaaaff" "#444477" 1.0)
diff --git a/emms-info-ogg.el b/emms-info-ogg.el
index f8db9d4..035a8c6 100644
--- a/emms-info-ogg.el
+++ b/emms-info-ogg.el
@@ -77,6 +77,8 @@ ogg-comments.el"
(emms-track-set track 'info-title (emms-info-ogg-get-comment "title" info))
(emms-track-set track 'info-artist (emms-info-ogg-get-comment "artist" info))
+ (emms-track-set track 'info-composer (emms-info-ogg-get-comment "composer" info))
+ (emms-track-set track 'info-performer (emms-info-ogg-get-comment "performer" info))
(emms-track-set track 'info-album (emms-info-ogg-get-comment "album" info))
(emms-track-set track 'info-note (emms-info-ogg-get-comment "comment" info))
(emms-track-set track 'info-year (emms-info-ogg-get-comment "date" info))
diff --git a/emms-info.el b/emms-info.el
index 57c66d1..d60edb9 100644
--- a/emms-info.el
+++ b/emms-info.el
@@ -30,6 +30,8 @@
;; are defined:
;; info-artist - string naming the artist
+;; info-composer - string naming the composer
+;; info-performer - string naming the performer
;; info-title - string naming the title of the song
;; info-album - string naming the album
;; info-tracknumber - string(?) naming the track number
diff --git a/emms-player-mpd.el b/emms-player-mpd.el
index b80f76d..b1a0d04 100644
--- a/emms-player-mpd.el
+++ b/emms-player-mpd.el
@@ -1064,6 +1064,8 @@ rather than EMMS."
(let ((name (car data))
(value (cdr data)))
(setq name (cond ((string= name "artist") 'info-artist)
+ ((string= name "composer") 'info-composer)
+ ((string= name "performer") 'info-performer)
((string= name "title") 'info-title)
((string= name "album") 'info-album)
((string= name "track") 'info-tracknumber)
diff --git a/emms-playlist-limit.el b/emms-playlist-limit.el
index f532ca2..6b67986 100644
--- a/emms-playlist-limit.el
+++ b/emms-playlist-limit.el
@@ -85,6 +85,8 @@
(emms-playlist-limit-do (quote ,attribute) regexp)))
(define-emms-playlist-limit info-artist)
+(define-emms-playlist-limit info-composer)
+(define-emms-playlist-limit info-performer)
(define-emms-playlist-limit info-title)
(define-emms-playlist-limit info-album)
(define-emms-playlist-limit info-year)
@@ -98,6 +100,8 @@
(define-key emms-playlist-mode-map (kbd "/ n") 'emms-playlist-limit-to-name)
(define-key emms-playlist-mode-map (kbd "/ a") 'emms-playlist-limit-to-info-artist)
+(define-key emms-playlist-mode-map (kbd "/ c") 'emms-playlist-limit-to-info-composer)
+(define-key emms-playlist-mode-map (kbd "/ p") 'emms-playlist-limit-to-info-performer)
(define-key emms-playlist-mode-map (kbd "/ t") 'emms-playlist-limit-to-info-title)
(define-key emms-playlist-mode-map (kbd "/ b") 'emms-playlist-limit-to-info-album)
(define-key emms-playlist-mode-map (kbd "/ y") 'emms-playlist-limit-to-info-year)
diff --git a/emms-playlist-sort.el b/emms-playlist-sort.el
index 00398da..0977eb5 100644
--- a/emms-playlist-sort.el
+++ b/emms-playlist-sort.el
@@ -36,8 +36,8 @@
(defcustom emms-playlist-sort-list '(info-artist info-album)
"Sorting list used by `emms-playlist-sort-by-list'.
Currently it understands the following fields: name info-artist
-info-title info-album info-genre info-playing-time
-info-tracknumber."
+imfo-composer info-performer info-title info-album info-genre
+info-playing-time info-tracknumber."
:type 'symbol
:group 'emms-playlist-sort)
@@ -56,6 +56,8 @@ info-tracknumber."
(define-emms-playlist-sort name)
(define-emms-playlist-sort info-artist)
+(define-emms-playlist-sort info-composer)
+(define-emms-playlist-sort info-performer)
(define-emms-playlist-sort info-title)
(define-emms-playlist-sort info-album)
(define-emms-playlist-sort info-year)
@@ -86,6 +88,8 @@ increasingly."
'(progn
(define-key emms-playlist-mode-map (kbd "S n") 'emms-playlist-sort-by-name)
(define-key emms-playlist-mode-map (kbd "S a") 'emms-playlist-sort-by-info-artist)
+ (define-key emms-playlist-mode-map (kbd "S c") 'emms-playlist-sort-by-info-composer)
+ (define-key emms-playlist-mode-map (kbd "S p") 'emms-playlist-sort-by-info-performer)
(define-key emms-playlist-mode-map (kbd "S t") 'emms-playlist-sort-by-info-title)
(define-key emms-playlist-mode-map (kbd "S b") 'emms-playlist-sort-by-info-album)
(define-key emms-playlist-mode-map (kbd "S y") 'emms-playlist-sort-by-info-year)
@@ -140,7 +144,7 @@ ie. by album name and then by track number."
(catch 'return
(dolist (info emms-playlist-sort-list)
(case info
- ((name info-artist info-title info-album info-genre)
+ ((name info-artist info-composer info-performer info-title info-album info-genre)
(when (emms-string< (emms-track-get a info)
(emms-track-get b info))
(throw 'return t)))
diff --git a/emms-tag-editor.el b/emms-tag-editor.el
index 1f7cbbb..ae79faa 100644
--- a/emms-tag-editor.el
+++ b/emms-tag-editor.el
@@ -37,13 +37,15 @@
(defvar emms-tag-editor-tags
'((info-artist . "a")
+ (info-composer . "c")
+ (info-performer . "p")
(info-title . "t")
(info-album . "l")
(info-tracknumber . "n")
(info-year . "y")
(info-genre . "g")
(info-date . "d")
- (info-note . "c"))
+ (info-note . ";"))
"An alist to determine the format of various info tags.")
(defvar emms-tag-editor-edit-buffer "*EMMS-TAGS*"
@@ -79,12 +81,14 @@ is the format template. The format specification is like:
m -- Track description
f -- Track name
a -- Track info-artist
+ c -- Track info-composer
+ p -- Track info-performer
t -- Track info-title
l -- Track info-album
n -- Track info-tracknumber
y -- Track info-year
g -- Track info-genre
- c -- Track info-note
+ ; -- Track info-note
You can add new specifications in `emms-tag-editor-tags', and use
`emms-tag-editor-make-format' to create a new format string.
@@ -134,7 +138,7 @@ See also `emms-tag-editor-tag-file' and `emms-tag-editor-tag-ogg'.")
(let ((info-tag (intern (concat "info-" tag))))
(when (> (length (setq val (emms-track-get track info-tag))) 0)
(setq args (append (list "-t" (concat (upcase tag) "=" val)) args)))))
- '("artist" "title" "album" "tracknumber" "date" "genre" "note"))
+ '("artist" "composer" "performer" "title" "album" "tracknumber" "date" "genre" "note"))
(when args
(apply #'call-process "vorbiscomment" nil
(get-buffer-create emms-tag-editor-log-buffer)