branch: externals/mpdired
commit 3f6a3bec12835bf3b6b8bd0496afb9777006d232
Author: Manuel Giraud <man...@ledu-giraud.fr>
Commit: Manuel Giraud <man...@ledu-giraud.fr>

    copy mpd's status in a buffer local var
---
 mpdired.el | 62 +++++++++++++++++++++++++++++++++++---------------------------
 1 file changed, 35 insertions(+), 27 deletions(-)

diff --git a/mpdired.el b/mpdired.el
index e204911d9a..1fd82a38af 100644
--- a/mpdired.el
+++ b/mpdired.el
@@ -221,7 +221,10 @@
        (when (and in-status-p
                   (save-excursion (re-search-forward "^file: .*$" eol t 1)))
          (setq in-status-p nil)
-         (push (list state volume repeat random single consume) result)
+         ;; Save status in main buffer
+         (with-current-buffer mpdired--main-buffer
+           (setq mpdired--status
+                 (list state volume repeat random single consume)))
          (push songid result)
           (push elapsed result)
          (push duration result))
@@ -242,7 +245,10 @@
       (forward-line))
     ;; There was status but no songs
     (when in-status-p
-      (push (list state volume repeat random single consume) result)
+      ;; Save status in main buffer
+      (with-current-buffer mpdired--main-buffer
+       (setq mpdired--status
+             (list state volume repeat random single consume)))
       (push songid result)
       (push elapsed result)
       (push duration result))
@@ -280,6 +286,8 @@
 (defvar-local mpdired--view nil)
 (defvar-local mpdired--comm-buffer nil
   "Communication buffer associated to this MPDired buffer.")
+(defvar-local mpdired--status nil
+  "Local copy of the MPD status.  It will updated regularly.")
 
 ;; I tried to use markers but since I often erase the buffer content,
 ;; these markers are reset to 1.
@@ -323,24 +331,25 @@
             (put-text-property bol (line-end-position) 'type 'directory)
             (put-text-property bol (line-end-position) 'uri dir))))))
 
-(defun mpdired--insert-status (status)
-  (let* ((state (car status))
-        (volume (nth 1 status))
-        (repeat (nth 2 status))
-        (random (nth 3 status))
-        (single (nth 4 status))
-        (consume (nth 5 status))
-        (string (cond ((string= "stop" state) "Stopped")
-                      ((string= "play" state) "Playing")
-                      ((string= "pause" state) "Paused"))))
-    (insert (propertize string 'face 'bold))
-    (when (numberp volume)
-      (insert (format " Volume: %d" volume)))
-    (when repeat (insert " Repeat"))
-    (when random (insert " Random"))
-    (when single (insert " Single"))
-    (when consume (insert " Consume"))
-    (insert "\n")))
+(defun mpdired--insert-status ()
+  (when mpdired--status
+    (let* ((state (car mpdired--status))
+          (volume (nth 1 mpdired--status))
+          (repeat (nth 2 mpdired--status))
+          (random (nth 3 mpdired--status))
+          (single (nth 4 mpdired--status))
+          (consume (nth 5 mpdired--status))
+          (string (cond ((string= "stop" state) "Stopped")
+                        ((string= "play" state) "Playing")
+                        ((string= "pause" state) "Paused"))))
+      (insert (propertize string 'face 'bold))
+      (when (numberp volume)
+       (insert (format " Volume: %d" volume)))
+      (when repeat (insert " Repeat"))
+      (when random (insert " Random"))
+      (when single (insert " Single"))
+      (when consume (insert " Consume"))
+      (insert "\n"))))
 
 (defun mpdired--insert-song (song)
   (let ((id (car song))
@@ -422,19 +431,18 @@
         (peer-localp (eq (plist-get peer-info :family) 'local))
         (main-buffer (mpdired--main-name peer-host peer-service peer-localp))
         (data (mpdired--parse-queue))
-        (status (car data))
-        (songid (nth 1 data))
-        (elapsed (nth 2 data))
-        (duration (nth 3 data))
-        (songs (nthcdr 4 data)))
+        (songid (car data))
+        (elapsed (cadr data))
+        (duration (caddr data))
+        (songs (cdddr data)))
     (with-current-buffer (get-buffer-create main-buffer)
       (let ((inhibit-read-only t))
        (erase-buffer)
        ;; Insert content
        (save-excursion
-         ;; State header
+         ;; Status header
          (goto-char (point-min))
-         (mpdired--insert-status status)
+         (mpdired--insert-status)
          ;; Songs
          (dolist (song songs)
            (mpdired--insert-song song)

Reply via email to