branch: externals/mpdired commit e78adc1fd237131ff779b7e3f5dbe6fb796bdf12 Author: Manuel Giraud <man...@ledu-giraud.fr> Commit: Manuel Giraud <man...@ledu-giraud.fr>
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 ()