使用emacs,如何交换两个窗口的位置

使用emacs,如何交换两个窗口的位置,emacs,Emacs,我在Emacs中打开了两个窗口,我想交换它们的位置 考虑在源文件上有一个RePL,我想交换它们的位置,以便RePL低于源文件。 我还想保留窗户的大小这是我无耻地偷来的 在Gentoo的Emacs 23.1.1上测试。这会保留窗口大小 我还发现这个稍微干净一点 (defun transpose-windows () (interactive) (let ((this-buffer (window-buffer (selected-window))) (other-buffe

我在Emacs中打开了两个窗口,我想交换它们的位置

考虑在源文件上有一个RePL,我想交换它们的位置,以便RePL低于源文件。


我还想保留窗户的大小

这是我无耻地偷来的

在Gentoo的Emacs 23.1.1上测试。这会保留窗口大小

我还发现这个稍微干净一点

(defun transpose-windows ()
  (interactive)
  (let ((this-buffer (window-buffer (selected-window)))
        (other-buffer (prog2
                          (other-window +1)
                          (window-buffer (selected-window))
                        (other-window -1))))
    (switch-to-buffer other-buffer)
    (switch-to-buffer-other-window this-buffer)
    (other-window -1)))

同样在Emacs 23.1.1上进行了测试,以下版本适用于任意数量的窗口。当有两个以上的窗口时,重复调用将使选定的缓冲区依次出现在每个窗口中

(defun swap-buffer () (interactive) (cond ((one-window-p) (display-buffer (other-buffer))) ((let* ((buffer-a (current-buffer)) (window-b (cadr (window-list))) (buffer-b (window-buffer window-b))) (set-window-buffer window-b buffer-a) (switch-to-buffer buffer-b) (other-window 1))))) (取消交换缓冲区() (互动) (条件((一个窗口-p)(显示缓冲区(其他缓冲区))) ((let*((缓冲器-a(当前缓冲器)) (窗口-b(cadr(窗口列表))) (缓冲区b(窗口缓冲区窗口b))) (设置窗口缓冲区窗口-b缓冲区-a) (切换到缓冲器-b) (其他窗口1(())) 看。你可以通过elpa安装它,我觉得这个库很有用。根据这个问题,我主要使用它来交换两个窗口;但它提供的功能远不止这些


按照链接查看各种转换的ascii图。

我刚才也看到了Stevey的帖子:) (defun swap-buffer () (interactive) (cond ((one-window-p) (display-buffer (other-buffer))) ((let* ((buffer-a (current-buffer)) (window-b (cadr (window-list))) (buffer-b (window-buffer window-b))) (set-window-buffer window-b buffer-a) (switch-to-buffer buffer-b) (other-window 1)))))