2011-05-20 231 views
7

如何修改emacs选择关闭缓冲区后显示哪个缓冲区的方式?关闭缓冲区后显示Emacs缓冲区

当我有多个列显示相同的缓冲区,然后在缓冲区的一个打开另外一个文件,然后关闭新开的缓冲区,它不会切换回之前的缓冲区,但到另一个缓冲区。

我会尝试用一个例子来解释:

  • 开始与*刮*新的Emacs
  • CX 2(分成两列)
  • CX比照1(找不到文件1 )
  • CX O(切换到其他帧)
  • CX b 1(找到文件1)
  • CX CF 2(找到文件2)
  • C-X K(杀缓冲)

现在切换到划伤但我想它再次显示在两个窗口1,是有可能使Emacs的这样的行为?

回答

3

这可能不是您的问题的直接答案,但可能有帮助。

Emacs的管理它的缓冲区列表,包括决定当你杀一个(通过kill-buffer)的缓冲区被显示。我没有看过它是如何完成的,但是documentation is "out there"。很多人都有created定制buffer-stack管理魔法来改变emacs做事情的方式,也许有些是基于贝叶斯分析,或者其他什么。你可以想象可能性。

我从来没有看着改变emacs的方式管理其缓冲区。相反,我只需绑定other-windowswitch-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

正如你所说,并非真正在寻找什么。问题是切换到缓冲区也不想切换到已经可见的缓冲区。如果我在两个帧中都打开了文件1,然后在其中一个帧中打开文件2并切换到缓冲区,它不会建议1,而是* scratch *。我查看了emacs的源代码,函数other-buffer(由kill-buffer使用)有一个可选的参数visible-ok,如果设置不关心缓冲区是否在另一个框架中可见。但我不想重新编译emacs来解决我的问题。 – Puppe 2011-05-20 17:46:54

+0

嘿嘿,我很确定你不需要重新编译emacs来让它做你想做的事。我不清楚这是什么。你说我提出的是“不是你真正想要的。”为什么不?不管你想象的是什么,有一小部分elisp会做你想做的。试着研究一下'switch-to-buffer-other-window'。也许这会有所帮助。 – Cheeso 2011-05-21 08:38:01

+0

我想要做的是关闭一帧中的缓冲区,并切换到在该帧中打开的前一个缓冲区,即使该缓冲区可能在另一个帧中可见。这绝对是可能的,我只需要学习(e)lisp。 – Puppe 2011-05-21 19:28:05

0

这也并不十分直接的帮助,但Winner mode可以帮助你得到你想要得到的。

0

你在使用tabbar模式吗?我有同样的问题,对我来说tabbar是原因。 Tabbar将函数tabbar-buffer-kill-buffer-hook添加到kill-buffer-hook。您可以使用(remove-hook 'kill-buffer-hook 'tabbar-buffer-kill-buffer-hook)将其删除。

如果你不使用的TabBar尝试M-x describe-variablekill-buffer-hook。这个列表中的一个函数应该负责处理你的缓冲区。