我看到了这个代码片段,链接在这里。
今天,它交换两个窗口缓冲区的内容,只要有恰好两个窗口。对我来说,问题在于我通常会运行ecb,它会创建1个或多个额外的窗口。除了调整从其他地方得到的方法之外,我从未真正使用过elisp,而这个(希望)简单的更改超出了我的当前理解范围。
我花了一些时间查看ecb信息和emacs手册,但找不到合理的方法来确定是否有恰好两个非ecb窗口打开。
我还尝试在ecb窗口上使用像“bury-buffer”这样的东西,这样我就可以假定它们不会在列表的前面,但这是一个有缺陷的方法。
所以我的问题是,有没有办法修改要使其与ecb配合使用?我假设ecb窗口有一些特殊之处,但我找不到任何我可以访问的东西。
(defun swap-windows ()
"If you have 2 windows, it swaps them."
(interactive)
(cond ((not (= (count-windows) 2))
(message "You need exactly 2 windows to do this."))
(t
(let* ((w1 (first (window-list)))
(w2 (second (window-list)))
(b1 (window-buffer w1))
(b2 (window-buffer w2))
(s1 (window-start w1))
(s2 (window-start w2)))
(set-window-buffer w1 b2)
(set-window-buffer w2 b1)
(set-window-start w1 s2)
(set-window-start w2 s1)))))
今天,它交换两个窗口缓冲区的内容,只要有恰好两个窗口。对我来说,问题在于我通常会运行ecb,它会创建1个或多个额外的窗口。除了调整从其他地方得到的方法之外,我从未真正使用过elisp,而这个(希望)简单的更改超出了我的当前理解范围。
我花了一些时间查看ecb信息和emacs手册,但找不到合理的方法来确定是否有恰好两个非ecb窗口打开。
我还尝试在ecb窗口上使用像“bury-buffer”这样的东西,这样我就可以假定它们不会在列表的前面,但这是一个有缺陷的方法。
所以我的问题是,有没有办法修改要使其与ecb配合使用?我假设ecb窗口有一些特殊之处,但我找不到任何我可以访问的东西。