X-Git-Url: http://christophe.rhodes.io/gitweb/?p=iplayer-el.git;a=blobdiff_plain;f=iplayer.el;h=8e883521d78706c251bf0e9d93785dcc705265a1;hp=33af51289fea7f6f96e2096a70bdaa5d865c5d23;hb=33f79d5354ce397f2f8d2d6299941c13fdd05fab;hpb=69fc0dec693728cfb6905102eeb979a096526eed diff --git a/iplayer.el b/iplayer.el index 33af512..8e88352 100644 --- a/iplayer.el +++ b/iplayer.el @@ -36,10 +36,11 @@ (setq iplayer-updating-cache-process nil iplayer-updating-cache-sentinel-info nil) (dolist (info info) - (let ((iplayer-command-frame (car info)) - (iplayer-command-window (cadr info)) - (iplayer-command-buffer (caddr info)) - (keys (car (cdddr info)))) + (let ((iplayer-command-frame (nth 0 info)) + (iplayer-command-window (nth 1 info)) + (iplayer-command-buffer (nth 2 info)) + (keys (nth 3 info)) + (function (nth 4 info))) (when (and (frame-live-p iplayer-command-frame) (window-live-p iplayer-command-window) (buffer-live-p iplayer-command-buffer)) @@ -60,7 +61,15 @@ ;; that it works, but mine is not too much to reason ;; why; lots of other ways to try to achieve this didn't ;; in fact work. - (execute-kbd-macro keys) + (if (version< emacs-version "24") + (execute-kbd-macro keys) + ;; KLUDGE: we store the function name, which is fine, + ;; but some of our functions need to know which + ;; keystrokes were used to invoke them, so we need to + ;; pass those along, so we need to make sure that all + ;; iplayer-functions accept an optional argument, argh + ;; argh argh. + (funcall function keys)) ;; KLUDGE: and then we restore old state (select-window old-window) (select-frame old-frame) @@ -71,7 +80,7 @@ (let (docstring interactive) (when (stringp (car body)) (setq docstring (car body) body (cdr body))) - (when (and (consp (car body)) (eql (caar body) 'interactive)) + (when (and (consp (car body)) (eql (car (car body)) 'interactive)) (setq interactive (car body) body (cdr body))) `(defun ,name ,arglist ,@(when docstring (list docstring)) @@ -85,7 +94,7 @@ (message "Updating iPlayer cache")) (if iplayer-updating-cache-sentinel-executing (progn ,@body) - (push (list (selected-frame) (selected-window) (current-buffer) (this-command-keys-vector)) + (push (list (selected-frame) (selected-window) (current-buffer) (this-command-keys-vector) ',name) iplayer-updating-cache-sentinel-info))))) (defun get-iplayer-tree (&rest args) @@ -149,12 +158,12 @@ Used in the `iplayer-preset' command.") -(define-iplayer-command iplayer-preset (&optional prefix) +(define-iplayer-command iplayer-preset (&optional keys) "Switch display to a preset channel. The presets are defined in the variable `iplayer-presets'." - (interactive "p") - (let ((keys (this-command-keys)) + (interactive) + (let ((keys (or (and keys (concat keys)) (this-command-keys))) (presets (mapcar (lambda (x) (cons (read-kbd-macro (car x)) (cdr x))) iplayer-presets))) (cond ((= (length keys) 1) @@ -176,7 +185,7 @@ The presets are defined in the variable `iplayer-presets'." ;; should probably use a process filter instead to give us a ;; progress bar (message "downloading id %s" id) - (start-process "get-iplayer" " *get-iplayer*" "get-iplayer" "--get" (format "%s" id))) + (start-process "get-iplayer" " *get-iplayer*" "get-iplayer" "--modes=best" "--get" (format "%s" id))) (message "no id at point")))) (defun iplayer-previous () @@ -222,7 +231,7 @@ The presets are defined in the variable `iplayer-presets'." (use-local-map iplayer-mode-map) (setq major-mode 'iplayer-mode mode-name "iPlayer")) -(define-iplayer-command iplayer () +(define-iplayer-command iplayer (&optional keys) "Start the emacs iPlayer interface." (interactive) (setq mode-line-process nil) @@ -231,6 +240,5 @@ The presets are defined in the variable `iplayer-presets'." ;;;###autoload (autoload 'iplayer "iplayer" "Start the emacs iPlayer interface." t) - (provide 'iplayer) ;;; iplayer.el ends here