branch: externals/mpdired commit 610c1ad904558e5ca735cb66f4d99e48e4ad8a46 Author: Manuel Giraud <man...@ledu-giraud.fr> Commit: Manuel Giraud <man...@ledu-giraud.fr>
multiple removal and face fix --- mpdired.el | 56 +++++++++++++++++++++++++++++++++++++++++++++----------- 1 file changed, 45 insertions(+), 11 deletions(-) diff --git a/mpdired.el b/mpdired.el index a7e12dc1f8..7e02883541 100644 --- a/mpdired.el +++ b/mpdired.el @@ -27,7 +27,8 @@ "u" 'mpdired-unmark-at-point "<DEL>" 'mpdired-previous-unmark "d" 'mpdired-mark-deletion-at-point - ;; Only for queue + ;; Only in the queue view + "x" 'mpdired-flagged-delete "D" 'mpdired-delete) (defface mpdired-song @@ -42,6 +43,14 @@ '((t :inherit dired-directory)) "Face used to show a directory.") +(defface mpdired-marked + '((t :inherit dired-marked)) + "Face used to show a marked entry.") + +(defface mpdired-flagged + '((t :inherit dired-flagged)) + "Face used to show an entry flagged for deletion.") + (defun mpdired--subdir-p (dir-a dir-b) (let ((pos (string-search dir-a dir-b))) (and pos (zerop pos)))) @@ -177,6 +186,21 @@ (defun mpdired--short-name (string) (car (last (split-string string "/")))) +(defun mpdired--reset-face () + (let* ((bol (mpdired--bol)) + (eol (line-end-position)) + (type (get-text-property bol 'type)) + (mark (get-text-property bol 'mark))) + (remove-text-properties bol eol '(face)) + (cond ((and mark (char-equal mark ?d)) + (put-text-property bol eol 'face 'mpdired-flagged)) + ((and mark (char-equal mark ?*)) + (put-text-property bol eol 'face 'mpdired-marked)) + ((eq type 'directory) + (put-text-property bol eol 'face 'mpdired-directory)) + ((eq type 'song) + (put-text-property bol eol 'face 'mpdired-song))))) + (defun mpdired--insert-entry (entry) (insert " ") (let ((bol (mpdired--bol))) @@ -197,6 +221,7 @@ (let ((bol (mpdired--bol)) (eol (line-end-position))) (put-text-property bol eol 'id id) + (put-text-property bol eol 'type 'song) (put-text-property bol eol 'uri uri)))) (defun mpdired--present-listall (proc) @@ -376,7 +401,10 @@ (mpdired--with-comm-buffer process nil (setq mpdired--last-command 'deleteid) (process-send-string process "command_list_begin\n") - (process-send-string process (format "deleteid %d\n" id)) + (if (listp id) + (dolist (i id) + (process-send-string process (format "deleteid %d\n" i))) + (process-send-string process (format "deleteid %d\n" id))) ;; XXX A playlistid should always be preceded by a status (process-send-string process "status\n") (process-send-string process "playlistid\n") @@ -482,29 +510,29 @@ (mpdired-listall-internal ""))) (t (mpdired-listall-internal "")))))) -(defun mpdired--mark (mark face) +(defun mpdired--mark (mark) (let ((inhibit-read-only t)) (save-excursion (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--reset-face) (mpdired-next-line))) (defun mpdired-mark-at-point () (interactive) - (mpdired--mark ?* 'dired-marked)) + (mpdired--mark ?*)) (defun mpdired-mark-deletion-at-point () (interactive) - (mpdired--mark ?d 'dired-flagged)) + (mpdired--mark ?d)) (defun mpdired-unmark-at-point () (interactive) (let ((inhibit-read-only t)) - (remove-text-properties (mpdired--bol) (line-end-position) '(mark)) - (put-text-property (mpdired--bol) (line-end-position) 'face 'mpdired-song) + (remove-text-properties (mpdired--bol) (line-end-position) '(mark face)) + (mpdired--reset-face) (save-excursion (goto-char (line-beginning-position)) (delete-char 1) @@ -516,7 +544,7 @@ (mpdired-previous-line) (let ((inhibit-read-only t)) (remove-text-properties (mpdired--bol) (line-end-position) '(mark)) - (put-text-property (mpdired--bol) (line-end-position) 'face 'mpdired-song) + (mpdired--reset-face) (save-excursion (goto-char (line-beginning-position)) (delete-char 1) @@ -531,9 +559,9 @@ (while (zerop eob) (let* ((bol (mpdired--bol)) (mark (get-text-property bol 'mark)) - (uri (get-text-property bol 'uri))) + (id (get-text-property bol 'id))) (when (and mark (char-equal mark want)) - (push uri result))) + (push id result))) (setq eob (forward-line))) result))) @@ -552,6 +580,12 @@ (cond ((eq mpdired--view 'queue) (mpdired-deleteid-at-point)))) +(defun mpdired-flagged-delete () + (interactive) + (when (eq mpdired--view 'queue) + (let ((flagged (mpdired--collect-marked ?d))) + (when flagged (mpdired-deleteid-internal flagged))))) + (defun mpdired-update () (interactive) (cond ((eq mpdired--view 'queue)