X-Git-Url: http://christophe.rhodes.io/gitweb/?p=squeeze-el.git;a=blobdiff_plain;f=squeeze.el;h=3808a20f117ddbd86028122c7061c4a873336453;hp=f44bce862df986394547d075fb326851ca0d3f43;hb=HEAD;hpb=6fcf766d732c8d40f01ce7eceb17614bd18b4a2f diff --git a/squeeze.el b/squeeze.el index f44bce8..3808a20 100644 --- a/squeeze.el +++ b/squeeze.el @@ -53,8 +53,15 @@ (define-key map (kbd "<") 'squeeze-control-previous-track) (define-key map (kbd "s") 'squeeze-control-select-player) (define-key map (kbd "a") 'squeeze-list-albums) + (define-key map (kbd "!") 'squeeze-control-reconnect) map)) +(defun squeeze-control-current-player () + (or squeeze-control-current-player + (if (= (length squeeze-players) 1) + (setq squeeze-control-current-player (squeeze-player-playerid (car squeeze-players))) + (call-interactively 'squeeze-control-select-player)))) + (defvar squeeze-control-current-player nil) (defun squeeze-control-select-player (id) @@ -66,11 +73,11 @@ (defun squeeze-control-next-track () (interactive) - (squeeze-send-string "%s playlist index +1" squeeze-control-current-player)) + (squeeze-send-string "%s playlist index +1" (squeeze-control-current-player))) (defun squeeze-control-previous-track () (interactive) - (squeeze-send-string "%s playlist index -1" squeeze-control-current-player)) + (squeeze-send-string "%s playlist index -1" (squeeze-control-current-player))) (define-derived-mode squeeze-control-mode special-mode "SqueezeControl" "Major mode for controlling Squeezebox Servers.\\") @@ -564,33 +571,41 @@ (port (read-number "Port: " port))) (cons host port))) +(cl-defmacro with-squeeze-parameters ((address port) &body body) + (declare (indent 1)) + `(progn + (unless ,address (setq ,address squeeze-server-address)) + (unless ,port (setq ,port squeeze-server-port)) + (when current-prefix-arg + (let ((parameters (squeeze-read-server-parameters ,address ,port))) + (setq ,address (car parameters) + ,port (cdr parameters)))) + ,@body)) + (defun squeeze (&optional address port) (interactive) - (unless address (setq address squeeze-server-address)) - (unless port (setq port squeeze-server-port)) - (when current-prefix-arg - (let ((parameters (squeeze-read-server-parameters address port))) - (setq address (car parameters) - port (cdr parameters)))) - (let ((buffer (make-comint-in-buffer "squeeze" nil (cons address port)))) - (switch-to-buffer buffer) - (squeeze-mode))) + (with-squeeze-parameters (address port) + (let ((buffer (make-comint-in-buffer "squeeze" nil (cons address port)))) + (switch-to-buffer buffer) + (squeeze-mode)))) (defun squeeze-control (&optional address port) (interactive) - (unless address (setq address squeeze-server-address)) - (unless port (setq port squeeze-server-port)) - (when current-prefix-arg - (let ((parameters (squeeze-read-server-parameters address port))) - (setq address (car parameters) - port (cdr parameters)))) - (let ((current-prefix-arg nil)) - (squeeze address port)) - (let ((buffer (get-buffer-create "*squeeze-control*"))) - (switch-to-buffer buffer) - (squeeze-control-listen) - (squeeze-control-refresh) - (squeeze-control-display-players))) + (with-squeeze-parameters (address port) + (let ((current-prefix-arg nil)) + (squeeze address port)) + (let ((buffer (get-buffer-create "*squeeze-control*"))) + (switch-to-buffer buffer) + (squeeze-control-listen) + (squeeze-control-refresh) + (squeeze-control-display-players)))) + +(defun squeeze-control-reconnect (&optional address port) + (interactive) + (with-squeeze-parameters (address port) + (kill-buffer (get-buffer "*squeeze*")) + (let ((current-prefix-arg nil)) + (squeeze-control address port)))) (defun squeeze-list-albums () (interactive) @@ -603,7 +618,7 @@ (defun squeeze-albums-load-album () (interactive) (squeeze-send-string "%s playlistcontrol cmd:load album_id:%s" - squeeze-control-current-player + (squeeze-control-current-player) (squeeze-album-id (tabulated-list-get-id)))) (provide 'squeeze)