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

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

Re: Q: How can I swap buffers in two windows?


From: Lennart Borgman
Subject: Re: Q: How can I swap buffers in two windows?
Date: Thu, 22 Sep 2005 19:09:18 +0200
User-agent: Mozilla Thunderbird 1.0.6 (Windows/20050716)

Eric Pement wrote:

This request has appeared several times on this newsgroup, worded in
different ways, but has never been answered. I have already checked the
FAQ, M-x apropos, and the Emacs info pages. Can someone please give
help or direction here?

I have an Emacs frame split into two windows, which may be split
vertically or horizontally. I would like a single command to swap or
exchange both windows, i.e., put buffer A into window B, and put buffer
B into window A. If there are not exactly two windows in the frame,
issue an error message.

I know that I can do "C-x b", {B}, <RET>, "C-x o", "C-x b", {A}, <RET>,
but I want to execute it with a single command without typing out the
buffer names at all. Emacs already knows the names of the buffers in
each window, so why should I have to type them?

My elisp skills are not well-developed, so I'm asking for help. I have
GNU Emacs version 21.3.50.8. Thanks in advance.
Something like this perhaps:

(defun rotate-window-buffers()
 (interactive)
 (let* ((windows (window-list))
        (buffers (mapcar (lambda(w)
                           (window-buffer w))
                         windows))
        (wpoints (mapcar (lambda(w)
                           (window-point w))
                         windows))
        (w (pop windows))
        )
   (setq windows (reverse windows))
   (push w windows)
   (setq windows (reverse windows))
   (mapc (lambda(w)
           (let ((b (pop buffers))
                 (p (pop wpoints)))
             (set-window-buffer w b)
             (set-window-point w p)))
         windows)))





reply via email to

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