help-gnu-emacs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: how can I run commands when window displays a different buffer?


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




reply via email to

[Prev in Thread] Current Thread [Next in Thread]