chiark / gitweb /
el/dot-emacs.el: Make MPC be less annoying.
authorMark Wooding <mdw@distorted.org.uk>
Tue, 18 Jul 2017 23:55:14 +0000 (00:55 +0100)
committerMark Wooding <mdw@distorted.org.uk>
Wed, 19 Jul 2017 00:05:19 +0000 (01:05 +0100)
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

index 09b3960e4812902c132e15ee42524aad5e0f8f32..59f47f2b8d50274001f150245eed4b9983e2c594 100644 (file)
@@ -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.