;;;--------------------------------------------------------------------------
;;; MPC configuration.
-(defun mdw-mpc-play-or-pause ()
- (interactive)
- (require 'mpc)
- (if (member (cdr (assq 'state (mpc-cmd-status))) '("play"))
- (mpc-pause)
- (mpc-play)))
-
(setq mpc-browser-tags '(Artist|Composer|Performer Album|Playlist))
(defun mdw-mpc-now-playing ()
(t
(message "mpd in unknown state `%s'" state)))))
-(autoload 'mpc-next "mpc")
-(autoload 'mpc-prev "mpc")
-(autoload 'mpc-stop "mpc")
+(defmacro mdw-define-mpc-wrapper (func bvl interactive &rest body)
+ `(defun ,func ,bvl
+ (interactive ,@interactive)
+ (require 'mpc)
+ ,@body
+ (mdw-mpc-now-playing)))
+
+(mdw-define-mpc-wrapper mdw-mpc-play-or-pause () nil
+ (if (member (cdr (assq 'state (mpc-cmd-status))) '("play"))
+ (mpc-pause)
+ (mpc-play)))
+
+(mdw-define-mpc-wrapper mdw-mpc-next () nil (mpc-next))
+(mdw-define-mpc-wrapper mdw-mpc-prev () nil (mpc-prev))
+(mdw-define-mpc-wrapper mdw-mpc-stop () nil (mpc-stop))
(defun mdw-mpc-hack-lines (arg interactivep func)
(if (and interactivep (use-region-p))
(decf n)))))))
(defun mdw-mpc-select-one ()
- (unless (get-char-property (point) 'mpc-select)
+ (when (and (get-char-property (point) 'mpc-file)
+ (not (get-char-property (point) 'mpc-select)))
(mpc-select-toggle)))
(defun mdw-mpc-unselect-one ()
(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))
+ (mdw-mpc-hack-lines arg interactivep 'mdw-mpc-select-one))
(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))
+ (mdw-mpc-hack-lines arg interactivep 'mdw-mpc-unselect-one))
(defun mdw-mpc-unselect-backwards (arg)
(interactive "p")
- (mdw-mpc-hack-lines (- arg) t 'mdw-mpc-unselect-one)
- (mpc-selection-refresh))
+ (mdw-mpc-hack-lines (- arg) t 'mdw-mpc-unselect-one))
(defun mdw-mpc-unselect-all ()
(interactive)
(beginning-of-line)
(forward-line (- arg)))
+(defun mdw-mpc-hack-tagbrowsers ()
+ (setq-local mode-line-format
+ '("%e"
+ mode-line-frame-identification
+ mode-line-buffer-identification)))
+(add-hook 'mpc-tagbrowser-mode-hook 'mdw-mpc-hack-tagbrowsers)
+
(eval-after-load "mpc"
'(progn
(define-key mpc-mode-map "m" 'mdw-mpc-select)
(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)
+ (define-key mpc-mode-map "/" 'mpc-songs-search)
(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)))
+ (define-key mpc-songs-mode-map "-" 'mpc-playlist-delete)
+ (define-key mpc-songs-mode-map "\r" 'mpc-songs-jump-to)))
;;;--------------------------------------------------------------------------
;;; Inferior Emacs Lisp.