branch: externals/mpdired
commit e78adc1fd237131ff779b7e3f5dbe6fb796bdf12
Author: Manuel Giraud <[email protected]>
Commit: Manuel Giraud <[email protected]>
position with songid in queue view
---
mpdired.el | 38 +++++++++++++++++++++++++++++---------
1 file changed, 29 insertions(+), 9 deletions(-)
diff --git a/mpdired.el b/mpdired.el
index 729e9ebc65..6bd286deb3 100644
--- a/mpdired.el
+++ b/mpdired.el
@@ -210,10 +210,13 @@
(defvar-local mpdired--view nil)
(defvar-local mpdired--comm-buffer nil
"Communication buffer associated to this MPDired buffer.")
+
+;; I tried to use markers but since I often erase the buffer content,
+;; these markers are reset to 1.
(defvar-local mpdired--browser-point nil
"Saved point position in the browser view.")
-(defvar-local mpdired--queue-point nil
- "Saved point position in the queue view.")
+(defvar-local mpdired--songid-point nil
+ "Songid for point position in the queue view.")
(defun mpdired--bol ()
"Correct beginning of line in a MPDired buffer."
@@ -264,6 +267,13 @@
(goto-char point)
(goto-char (mpdired--bol)))
+(defun mpdired--goto-id (songid)
+ (let ((max (point-max)))
+ (while (and (< (point) max)
+ (let ((id (get-text-property (mpdired--bol) 'id)))
+ (and id (/= songid id))))
+ (mpdired--next-line))))
+
(defun mpdired--present-listall (proc)
;; Called by filter of the communication buffer.
(let* ((peer-info (process-contact proc t))
@@ -342,8 +352,8 @@
(put-text-property bol (+ bol x) 'face 'mpdired-progress))))
;; Set mode, restore point and memorize stuff
(mpdired-mode)
- (when mpdired--queue-point
- (mpdired--reset-point mpdired--queue-point))
+ (when mpdired--songid-point
+ (mpdired--goto-id mpdired--songid-point))
(setq mpdired--comm-buffer (process-buffer proc)
mpdired--view 'queue)))))
@@ -478,20 +488,30 @@
(defun mpdired--save-point ()
(cond ((eq mpdired--view 'queue)
- (setf mpdired--queue-point (point)))
+ (let ((bol (mpdired--bol)))
+ (unless (> bol (point-max))
+ (setf mpdired--songid-point (get-text-property bol 'id)))))
((eq mpdired--view 'browser)
(setf mpdired--browser-point (point)))))
+(defun mpdired--next-line ()
+ (forward-line)
+ (goto-char (mpdired--bol)))
+
(defun mpdired-next-line ()
+ "Next line with saving."
(interactive)
- (forward-line)
- (goto-char (mpdired--bol))
+ (mpdired--next-line)
(mpdired--save-point))
+(defun mpdired--previous-line ()
+ (forward-line -1)
+ (goto-char (mpdired--bol)))
+
(defun mpdired-previous-line ()
+ "Previous line with saving."
(interactive)
- (forward-line -1)
- (goto-char (mpdired--bol))
+ (mpdired--previous-line)
(mpdired--save-point))
(defun mpdired-listall-at-point ()