summary |
shortlog |
log |
commit | commitdiff |
tree
raw |
patch |
inline | side by side (from parent 1:
561c685)
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.
(lambda ()
(select-frame iplayer-command-frame)
(select-window iplayer-command-window)
(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
;; 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
;; 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.
;; 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)
(message "Done updating iPlayer cache")))
(defmacro define-iplayer-command (name arglist &rest body)