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

    some progress on marks
---
 mpdired.el | 82 +++++++++++++++++++++++++++++++++++++++++---------------------
 1 file changed, 54 insertions(+), 28 deletions(-)

diff --git a/mpdired.el b/mpdired.el
index 66ca83d690..6b17dcd007 100644
--- a/mpdired.el
+++ b/mpdired.el
@@ -26,6 +26,7 @@
   "m"      'mpdired-mark-at-point
   "u"      'mpdired-unmark-at-point
   "<DEL>"  'mpdired-previous-unmark
+  "d"      'mpdired-mark-deletion-at-point
   ;; Only for queue
   "D"      'mpdired-delete)
 
@@ -156,12 +157,16 @@
 (defvar-local mpdired--queue-point nil
   "Saved point position in the queue view.")
 
+(defun mpdired--bol ()
+  "Correct beginning of line in a MPDired buffer."
+  (+ 2 (line-beginning-position)))
+
 (defun mpdired--short-name (string)
   (car (last (split-string string "/"))))
 
 (defun mpdired--insert-entry (entry)
   (insert "  ")
-  (let ((bol (line-beginning-position)))
+  (let ((bol (mpdired--bol)))
     (cond ((stringp entry)
           (insert (mpdired--short-name entry))
           (put-text-property bol (line-end-position) 'type 'file)
@@ -176,7 +181,7 @@
   (let ((id (car song))
        (uri (cadr song)))
     (insert "  " (propertize uri 'face 'dired-ignored))
-    (let ((bol (line-beginning-position))
+    (let ((bol (mpdired--bol))
          (eol (line-end-position)))
       (put-text-property bol eol 'id id)
       (put-text-property bol eol 'uri uri))))
@@ -236,7 +241,8 @@
         (songid (car data))
         (elapsed (cadr data))
         (duration (caddr data))
-        (songs (cdddr data)))
+        (songs (cdddr data))
+        (eob 0))
     (with-current-buffer (get-buffer-create main-buffer)
       (let ((inhibit-read-only t))
        (erase-buffer)
@@ -251,10 +257,10 @@
        ;; on the URI.
        (save-excursion
          (when songid
-           (while (let ((id (get-text-property (point) 'id)))
-                    (and id (/= songid id)))
-             (forward-line))
-           (let* ((bol (line-beginning-position))
+           (while (let ((id (get-text-property (mpdired--bol) 'id)))
+                    (and (zerop eob) id (/= songid id)))
+             (setq eob (forward-line)))
+           (let* ((bol (mpdired--bol))
                   (eol (line-end-position))
                   (x (/ (* elapsed (- eol bol)) duration)))
              (put-text-property bol (+ bol x) 'face 'dired-special))))
@@ -397,17 +403,17 @@
 (defun mpdired-next-line ()
   (interactive)
   (forward-line)
-  (goto-char (+ 2 (line-beginning-position)))
+  (goto-char (mpdired--bol))
   (mpdired--save-point))
 
 (defun mpdired-previous-line ()
   (interactive)
   (forward-line -1)
-  (goto-char (+ 2 (line-beginning-position)))
+  (goto-char (mpdired--bol))
   (mpdired--save-point))
 
 (defun mpdired-listall-at-point ()
-  (let* ((bol (line-beginning-position))
+  (let* ((bol (mpdired--bol))
         (type (get-text-property bol 'type))
         (uri (get-text-property bol 'uri)))
     (if (eq type 'directory)
@@ -415,9 +421,8 @@
       (message "Cannot browse a file."))))
 
 (defun mpdired-playid-at-point ()
-  (let ((id (get-text-property (line-beginning-position) 'id)))
-    (when id
-      (mpdired-playid-internal id))))
+  (let ((id (get-text-property (mpdired--bol) 'id)))
+    (when id (mpdired-playid-internal id))))
 
 (defun mpdired-enter ()
   (interactive)
@@ -463,25 +468,31 @@
                  (mpdired-listall-internal "")))
               (t (mpdired-listall-internal ""))))))
 
-(defun mpdired-mark-at-point ()
-  (interactive)
-  (let ((bol (line-beginning-position))
-       (mark ?*)
-       (inhibit-read-only t))
-    (put-text-property bol (line-end-position) 'mark mark)
+(defun mpdired--mark (mark face)
+  (let ((inhibit-read-only t))
     (save-excursion
-      (goto-char bol)
+      (goto-char (line-beginning-position))
       (delete-char 1)
       (insert-char mark))
+    (put-text-property (mpdired--bol) (line-end-position) 'mark mark)
+    (put-text-property (mpdired--bol) (line-end-position) 'face face)
     (mpdired-next-line)))
 
+(defun mpdired-mark-at-point ()
+  (interactive)
+  (mpdired--mark ?* 'dired-marked))
+
+(defun mpdired-mark-deletion-at-point ()
+  (interactive)
+  (mpdired--mark ?d 'dired-flagged))
+
 (defun mpdired-unmark-at-point ()
   (interactive)
-  (let ((bol (line-beginning-position))
-       (inhibit-read-only t))
-    (remove-text-properties bol (line-end-position) '(mark))
+  (let ((inhibit-read-only t))
+    (remove-text-properties (mpdired--bol) (line-end-position) '(mark))
+    (put-text-property (mpdired--bol) (line-end-position) 'face 'dired-ignored)
     (save-excursion
-      (goto-char bol)
+      (goto-char (line-beginning-position))
       (delete-char 1)
       (insert-char ? ))
     (mpdired-next-line)))
@@ -489,14 +500,29 @@
 (defun mpdired-previous-unmark ()
   (interactive)
   (mpdired-previous-line)
-  (let ((bol (line-beginning-position))
-       (inhibit-read-only t))
-    (remove-text-properties bol (line-end-position) '(mark))
+  (let ((inhibit-read-only t))
+    (remove-text-properties (mpdired--bol) (line-end-position) '(mark))
+    (put-text-property (mpdired--bol) (line-end-position) 'face 'dired-ignored)
     (save-excursion
-      (goto-char bol)
+      (goto-char (line-beginning-position))
       (delete-char 1)
       (insert-char ? ))))
 
+(defun mpdired--collect-marked (want)
+  "Collect entries marked with WANT."
+  (save-excursion
+    (goto-char (point-min))
+    (let ((eob 0)
+         result)
+      (while (zerop eob)
+       (let* ((bol (mpdired--bol))
+              (mark (get-text-property bol 'mark))
+              (uri (get-text-property bol 'uri)))
+         (when (and mark (char-equal mark want))
+           (push uri result)))
+       (setq eob (forward-line)))
+      result)))
+
 (defun mpdired-add-at-point ()
   (interactive)
   (let* ((bol (line-beginning-position))

Reply via email to