特别是,如果一个窗口包含一个dired缓冲区,并且我想告诉Emacs在哪个其他打开的窗口中应该显示一个新文件.
如果Emacs框架例如像这样拆分:
____________________ | | | | | | | A | B | | | | | | | -------------------- | | | | C | D | | | | --------------------
其中A,B,C和D是窗口.如果A包含一个dired缓冲区,我可以告诉Emacs在窗口D的新缓冲区中打开一个新文件吗?
您可以使用Icicles执行您想要的操作.在Icicle模式下,C-x o(通常是其他窗口)是冰柱 – 其他窗口或框架.前缀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设置为您选择的窗口. Icicles建议命令display-buffer,switch-to-buffer和switch-to-buffer-other-window,以便下次调用它们时,它们使用的窗口是icicle-next-window-for-display-的值缓冲. (在调用之后,它们会恢复正常行为.)
这也意味着如果您有另一种选择窗口的方法,您更喜欢(例如使用here中提到的其他方法之一循环),那么您可以修改该方法以将icicle-next-window-for-display-buffer设置为选择的窗口,以获得相同的效果(在冰柱模式下). IOW,你选择窗户的方式很重要;只需将变量值设置为它,下一个缓冲区显示操作将使用它.