From: Christophe Rhodes Date: Fri, 6 Jul 2012 20:55:43 +0000 (+0100) Subject: fix iplayer commands invoked using M-x X-Git-Tag: v0.1~18 X-Git-Url: http://christophe.rhodes.io/gitweb/?p=iplayer-el.git;a=commitdiff_plain;h=dcc1b1dc85819eb7391d570f25d0a160e4197802 fix iplayer commands invoked using M-x Sure, I only notice this when I have to restart my emacs. But once is annoying enough. The problem was that running M-x iplayer would cause an error from within execute-extended-command, within the process sentinel. After trying to debug this and generating a nifty unbreakable infinite loop, I finally twigged that it was the frame/window/buffer frobbing that was the problem. Piling hack upon hack, the answer is that we only want to do the frobbing once before the first command in the command keys, and once after the execution has finished. Make it so. --- diff --git a/iplayer.el b/iplayer.el index 882e5e9..cd59ac2 100644 --- a/iplayer.el +++ b/iplayer.el @@ -23,12 +23,8 @@ (lambda () (select-frame iplayer-command-frame) (select-window iplayer-command-window) - (set-buffer iplayer-command-buffer))) - (post-command-hook - (lambda () - (select-window old-window) - (select-frame old-frame) - (set-buffer old-buffer)))) + (set-buffer iplayer-command-buffer) + (setq pre-command-hook nil)))) ;; KLUDGE: execute-kbd-macro executes a normal ;; command-loop, whose first action is to select the ;; current frame and window, which is why we contort @@ -37,7 +33,11 @@ ;; 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)))))) + (execute-kbd-macro keys) + ;; KLUDGE: and then we restore old state + (select-window old-window) + (select-frame old-frame) + (set-buffer old-buffer)))))) (message "Done updating iPlayer cache"))) (defmacro define-iplayer-command (name arglist &rest body)