2014-06-06 109 views
8

如果一个Emacs帧在多个窗口中分裂并且打开一个新缓冲区,是否可以告诉Emacs在哪个窗口打开缓冲区。告诉Emacs在特定窗口中打开新的缓冲区

尤其是,如果一个窗口包含直接缓冲区,并且我想告诉Emacs在其他打开的窗口中显示一个新文件。

如果Emacs框架是例如分裂像这样:

____________________ 
|  |   | 
|  |   | 
| A | B | 
|  |   | 
|  |   | 
-------------------- 
|  |   | 
| C | D | 
|  |   | 
-------------------- 

其中A,B,C和d是窗口。如果A包含直接缓冲区,我可以告诉Emacs在窗口D的新缓冲区中打开一个新文件吗?

回答

0

其他人可能会给你更直接回答你的问题的答案。我的答案是将焦点移至所需的窗口,然后使用C-x C-f或其他任何方法打开文件或在所选窗口中显示所需的缓冲区。

为了直接执行您所要求的操作,无论如何您都需要使用调用所需命令的按键序列。如果你想要一些适用于不同命令的一般东西(例如find-fileswitch-to-buffer),那么你需要使用前缀密钥或改变前缀arg。这通常与切换到窗口然后使用常用命令一样多的按键。

当然,我的建议你需要一个命令来快速切换到你想要的窗口。有各种各样的命令可以让你在窗口之间循环或使用完成来快速按名称或编号选择一个窗口。 (a)指定目标窗口(b)调用显示缓冲区的命令。(b)调用显示缓冲区的命令。 IOW,只要做到老派的方式:去窗口,然后在那里显示。当然,如果你真的不想在新显示的缓冲区中结束,而你只是想把焦点保持在你开始的位置,那么根据我的建议,你需要循环(例如)回到你的开始窗口。从您的描述中不清楚这是否是您的用例。如果是这样,那么我的解决方案可能不是那么有用。 (a)命令(仅)指定用于以下display-buffer命令的窗口和(b)display-buffer命令。 IOW,基本上与我建议的相同,但第一步只是指定目标窗口而不是切换到目标窗口,第二步将使用指定的窗口。 (您需要定义(a)及(b)中,作为一般的机制。)

在这种情况下也我的建议,从别人可能暗示可能有所不同,因为它并不试图结合窗口的选择用显示命令。它们按顺序耦合,但不能组合成一个命令。

+0

问题是特别关心选择“链接”或“命令”打开缓冲区的位置。很明显,人们可以移动到一个窗口并在那里直接打开一个缓冲区。问题是:当我在dired(例如)中按下“链接”时,如何指定将为将要打开的新缓冲区选择哪个窗口? – UndeadKernel

+0

@UndeadKernel:我不确定你说的问题是OP的问题。但是你的问题的答案是,“链接”调用的任何命令都会决定行为。没有更多,没有更多。该命令可以执行这个或那个特定的动作,或者它可以提示用户在一些可能的动作中进行选择,或者...一个命令是一个Elisp函数 - 它可以执行一个函数可以做的任何事情。关键是无论什么命令被调用(不管是否点击一个链接)决定了行为是什么。它可能会给你一些选择,或者它可能不会。 – Drew

3

这里是另外一个答案 -

你可以你想使用Icicles什么事。在冰柱模式下,C-x o,通常是other-window,是icicle-other-window-or-frame。前缀arg为它提供了几种可选行为,其中一种(对于Emacs 24及更高版本)将选择一个将由下一个缓冲区显示操作使用的窗口。,C-x C-f,C-x b)。

这就是如果您使用双重纯前缀arg:C-u C-u C-x o会发生什么情况。这会调用命令icicle-choose-window-for-buffer-display,您当然也可以绑定到其他任何键。

您按名称选择目标窗口(使用完成或骑自行车等)。

该命令的作用是将变量icicle-next-window-for-display-buffer设置为您选择的窗口。 冰柱建议命令display-buffer,switch-to-bufferswitch-to-buffer-other-window以便下次调用它们时使用的值是icicle-next-window-for-display-buffer的值。 (在调用之后,它们返回到它们的正常行为。)

这意味着如果您有另一种选择窗口的方法(比如使用其他方法之一here),那么您可以修改该方法将icicle-next-window-for-display-buffer设置为所选窗口,以获得相同效果(在冰柱模式下)。 IOW,它如何选择窗口无关紧要;只需将变量值设置为它,下一个缓冲区显示操作将使用它。

+0

谢谢。我会试试这个。 – Hypnotoad

相关问题