emms-patches
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Emms-patches] darcs patch: browser: beginnings of format string sup...


From: Damien Elmes
Subject: [Emms-patches] darcs patch: browser: beginnings of format string sup... (and 2 more)
Date: Tue, 4 Jul 2006 13:44:10 +0900 (JST)

Sun Jul  2 18:13:18 JST 2006  Damien Elmes <address@hidden>
  * browser: beginnings of format string support

Tue Jul  4 13:40:20 JST 2006  Damien Elmes <address@hidden>
  * browser: add default covers, fix bug

Tue Jul  4 13:43:15 JST 2006  Damien Elmes <address@hidden>
  * browser: don't need point-at-bol, code has been refactored
New patches:

[browser: beginnings of format string support
Damien Elmes <address@hidden>**20060702091318] {
hunk ./emms-browser.el 32
+;; Usage
+;; -------------------------------------------------------------------
+
hunk ./emms-browser.el 50
-;; SPC      - expand/contract current item
-;; RET      - add current artist/album/title/etc
-;; C-RET    - as above, but select the first added file and play
-;; /        - isearch through the available items
-;; q        - bury both buffers (if you use emms-smart-browse)
+;; (out of date, hit c-h b in the buffer to find out)
hunk ./emms-browser.el 65
+;; Displaying covers
+;; -------------------------------------------------------------------
+
+;; The browser will attempt to display cover images if they're
+;; available. By default it looks for images cover_small.jpg,
+;; cover_med.jpg, etc. Customize emms-browser-covers to use your own
+;; covers. Note that you'll probably want to resize your existing
+;; covers to particular sizes. Suggested sizes are 100x100 for small,
+;; and 200x200 for medium.
+
+;; Also emacs by default will jump around a lot when scrolling a
+;; buffer with images. Set the following variables to prevent that:
+
+;;   scroll-up-aggressively 0.0
+;;   scroll-down-aggressively 0.0
+
hunk ./emms-browser.el 220
-    (define-key map (kbd "C-1") 'emms-browse-by-artist)
-    (define-key map (kbd "C-2") 'emms-browse-by-album)
-    (define-key map (kbd "C-3") 'emms-browse-by-genre)
-    (define-key map (kbd "C-4") 'emms-browse-by-year)
+    (define-key map (kbd "b 1") 'emms-browse-by-artist)
+    (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)
hunk ./emms-browser.el 238
-(defface emms-browser-tracks-face
-  '((((class color) (background dark))
-     (:foreground "#aaaaff"))
-    (((class color) (background light))
-     (:foreground "Blue"))
-    (((type tty) (class mono))
-     (:inverse-video t))
-    (t (:background "Blue")))
-  "Face for the tracks in a playlist buffer."
-  :group 'emms-browser-mode)
-
-(defface emms-browser-tracks-sub-face-1
-  '((((class color) (background dark))
-     (:foreground "#7777ff"))
-    (((class color) (background light))
-     (:foreground "Blue"))
-    (((type tty) (class mono))
-     (:inverse-video t))
-    (t (:background "Blue")))
-  "Face for the tracks in a playlist buffer."
-  :group 'emms-browser-mode)
-
-(defface emms-browser-tracks-sub-face-2
-  '((((class color) (background dark))
-     (:foreground "#4444ff"))
-    (((class color) (background light))
-     (:foreground "Blue"))
-    (((type tty) (class mono))
-     (:inverse-video t))
-    (t (:background "Blue")))
-  "Face for the tracks in a playlist buffer."
-  :group 'emms-browser-mode)
-
-(defface emms-browser-tracks-sub-face-3
-  '((((class color) (background dark))
-     (:foreground "#3333ff"))
-    (((class color) (background light))
-     (:foreground "Blue"))
-    (((type tty) (class mono))
-     (:inverse-video t))
-    (t (:background "Blue")))
-  "Face for the tracks in a playlist buffer."
-  :group 'emms-browser-mode)
-
merger 0.0 (
hunk ./emms-browser.el 423
-     (add-text-properties (line-beginning-position) (point)
+     (add-text-properties (point-at-bol) (point)
hunk ./emms-browser.el 407
-    ;; this code duplication is ugly, but necessary at the moment
-    ;; because the top level data is stored differently
-    (emms-with-inhibit-read-only-t
-     (if (eq (emms-browser-bdata-type bdata) 'info-album)
-         (let ((cover (emms-browser-get-cover-from-album
-                       bdata 'small)))
-           (when cover
-             (emms-browser-insert-cover cover))
-           ;; if the album is a top-level element, display the artist
-           ;; name, too
-           (insert name
-                   " ("
-                   (emms-browser-get-track-field (car tracks)
-                                                 'info-artist)
-                   ")"))
-       (insert name))
-     (add-text-properties (line-beginning-position) (point)
-                          (list
-                           'emms-browser-bdata bdata
-                           'face 'emms-browser-tracks-face))
-     (insert "\n"))))
+    (emms-browser-insert-format bdata)))
)
hunk ./emms-browser.el 477
-  "Return a name for ENTRY, used for making a bdata object.
-This uses `emms-browser-make-name-function'"
-  ;; we use cadr because we are guaranteed only one track in entry.
-  (funcall emms-browser-make-name-function entry type))
-
-(defun emms-browser-make-name-standard (entry type)
-  "The standard way of formating names in the browser.
-Individual tracks are in the form 'tracknum. artist - title'
-Albums are in the form '(year) album'."
+  "Return a name for ENTRY, used for making a bdata object."
hunk ./emms-browser.el 487
-      (concat (emms-browser-track-number track)
-              artist " - " title)))
-    ((eq type 'info-album)
-    (concat (emms-browser-year-number track)
-            key))
+      (concat artist " - " title)))
hunk ./emms-browser.el 500
-         tracknum)
-       ". "))))
+         tracknum)))))
merger 0.0 (
hunk ./emms-browser.el 685
-     (add-text-properties (line-beginning-position) (point)
+     (add-text-properties (point-at-bol) (point)
hunk ./emms-browser.el 673
-  (let* ((level (emms-browser-bdata-level data-item))
-         (name (emms-browser-bdata-name data-item))
-         (indent (emms-browser-make-indent-for-level level)))
-    (emms-with-inhibit-read-only-t
-     (insert
-      indent)
-     (when (eq (emms-browser-bdata-type data-item) 'info-album)
-       (let ((cover (emms-browser-get-cover-from-album
-                     data-item 'small)))
-         (when cover
-           (emms-browser-insert-cover cover))))
-     (insert name)
-     (add-text-properties (line-beginning-position) (point)
-                          (list
-                           'emms-browser-bdata data-item
-                           'face (emms-browser-face-from-level level)))
-     (insert "\n"))))
-
-(defun emms-browser-make-indent-for-level (level)
-  (make-string (* 2 (1- level)) ?\  ))
-
-(defun emms-browser-face-from-level (level)
-  "Return a face appropriate for LEVEL."
-  (intern
-   (concat "emms-browser-tracks-sub-face-"
-           (int-to-string (1- level)))))
+  (emms-browser-insert-format data-item))
)
hunk ./emms-browser.el 783
-        (group (emms-browser-bdata-name bdata))
-        cover)
+        group cover)
+    (setq group (emms-browser-format-line bdata 'playlist))
hunk ./emms-browser.el 789
-      (if (eq type 'info-album)
-          (progn
-            (setq cover
-                  (emms-browser-get-cover-from-album bdata 'medium))
-            (when cover
-              (emms-browser-insert-cover cover))
-            (insert " " group "\n"))
-        (insert
-         (format "[%s] %s\n" short-type group))))))
+      ;; FIXME - we've cut out [type] - support it in format strings
+      (insert group "\n"))))
hunk ./emms-browser.el 806
-            "\n")))
+             "\n")))
hunk ./emms-browser.el 853
-        ;; add full track name as there may not be enough context
-        (setq name (concat
-                    ;; place the track number first - this looks
-                    ;; better for multi-artist albums especially.
-                    (or (and (> level 1)
-                             (emms-browser-track-number item))
-                        "")
-                    (emms-track-get item 'info-artist)
-                    " - "
-                    (emms-track-get item 'info-title)))
+        ;; there should only be one track in this bdata, so use the
+        ;; bdata
+        (setq name (emms-browser-format-line bdata 'playlist))
hunk ./emms-browser.el 1219
-  (provide 'emms-browser)
+(defun emms-browser-get-cover-str (path size)
+  (let ((cover (emms-browser-get-cover-from-path path size)))
+    (if cover
+        (emms-browser-make-cover cover)
+      ;; we use a single space so that cover & no cover tracks line up
+      ;; in a terminal
+      " ")))
+
+;; --------------------------------------------------
+;; Display formats & fonts
+;; --------------------------------------------------
+
+(defvar emms-browser-default-format "%i%n"
+  "indent + name")
+
+(defvar emms-browser-info-title-format "%i%T. %n")
+(defvar emms-browser-playlist-info-title-format
+  emms-browser-info-title-format)
+
+(defvar emms-browser-info-album-format
+  'emms-browser-year-and-album-fmt)
+(defvar emms-browser-playlist-info-album-format
+  'emms-browser-year-and-album-fmt-med)
+
+;; FIXME: make this nicer
+(defun emms-browser-year-and-album-fmt (bdata fmt)
+  (concat
+   "%cS"
+   (let ((year (emms-browser-format-elem fmt "%y")))
+     (if (and year (not (eq year 0)))
+         "(%y) "
+       ""))
+   "%n"))
+
+(defun emms-browser-year-and-album-fmt-med (bdata fmt)
+  (concat
+   "%cM"
+   (let ((year (emms-browser-format-elem fmt "%y")))
+     (if (and year (not (eq year 0)))
+         "(%y) "
+       ""))
+   "%n"))
+
+(defface emms-browser-tracks-sub-face-1
+  '((((class color) (background dark))
+     (:foreground "#aaaaff"))
+    (((class color) (background light))
+     (:foreground "Blue"))
+    (((type tty) (class mono))
+     (:inverse-video t))
+    (t (:background "Blue")))
+  "Face for the tracks in a playlist buffer."
+  :group 'emms-browser-mode)
+
+(defface emms-browser-tracks-sub-face-2
+  '((((class color) (background dark))
+     (:foreground "#7777ff"))
+    (((class color) (background light))
+     (:foreground "Blue"))
+    (((type tty) (class mono))
+     (:inverse-video t))
+    (t (:background "Blue")))
+  "Face for the tracks in a playlist buffer."
+  :group 'emms-browser-mode)
+
+(defface emms-browser-tracks-sub-face-3
+  '((((class color) (background dark))
+     (:foreground "#4444ff"))
+    (((class color) (background light))
+     (:foreground "Blue"))
+    (((type tty) (class mono))
+     (:inverse-video t))
+    (t (:background "Blue")))
+  "Face for the tracks in a playlist buffer."
+  :group 'emms-browser-mode)
+
+(defface emms-browser-tracks-sub-face-4
+  '((((class color) (background dark))
+     (:foreground "#3333ff"))
+    (((class color) (background light))
+     (:foreground "Blue"))
+    (((type tty) (class mono))
+     (:inverse-video t))
+    (t (:background "Blue")))
+  "Face for the tracks in a playlist buffer."
+  :group 'emms-browser-mode)
+
+(defun emms-browser-bdata-first-track (bdata)
+  "Return the first track from a given bdata.
+If > album level, most of the track data will not make sense."
+  (let ((type (emms-browser-bdata-type bdata)))
+    (if (eq type 'info-title)
+        (car (emms-browser-bdata-data bdata))
+      ;; recurse
+      (emms-browser-bdata-first-track
+       (car (emms-browser-bdata-data bdata))))))
+
+(defun emms-browser-insert-format (bdata)
+  (emms-with-inhibit-read-only-t
+   (insert
+    (emms-browser-format-line bdata)
+    "\n")))
+
+(defun emms-browser-make-indent-for-level (level)
+  (make-string (* 1 (1- level)) ?\  ))
+
+(defun emms-browser-get-format (bdata target)
+  (let* ((type (emms-browser-bdata-type bdata))
+         (target-str (or
+                      (and (eq target 'browser) "")
+                      (concat (symbol-name target) "-")))
+         (sym
+          (intern
+           (concat "emms-browser-"
+                   target-str
+                   (symbol-name type)
+                   "-format"))))
+    (if (boundp sym)
+        (symbol-value sym)
+      emms-browser-default-format)))
+
+(defun emms-browser-format-elem (format-string elem)
+  (cdr (assoc elem format-string)))
+
+(defun emms-browser-format-line (bdata &optional target)
+  "Return a propertized string to be inserted in the buffer."
+  (unless target
+    (setq target 'browser))
+  (let* ((name (emms-browser-bdata-name bdata))
+         (lvl (emms-browser-bdata-level bdata))
+         (type (emms-browser-bdata-type bdata))
+         (indent (or
+                  (and (eq target 'browser)
+                       (emms-browser-make-indent-for-level lvl))
+                  ""))
+         (track (emms-browser-bdata-first-track bdata))
+         (path (emms-track-get track 'name))
+         (face (emms-browser-get-face bdata))
+         (format (emms-browser-get-format bdata target))
+         (format-choices
+          `(("i" . ,indent)
+            ("n" . ,name)
+            ("y" . ,(emms-track-get track 'info-year))
+            ("A" . ,(emms-track-get track 'info-album))
+            ("a" . ,(emms-track-get track 'info-artist))
+            ("t" . ,(emms-track-get track 'info-title))
+            ("T" . ,(emms-browser-track-number track))
+            ("cS" . ,(emms-browser-get-cover-str path 'small))
+            ("cM" . ,(emms-browser-get-cover-str path 'medium))
+            ("cL" . ,(emms-browser-get-cover-str path 'large))))
+         str)
+
+    (when (functionp format)
+      (setq format (funcall format bdata format-choices)))
+
+    (setq str
+          (with-temp-buffer
+            (insert format)
+            (goto-char (point-min))
+            (let ((start (point-min)))
+              (when (re-search-forward "%c[SML]" nil t)
+                (setq start (point)))
+              (add-text-properties start (point-max)
+                                   (list 'face face)))
+            (buffer-string)))
+
+    (setq str (emms-browser-format-spec str format-choices))
+
+    ;; add the bdata object to the whole string
+    (add-text-properties
+     0 (length str)
+     (list 'emms-browser-bdata bdata) str)
+    str))
+
+(defun emms-browser-get-face (bdata)
+  "Return a suitable face for BDATA."
+  (let ((lvl (emms-browser-bdata-level bdata))
+        (type (emms-browser-bdata-type bdata)))
+    (intern
+     (concat "emms-browser-tracks-sub-face-"
+             (int-to-string lvl)))))
+
+;; based on gnus code
+(defun emms-browser-format-spec (format specification)
+  "Return a string based on FORMAT and SPECIFICATION.
+FORMAT is a string containing `format'-like specs like \"bash %u %k\",
+while SPECIFICATION is an alist mapping from format spec characters
+to values.  Any text properties on a %-spec itself are propagated to
+the text that it generates."
+  (with-temp-buffer
+    (insert format)
+    (goto-char (point-min))
+    (while (search-forward "%" nil t)
+      (cond
+       ;; Quoted percent sign.
+       ((eq (char-after) ?%)
+        (delete-char 1))
+       ;; Valid format spec.
+       ((looking-at "\\([-0-9.]*\\)\\([a-zA-Z]+\\)")
+        (let* ((num (match-string 1))
+               (spec (match-string 2))
+               (val (cdr (assoc spec specification))))
+          (unless val
+            (error "Invalid format character: %s" spec))
+          ;; Pad result to desired length.
+          (let ((text (format (concat "%" num "s") val)))
+            ;; Insert first, to preserve text properties.
+            (insert-and-inherit text)
+            ;; Delete the specifier body.
+            (delete-region (+ (match-beginning 0) (length text))
+                           (+ (match-end 0) (length text)))
+            ;; Delete the percent sign.
+            (delete-region (1- (match-beginning 0)) (match-beginning 0)))))
+       ;; Signal an error on bogus format strings.
+       (t
+        (error "Invalid format string"))))
+    (buffer-string)))
+
+(provide 'emms-browser)
}

[browser: add default covers, fix bug
Damien Elmes <address@hidden>**20060704044020] {
hunk ./emms-browser.el 136
+(defcustom emms-browser-default-covers nil
+  "*A list of default images to use if a cover isn't found."
+  :group 'emms-browser
+  :type 'string)
+
hunk ./emms-browser.el 1196
-  (let ((cover
-         (cond
-          ((functionp emms-browser-covers)
-           (funcall emms-browser-covers path size))
-          ((listp emms-browser-covers)
-           (concat (file-name-directory path)
-                   (cond
-                    ((eq size 'small)
-                     (nth 0 emms-browser-covers))
-                    ((eq size 'medium)
-                     (nth 1 emms-browser-covers))
-                    ((eq size 'large)
-                     (nth 2 emms-browser-covers))))))))
-    (when (and cover
-               (file-readable-p cover))
-      cover)))
+  (let* ((size-idx (cond
+                    ((eq size 'small) 0)
+                    ((eq size 'medium) 1)
+                    ((eq size 'large) 2)))
+         (cover
+          (cond
+           ((functionp emms-browser-covers)
+            (funcall emms-browser-covers path size))
+           ((listp emms-browser-covers)
+            (concat (file-name-directory path)
+                    (nth size-idx emms-browser-covers))))))
+    (if (and cover
+             (file-readable-p cover))
+        cover
+      ;; no cover found, use default
+      (when emms-browser-default-covers
+        (nth size-idx emms-browser-default-covers)))))
hunk ./emms-browser.el 1253
-   (let ((year (emms-browser-format-elem fmt "%y")))
-     (if (and year (not (eq year 0)))
+   (let ((year (emms-browser-format-elem fmt "y")))
+     (if (and year (not (string= year "0")))
hunk ./emms-browser.el 1262
-   (let ((year (emms-browser-format-elem fmt "%y")))
-     (if (and year (not (eq year 0)))
+   (let ((year (emms-browser-format-elem fmt "y")))
+     (if (and year (not (string= year "0")))
}

[browser: don't need point-at-bol, code has been refactored
Damien Elmes <address@hidden>**20060704044315] {
hunk ./emms-browser.el 412
-    ;; this code duplication is ugly, but necessary at the moment
-    ;; because the top level data is stored differently
-    (emms-with-inhibit-read-only-t
-     (if (eq (emms-browser-bdata-type bdata) 'info-album)
-         (let ((cover (emms-browser-get-cover-from-album
-                       bdata 'small)))
-           (when cover
-             (emms-browser-insert-cover cover))
-           ;; if the album is a top-level element, display the artist
-           ;; name, too
-           (insert name
-                   " ("
-                   (emms-browser-get-track-field (car tracks)
-                                                 'info-artist)
-                   ")"))
-       (insert name))
-     (add-text-properties (line-beginning-position) (point)
-                          (list
-                           'emms-browser-bdata bdata
-                           'face 'emms-browser-tracks-face))
-     (insert "\n"))))
+    (emms-browser-insert-format bdata)))
hunk ./emms-browser.el 658
-  (let* ((level (emms-browser-bdata-level data-item))
-         (name (emms-browser-bdata-name data-item))
-         (indent (emms-browser-make-indent-for-level level)))
-    (emms-with-inhibit-read-only-t
-     (insert
-      indent)
-     (when (eq (emms-browser-bdata-type data-item) 'info-album)
-       (let ((cover (emms-browser-get-cover-from-album
-                     data-item 'small)))
-         (when cover
-           (emms-browser-insert-cover cover))))
-     (insert name)
-     (add-text-properties (line-beginning-position) (point)
-                          (list
-                           'emms-browser-bdata data-item
-                           'face (emms-browser-face-from-level level)))
-     (insert "\n"))))
-
-(defun emms-browser-make-indent-for-level (level)
-  (make-string (* 2 (1- level)) ?\  ))
-
-(defun emms-browser-face-from-level (level)
-  "Return a face appropriate for LEVEL."
-  (intern
-   (concat "emms-browser-tracks-sub-face-"
-           (int-to-string (1- level)))))
+  (emms-browser-insert-format data-item))
}

Context:

[emms-browser: Use point-at-bol instead of line-beginning-position for XEmacs 
compatibility.
Michael Olson <address@hidden>**20060702033721] 
[cache: set coding cookie in cache file
Damien Elmes <address@hidden>**20060702030320] 
[Fix more XEmacs issues.
Michael Olson <address@hidden>**20060702020302] 
[Allow player to set the exact elapsed time of a track.  emms-player-mpd and 
emms-player-mpg321-remote both need this.
Michael Olson <address@hidden>**20060702012131] 
[Make emms-cache and emms-browser work with XEmacs.
Michael Olson <address@hidden>**20060702001247] 
[browser: bind 'C' to clear the playlist from the browser window.
address@hidden 
[emms-browser: add C-j as an alternative to C-RET for console users
address@hidden 
[browser: d for dired (missing half)
Damien Elmes <address@hidden>**20060630124050] 
[browser: add 'd' to open dired on the current directory
Damien Elmes <address@hidden>**20060629175424] 
[browser: fix bug with custom cover fetching function
Damien Elmes <address@hidden>**20060629141356] 
[browser: cover display, compilation support,more
Damien Elmes <address@hidden>**20060629132444
 - added optional rendering of cover images in the browser and playlist
   (see http://repose.cx/dump/browser-images.png)
 - display artist name if browsing by album
 - add `emms-browser-get-track-field-function', which allows you to
   customise the way the browser sorts the cache into various albums,
   artists, etc. includes a function (not on by default) which finds
   the artist name by the directory, not tag info - this prevents
   making lots of top level artist entries for artists who only appear
   on a compilation
] 
[emms-playlist-mode-window-width defcustom + emms-playlist-mode-center-when-go
address@hidden 
[make M-> act like a normal Emacs buffer for emms-playlist-mode
address@hidden 
[emms-last-played: Count the number of times a track has been played.
address@hidden
 
 By default, EMMS will now store the number of times you play a track.
] 
[emms-cache.el: fix missing paren in emms-cache-sync
address@hidden 
[emms-browser.el: fix bad keybinding for emms-browser-goto-random
address@hidden 
[emms-browser.el: emms-browser-goto-random moves the point to a random line in 
the browser.
address@hidden 
[cache: readability fix
Damien Elmes <address@hidden>**20060625110138] 
[cache: rename function, remove obsolete one, only mark dirty if necessary
Damien Elmes <address@hidden>**20060625105130] 
[emms-cache.el: Move the pruning code inside emms-cache-refresh.
address@hidden 
[function name change + testing emms-patches mailing-list
address@hidden 
[README: added a note about compiling emms-print-metadata, since it apparently 
wasn't obvious...
address@hidden 
[README: fix a small typo
Damien Elmes <address@hidden>**20060620091959] 
[README : Advanced configuration : added item about seeking.
address@hidden 
[emms-player-mplayer.el: Enable mplayer's slave mode for seek support by
address@hidden
 default.
] 
[AUTHORS: Update William's info.
address@hidden 
[browser: another read-only bug
Damien Elmes <address@hidden>**20060623171252] 
[browser: fix bug with read-only buffer
Damien Elmes <address@hidden>**20060623150933] 
[browser: more search stuff
Damien Elmes <address@hidden>**20060623150406
 - fix bug where we clobber emms-browser-buffer
 - clear search on new search
 - add new keybindings - 's a', 's s', etc. to search for different fields.
] 
[browser: preliminary browsing support
Damien Elmes <address@hidden>**20060623142837] 
[cache: add a routine to refresh metadata info
Damien Elmes <address@hidden>**20060622114528] 
[browser: use the filename if no useful metadata is available
Damien Elmes <address@hidden>**20060622112720] 
[browser: uniquify track names, mpg321-remote: restart dead process
Damien Elmes <address@hidden>**20060622111421] 
[browser: bugfixes, sort/display by year
Damien Elmes <address@hidden>**20060618122507
 - fix a bug with add-and-play on a single file
 - display album year if available
 - sort albums first by year
 - add c-1, c-2 etc keybindings to quickly browse by artist, album,
   etc. (conflicts with standard keybindings - assumption is that
   digit-argument is probably not very useful in the browser mode)
] 
[define-emms-simple-player: Check for existence of the player executable.
address@hidden 
[emms-player-mpd: Make the playable-p function return nil if we cannot start a 
connection to mpd.
Michael Olson <address@hidden>**20060616233847] 
[Rename `emms-score-show' to `emms-score-show-playing'. Add
address@hidden
 `emms-score-show-file-on-line'.
] 
[browser: put track number first (better for compilation albums)
Damien Elmes <address@hidden>**20060616153258] 
[browser: fix centering when adding new tracks to the playlist
Damien Elmes <address@hidden>**20060616132746] 
[browser: remember position when hitting 1,2,3 etc
Damien Elmes <address@hidden>**20060616131926] 
[browser: collapse before expanding (expand-to-level-2, etc)
Damien Elmes <address@hidden>**20060616110612] 
[browser: fix sorting on tracks without a track number
Damien Elmes <address@hidden>**20060616110222] 
[mpg321-remote: fix race condition
Damien Elmes <address@hidden>**20060616103159] 
[mpg321-remote: fix bug related to the player stopping
Damien Elmes <address@hidden>**20060616011318] 
[Add Adam Sjoegren (copyright got assigned)
address@hidden 
[mpg321-remote: defvar mask-stop-message
Damien Elmes <address@hidden>**20060615094217] 
[add player-mpg321-remote
Damien Elmes <address@hidden>**20060615063027
 - allows seeking in files
 - handles files with errors in them (the mpg321 simple version skips
   over the files)
] 
[browser: fix for the tracknumber fix patch
Damien Elmes <address@hidden>**20060615051156] 
[browser: handle nil track numbers
Damien Elmes <address@hidden>**20060615023650] 
[playlist: enable undo, add extra undo binding
Damien Elmes <address@hidden>**20060615022826] 
[browser: require emms-playlist-sort
Damien Elmes <address@hidden>**20060615015543] 
[browser: make defcustom lines user variables
Damien Elmes <address@hidden>**20060615013606] 
[playlist-mode: add 'C' to clear playlist
Damien Elmes <address@hidden>**20060615013417] 
[info: display progress when adding async
Damien Elmes <address@hidden>**20060615012854] 
[browser: expand/collapse levels, tab through entries
Damien Elmes <address@hidden>**20060614180725] 
[browser: refactor data format, bugfixes; emms: add emms-track-p
Damien Elmes <address@hidden>**20060614160048
 
 Subitems are now stored in a tree of "bdata" objects, which is
 generated when initially displaying the buffer. This makes rendering
 simpler and also fixes some bugs where tracks were not being sorted
 correctly in the browser and/or the playlist.
 
 Adding items to the playlist now inserts 'group' names when you add a
 whole album, artist, etc at a time. These names will be thrown away if
 you run emms-shuffle. The sorting routines will correctly sort the
 buffer, throwing away the group tags, but then throw an error because
 the buffer is not the size they expected it to be. Other playlist
 manipulation routines like next/previous should skip over the group
 names - if they don't, it's a bug in the playlist code.
 
 An example of the new interface is at:
 http://repose.cx/dump/emms-browser.png
] 
[emms-lyrics.el: Fix file-exists-p error when finding lyrics file for
address@hidden
 streams. At present, will just take care of tracks with 'file type.
] 
[added the section "Finding files and speed" to the manual
address@hidden 
[fix bug in emms-playlist-mode-center-current
address@hidden 
[removed superfluous comment (actually testing darcs send)
address@hidden 
[debian: add changelog for 2.0-2
address@hidden 
[debian: Install info file as well
address@hidden 
[browser: sorting, bugfixes
Damien Elmes <address@hidden>**20060612051800
 - add sorting for subitems (albums, tracks, etc)
 - make isearching expand the current entry automatically
 - rename subitems-exist to subitems-visible (clearer)
] 
[updated manual about emms-foobar-file prefix toggling
address@hidden 
[emms-cache: add pruning support, make save/load interactive
Damien Elmes <address@hidden>**20060611095400] 
[Use better exclude regexp, so that people can load music files with '#' in the 
middle of the name.
Michael Olson <address@hidden>**20060610230507] 
[emms-info: Never return 0 for info-mtime, since emms-time-less-p does not like 
this.  Use nil instead.
Michael Olson <address@hidden>**20060610230409] 
[Add mpd volume settings to custom
Martin Schoenmakers <address@hidden>**20060609231150
 
 Small patchlet so mpd users can use custom to change the volume setting
 backend to use the appropriate volume functions.
] 
[browse subcategories (eg artist->album->title)
Damien Elmes <address@hidden>**20060609185950
 - subcategories can now be expanded and contracted, and added to
   playlist
 - see the new keybindings at the top of the file
 - add new faces for the various sublevels (only the dark background
   colours are useful at the moment - any light background users want
   to fix that?)
 - fix a bug in emms-smart-browse with (recenter)
] 
[update emms-cache.el commentary
Damien Elmes <address@hidden>**20060609064935] 
[emms-player-mpd: Add functionality to dump MusicPD data into the EMMS cache.  
This allows for easy integration with emms-browser.el.
Michael Olson <address@hidden>**20060609043831] 
[emms-player-mpd: Rename volume functions to better match the namespace created 
by emms-volume.el.
Michael Olson <address@hidden>**20060609043643] 
[emms-player-mpd: Fix minor bug when importing the current MusicPD playlist 
into EMMS.
Michael Olson <address@hidden>**20060609043538] 
[emms-setup: Get rid of pointless compiler warning.
Michael Olson <address@hidden>**20060609042002] 
[emms-cache: Small compiler fix.
Michael Olson <address@hidden>**20060609041606] 
[emms-cache: Add standard enable/disable/toggle interface and do a docfix for 
emms-cache-set-function.
Michael Olson <address@hidden>**20060609040108] 
[Standardize copyright notices.  Add COPYING file.  Mention license in README.
Michael Olson <address@hidden>**20060608194123] 
[Fix compiler warnings in emms-cache.el.
Michael Olson <address@hidden>**20060608184612] 
[emms-metaplaylist-mode: Fix bug introduced by the recent emms-playlist-mode 
overhaul.  Add faces for light backgrounds.
Michael Olson <address@hidden>**20060608143846] 
[NEWS is new
address@hidden 
[emms-playlist-mode: Facify tracks on startup.
address@hidden 
[refactor browser mode creation code
Damien Elmes <address@hidden>**20060608123618
 - make the rendering function (browse-by-artist, etc) responsible for
   the mode name
 - fix a bug where the wrong buffer is used
] 
[browser sorting, and bug fixes
Damien Elmes <address@hidden>**20060608105253
 - sort tracks when they're added to the playlist
 - fix a bug where we didn't uniquify the buffer
 - distinguish between files and urls
 - modify emms-playlist-sort to accept an optional region
] 
[update modeline when changing browsing method
Damien Elmes <address@hidden>**20060608094037] 
[avoid rebuilding the browser window each time
Damien Elmes <address@hidden>**20060608092623] 
[fix RET on trailing \n
Damien Elmes <address@hidden>**20060608090703
 \n isn't propertized which means hitting RET on a playlist or browser
 entry fails. this patch moves the point before trying to read the
 properties.
] 
[add a metadata browser - emms-browser.el
Damien Elmes <address@hidden>**20060608084400
 * preliminary work on a metadata browser - still alpha, but it's
   useable for me
 * also updated my email address in emms-cache.el (whoops)
] 
[small typo fix
Damien Elmes <address@hidden>**20060608032546] 
[emms.el: Change directory to / before starting the player.
address@hidden 
[emms-playlist-mode: When making new overlays, do not allow the rear to 
advance.  This prevents some display issues.  If we really need to modify the 
text there, we should be using (insert-before-markers).
Michael Olson <address@hidden>**20060607215212] 
[Make emms-property-region bulletproof.
Michael Olson <address@hidden>**20060607215113] 
[Fix typo in emms-property-region
address@hidden 
[emms.el, simplified emms-property-region considerably.
address@hidden 
[Very basic support for recording the time you last played a track.
address@hidden
 
 * emms-last-played.el: New file.
   Nothing fancy right now, more to come soon.
 * emms-setup.el: emms-devel now requires and setups emms-last-played.
] 
[Mark the cache as dirty for each modification.
address@hidden 
[emms.el: The currently playing marker now should stay where it is, even for 
yanks
address@hidden 
[emms-playlist-mode: Stop overlay from being attached to text inserted before it
address@hidden 
[fix damien elmes's email address
Damien Elmes <address@hidden>**20060607154000] 
[emms sources now switch add/play behavior when a prefix argument is supplied.
address@hidden 
[Add autoloads to emms-setup.el
address@hidden 
[Typo, defvar => defcustom for emms-cache-set-function
address@hidden 
[Cleaned up the cached code in emms.el a bit
address@hidden 
[refactor caching code into emms-cache.el
Damien Elmes <address@hidden>**20060607125345
 * caching support is now provided via two function vars in emms.el,
   emms-cache-get-function and emms-cache-set-function
 * (emms-standard) or above will enable caching support
 * you'll need to remove .emms-cache or s/emms-info-cache/emms-cache-db/
] 
[emms-info: Fix bug that occurs after clearing the current playlist and trying 
to re-add songs to it.
Michael Olson <address@hidden>**20060606144439] 
[emms-playlist-mode doesn't need overlay compatibility anymore
address@hidden 
[emms-playlist-mode.el - now with less overlay!
address@hidden 
[AUTHORS: fixed Lucas' e-mail address
address@hidden 
[AUTHORS: Damien Elmes address updated
address@hidden 
[info-cache-dirty/coding
Damien Elmes <address@hidden>**20060605163339
 
 * mark the info cache as dirty when it's modified, so we don't have to
   write it out all the time
 * save the cache as mule-utf-8 - comments? i'm not sure if this is
   correct
] 
[emms-info caching (thanks to Damien Elmes)
address@hidden 
[Sort file names from `emms-source-file-directory-tree-function'.
address@hidden 
[Add some sources for inserting playlists without inserting their contents, and 
likewise for directories of playlist files.  Exclude some files and directories 
from being added when walking directories.
Michael Olson <address@hidden>**20060604195602] 
[emms-player-mpd: Differentiate between files and URLs when it makes sense to 
do so.
Michael Olson <address@hidden>**20060604195449] 
[Miscellaneous minor cleanups.
Michael Olson <address@hidden>**20060604195311] 
[Make sure we never have an empty track description when inserting a song into 
a playlist buffer.
Michael Olson <address@hidden>**20060604194940] 
[Remove debian-extras package as requested by ftpmasters (debian)
address@hidden 
[Put volume options in their own customize group.
Martin Schoenmakers <address@hidden>**20060601193853
 
 Added a separate emms-volume group for customize and put things there instead
 of in the main thing.
] 
[Make handling of multiple playlist buffers less error-prone.
Michael Olson <address@hidden>**20060531203810] 
[emms-volume.el: Cosmetic stuff, defvar -> defcustom
address@hidden 
[emms-volume.el: Minor cosmetic cleanup
address@hidden 
[emms-volme.el: Add some requires.
address@hidden 
[emms-volume-amixer.el: Provide a way to set the control for amixer
address@hidden 
[AUTHORS: Add Martin Schoenmakers. Welcome! :-)
address@hidden 
[Add emms-volume and emms-volume-amixer.
Martin Schoenmakers <address@hidden>**20060530223500
 
 New files: emms-volume.el provides some general volume changing things,
 including a minor mode to more easily change volume when not in the
 EMMS buffer. emms-volume-amixer.el is a backend using amixer.
 
] 
[emms-streams: Re-add space after prompt and use completion for type.
Michael Olson <address@hidden>**20060530190620] 
[emms-streams: When the user wants emms-streams to play the selected stream 
instead of add it, create our own playlist buffer.  When quitting, if we own 
the current playlist buffer, kill it.
Michael Olson <address@hidden>**20060530144243] 
[allow nonzero ogginfo exit plus some reindenting
Martin Schoenmakers <address@hidden>**20060530130411
 
 When ogginfo gave a nonzero value on exit, any valid data would get tossed
 if there was any. This prevented emms from showing info for files that are
 tagged but a bit odd.
 
 Also reindented emms-info-ogginfo accordingly, which incidentally removed
 some tabs in favour of spaces.
 
] 
[emms-streams: Re-implement yank and kill so that they do the right thing with 
emms-stream-list.
Michael Olson <address@hidden>**20060530045429] 
[emms-streams: Implement kill and yank.
Michael Olson <address@hidden>**20060530040114] 
[emms-streams: Make hitting RET on a URL do the right thing, improve cursor 
movement, and mark the buffer as unmodified after performing a save.
Michael Olson <address@hidden>**20060529030043] 
[emms-player-mpd: Make seek work correctly.
Michael Olson <address@hidden>**20060525033120] 
[emms-player-mpd: Use more robust method of detecting whether we need to 
force-feed MusicPD our playlist.
Michael Olson <address@hidden>**20060525014253] 
[emms-playlist-mode: Make "d" kill the entire line.  This seems to be a good 
compromise of those who use C-k and those who want more standard object-killing 
behavior.
foo**20060524200008] 
[emms-player-mpd: When showing the currently-playing song, prepend the name of 
the radio station, if it exists.
foo**20060524195911] 
[emms-player-mpd: Fix bug that caused unconditional reloading of the entire 
MusicPD playlist whenever the track was changed manually.
Michael Olson <address@hidden>**20060524061655] 
[emms-player-mpd: Overhaul for streamlist support, and fix a few miscellaneous 
issues.
Michael Olson <address@hidden>**20060524055707] 
[emms-player-mpd: Add a few checks to make sure that the given buffer exists 
before trying to do anything with it.
Michael Olson <address@hidden>**20060517035419] 
[emms-source-playlist: Do not expand names of files in playlists, as this can 
cause problems with emms-player-mpd in some configurations.
Michael Olson <address@hidden>**20060516081257] 
[emms-playlist-mode: Implement the option (disabled by default) of opening a 
new EMMS buffer for a playlist, when hitting RET on one.
Michael Olson <address@hidden>**20060510040730] 
[emms-playlist-mode.el: Don't put a period after the mode map. This hangs 21.4 
on display.
address@hidden 
[TAG 2.0
address@hidden 
Patch bundle hash:
1da36cf091d2c46e78836dc0995bc3ea4c0ae30f

reply via email to

[Prev in Thread] Current Thread [Next in Thread]