Expands "~" in file names before sending to mpg123.
[emus.git] / emus.el
diff --git a/emus.el b/emus.el
index 2c879c4..23a1da1 100644 (file)
--- a/emus.el
+++ b/emus.el
@@ -115,7 +115,6 @@ Used to prevent commands from interfering with library construction.")
         emus-process
       (let ((proc
              (make-process :name "emus-process"
-                           ;; :buffer (get-buffer-create "*emus-process*")
                            :command `(,emus-mpg123-program "-R"))))
         (set-process-query-on-exit-flag proc nil)
         (process-send-string proc "silence\n")
@@ -141,7 +140,10 @@ be used by `emus--load-library'."
 
 (defun emus-get-audio-files ()
   "Get all mp3 files in main emus directory."
-  (directory-files-recursively emus-directory ".*\\.mp3"))
+  (mapcar
+   (lambda (f)
+     (expand-file-name f))
+   (directory-files-recursively emus-directory ".*\\.mp3")))
 
 (defun emus-make-track (artist album title filename &optional pos)
   "Create an object representing an emus track.
@@ -238,7 +240,7 @@ by the filesystem."
 (defmacro emus--with-library (&rest body)
   "Evaluate BODY with the library initialized."
   `(if emus-tracks
-       (progn ,@body)
+       (unless emus--proc-in-use ,@body)
      (emus--load-library
       (lambda () ,@body))))
 
@@ -433,7 +435,8 @@ and thus requires both artist and album headers."
   (let* ((artist (emus-track-artist track))
          (album (emus-track-album track))
          (title (emus-track-title track))
-         (help-str (format "mouse-1, RET: Play '%.30s' (%.20s)" title artist)))
+         (help-str (format "mouse-1, RET: Play '%.30s' (%.20s)" title artist))
+         (field (intern album))) ;Allows easy jumping between albums with cursor.
     (when (or prev-track first)
       (unless (equal (emus-track-artist prev-track) artist)
         (insert-text-button
@@ -441,16 +444,22 @@ and thus requires both artist and album headers."
          'action #'emus--click-track
          'follow-link t
          'help-echo help-str
-         'emus-track track)
-        (insert (propertize "\n" 'face 'emus-artist)))
+         'emus-track track
+         'field field)
+        (insert (propertize "\n"
+                            'face 'emus-artist
+                            'field field)))
       (unless (equal (emus-track-album prev-track) album)
         (insert-text-button
          (propertize (concat "  " album) 'face 'emus-album)
          'action #'emus--click-track
          'follow-link t
          'help-echo help-str
-         'emus-track track)
-        (insert (propertize "\n" 'face 'emus-album))))
+         'emus-track track
+         'field field)
+        (insert (propertize "\n"
+                            'face 'emus-album
+                            'field field))))
     (emus-set-track-browser-pos track (point))
     (let ((is-current (equal track emus-current-track)))
       (insert-text-button
@@ -470,11 +479,13 @@ and thus requires both artist and album headers."
        'action #'emus--click-track
        'follow-link t
        'help-echo help-str
-       'emus-track track)
+       'emus-track track
+       'field field)
       (insert (propertize "\n"
                           'face (if is-current
                                     'emus-track-current
-                                  'emus-track))))))
+                                  'emus-track)
+                          'field field)))))
 
 (defun emus--update-track (track)
   "Rerender entry for TRACK in emus browser buffer.
@@ -522,7 +533,7 @@ Used to update browser display when `emus-current-track' and/or `emus-state' cha
   "Switch to *emus* audio library browser."
   (interactive)
   (emus--with-library
-   (pop-to-buffer "*emus*")
+   (pop-to-buffer-same-window "*emus*")
    (emus-browser-mode)
    (emus--render-tracks)
    (emus-goto-current)))