这可能不是您的问题的直接答案,但可能有帮助。
Emacs的管理它的缓冲区列表,包括决定当你杀一个(通过kill-buffer
)的缓冲区被显示。我没有看过它是如何完成的,但是documentation is "out there"。很多人都有created定制buffer-stack管理魔法来改变emacs做事情的方式,也许有些是基于贝叶斯分析,或者其他什么。你可以想象可能性。
我从来没有看着改变emacs的方式管理其缓冲区。相反,我只需绑定other-window
和switch-to-buffer
即可轻松击键(C-x o,C-x b),我非常擅长使用它们。
你可以创建你想要的东西简单的功能:它应该销毁所有其他窗口,然后使当前的缓冲区同时显示在分割窗口。幸运的是,emacs具有完成这些功能的功能。
(defun cheeso-show-buffer-two-windows()
"Close all other windows; then split, and show the current
buffer in both windows."
(interactive)
(delete-other-windows)
(split-window-vertically))
将它绑定到按键和badda-bing,你就在那里。这是一个垂直分割 - 窗口显示在垂直栈中。如果你想水平分割(窗口是并排的),那么取代......好吧,你知道的。
正如你所说,并非真正在寻找什么。问题是切换到缓冲区也不想切换到已经可见的缓冲区。如果我在两个帧中都打开了文件1,然后在其中一个帧中打开文件2并切换到缓冲区,它不会建议1,而是* scratch *。我查看了emacs的源代码,函数other-buffer(由kill-buffer使用)有一个可选的参数visible-ok,如果设置不关心缓冲区是否在另一个框架中可见。但我不想重新编译emacs来解决我的问题。 – Puppe 2011-05-20 17:46:54
嘿嘿,我很确定你不需要重新编译emacs来让它做你想做的事。我不清楚这是什么。你说我提出的是“不是你真正想要的。”为什么不?不管你想象的是什么,有一小部分elisp会做你想做的。试着研究一下'switch-to-buffer-other-window'。也许这会有所帮助。 – Cheeso 2011-05-21 08:38:01
我想要做的是关闭一帧中的缓冲区,并切换到在该帧中打开的前一个缓冲区,即使该缓冲区可能在另一个帧中可见。这绝对是可能的,我只需要学习(e)lisp。 – Puppe 2011-05-21 19:28:05