|
From: | Stefan Monnier |
Subject: | Re: how can I run commands when window displays a different buffer? |
Date: | Sun, 29 Oct 2017 21:52:27 -0400 |
User-agent: | Gnus/5.13 (Gnus v5.13) Emacs/27.0.50 (gnu/linux) |
> The code below should do that. > (defun update-window-buffer-list () > (let ((old (frame-parameter nil 'window-buffer-list)) > new this) > (walk-window-tree > (lambda (window) > (let ((old-buffer (cdr (assq window old))) > (new-buffer (window-buffer window))) > (unless (eq old-buffer new-buffer) > ;; The buffer of a previously existing window has changed or > ;; a new window has been added to this frame. > (ding)) > (setq new (cons (cons window new-buffer) new))))) > (set-frame-parameter nil 'window-buffer-list new))) > (add-hook 'window-configuration-change-hook 'update-window-buffer-list) > You can write a more destructive version using ‘setcdr’. Hmm... why use a frame-parameter rather than a window-parameter? (defun update-window-buffer-list () (walk-window-tree (lambda (window) (let ((old-buffer (window-parameter window 'my-last-buffer)) (new-buffer (window-buffer window))) (unless (eq old-buffer new-buffer) ;; The buffer of a previously existing window has changed or ;; a new window has been added to this frame. (ding) (setf (window-parameter window 'my-last-buffer) new-buffer)))))) -- Stefan
[Prev in Thread] | Current Thread | [Next in Thread] |