GNU bug report logs -
#7381
24.0.50; Provide a hook run when a window is selected
Previous Next
Reported by: Štěpán Němec <stepnem <at> gmail.com>
Date: Fri, 12 Nov 2010 00:12:02 UTC
Severity: wishlist
Merged with 16436
Found in version 24.0.50
Fixed in version 27.1
Done: Glenn Morris <rgm <at> gnu.org>
Bug is archived. No further changes may be made.
Full log
Message #76 received at 7381 <at> debbugs.gnu.org (full text, mbox):
;; fixed 7381 27.1
;; quit
> The subject line says it all: could we get a `window-selected-hook' or
> `window-selected-functions' or something?
>
> Use case: I wanted to make myself a command to select the last selected
> window (i.e., repeating the command would toggle between two windows).
>
> After some head-scratching, the best I could come up with is this:
>
> (defun .goto-mru-window ()
> (interactive)
> (select-window (frame-parameter nil '.last-selected-window)))
>
> (defadvice select-window (before .save-selected-window activate)
> (set-frame-parameter nil '.last-selected-window (selected-window)))
>
> ...which seems to work most of the time, but using an advice doesn't
> feel that great, esp. with C functions.
Current master now provides a hook run when redisplay detects that the
selected window has changed wrt last redisplay. The hook is called
'window-selection-change-functions' and is described in detail in the
Elisp manual. Below I sketch how that hook could be used to provide
the behavior you asked for.
martin
(defvar .old-selected-window (selected-window))
(defun .update-old-selected-window (frame)
(unless (eq .update-old-selected-window old-selected-window)
(setq .old-selected-window (old-selected-window))))
(add-hook 'window-selection-change-functions '.update-old-selected-window)
(defun .goto-mru-window ()
(interactive)
(select-window .old-selected-window))
(global-set-key [(control .)] '.goto-mru-window)
This bug report was last modified 6 years and 136 days ago.
Previous Next
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.