From 6dbdfe26f128300a168e4e8497fde43c6afc7bab Mon Sep 17 00:00:00 2001 Message-Id: <6dbdfe26f128300a168e4e8497fde43c6afc7bab.1718370468.git.mdw@distorted.org.uk> From: Mark Wooding Date: Wed, 19 Jul 2017 00:55:14 +0100 Subject: [PATCH] el/dot-emacs.el: Make MPC be less annoying. Organization: Straylight/Edgeware From: Mark Wooding Add things to and remove things from the playlist; mark and unmark items direddishly. It's not quite right, but it'll improve as I get irritated with it again. --- el/dot-emacs.el | 79 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 79 insertions(+) diff --git a/el/dot-emacs.el b/el/dot-emacs.el index 09b3960..59f47f2 100644 --- a/el/dot-emacs.el +++ b/el/dot-emacs.el @@ -3813,6 +3813,85 @@ (autoload 'mpc-pause "mpc") (autoload 'mpc-next "mpc") (autoload 'mpc-prev "mpc") +(defun mdw-mpc-hack-lines (arg interactivep func) + (if (and interactivep (use-region-p)) + (let ((from (region-beginning)) (to (region-end))) + (goto-char from) + (beginning-of-line) + (funcall func) + (forward-line) + (while (< (point) to) + (funcall func) + (forward-line))) + (let ((n (prefix-numeric-value arg))) + (cond ((minusp n) + (unless (bolp) + (beginning-of-line) + (funcall func) + (incf n)) + (while (minusp n) + (forward-line -1) + (funcall func) + (incf n))) + (t + (beginning-of-line) + (while (plusp n) + (funcall func) + (forward-line) + (decf n))))))) + +(defun mdw-mpc-select-one () + (unless (get-char-property (point) 'mpc-select) + (mpc-select-toggle))) + +(defun mdw-mpc-unselect-one () + (when (get-char-property (point) 'mpc-select) + (mpc-select-toggle))) + +(defun mdw-mpc-select (&optional arg interactivep) + (interactive (list current-prefix-arg t)) + (mdw-mpc-hack-lines arg interactivep 'mdw-mpc-select-one) + (mpc-selection-refresh)) + +(defun mdw-mpc-unselect (&optional arg interactivep) + (interactive (list current-prefix-arg t)) + (mdw-mpc-hack-lines arg interactivep 'mdw-mpc-unselect-one) + (mpc-selection-refresh)) + +(defun mdw-mpc-unselect-backwards (arg) + (interactive "p") + (mdw-mpc-hack-lines (- arg) t 'mdw-mpc-unselect-one) + (mpc-selection-refresh)) + +(defun mdw-mpc-unselect-all () + (interactive) + (setq mpc-select nil) + (mpc-selection-refresh)) + +(defun mdw-mpc-next-line (arg) + (interactive "p") + (beginning-of-line) + (forward-line arg)) + +(defun mdw-mpc-previous-line (arg) + (interactive "p") + (beginning-of-line) + (forward-line (- arg))) + +(eval-after-load "mpc" + '(progn + (define-key mpc-mode-map "m" 'mdw-mpc-select) + (define-key mpc-mode-map "u" 'mdw-mpc-unselect) + (define-key mpc-mode-map "\177" 'mdw-mpc-unselect-backwards) + (define-key mpc-mode-map "\e\177" 'mdw-mpc-unselect-all) + (define-key mpc-mode-map "n" 'mdw-mpc-next-line) + (define-key mpc-mode-map "p" 'mdw-mpc-previous-line) + (setq mpc-songs-mode-map (make-sparse-keymap)) + (set-keymap-parent mpc-songs-mode-map mpc-mode-map) + (define-key mpc-songs-mode-map "l" 'mpc-playlist) + (define-key mpc-songs-mode-map "+" 'mpc-playlist-add) + (define-key mpc-songs-mode-map "-" 'mpc-playlist-delete))) + ;;;-------------------------------------------------------------------------- ;;; Inferior Emacs Lisp. -- [mdw]