3

我面前有emacs。

我运行了一个 find-grep,它有很多命中,显示在一个窗口中。文件名以绿色显示为超链接。

我用 Cx 1 把它作为唯一的窗口。

如果我单击文件名,则窗口会垂直拆分,并且带有找到的文本的文件会显示在另一个窗口中。

如果我单击更多文件名,那么新文件将替换旧文件,这就是我想要发生的事情。

到目前为止,一切都很好...

但是,如果我调整窗口大小,那么 emacs 将定期(当我单击时)再次拆分两个窗口之一,从而使显示难以阅读。然后它将在两个新窗口之间循环打开新文件。偶尔它会打开更多的窗户,使情况变得更糟。如果我关闭这些新窗口中的任何一个,它们就会再次重新打开。

事实上,即使我不调整任何大小,有时也会发生这种反常行为。如果我这样做,它似乎会更频繁地发生。

我希望 emacs 停止胡闹,只拥有一个 find-grep 窗口和一个“显示”窗口,并始终用新文件替换显示窗口。我还希望能够将这些窗口设置为看起来最方便的尺寸。

有什么办法可以做到这一点?

或者任何人都可以向我指出一篇关于整个(替换这个窗口的内容/替换另一个窗口的内容/通过拆分创建另一个窗口)事情如何工作的文章,所以我可以去破解它理智。

4

1 回答 1

2

简短的解决方法:尝试这样做

(setq split-height-threshold nil
      split-width-threshold nil)

这将阻止 Emacs 自动拆分窗口(水平或垂直)。在其他情况下这可能是不可取的,但这应该可以完成工作。尝试一周左右,看看它是否会扰乱你的流程。

此外,我发现如果该点位于其中一个窗口中,并且我单击了一个链接,则该文件会在下一个窗口中打开(如果有的话)。

因此,如果您想让文件在右侧窗口中打开(当您有多个窗口时),您可以确保该点在您想要的窗口之前的窗口中。

更长的答案:

好的。我能够重现该问题。问题是显示文件的窗口非常大(宽或高),因为您调整了它的大小,Emacs 看到宽度或高度大于相应的阈值并同样拆分它。因此,我们必须要么提高阈值,要么完全禁止这种行为。

而且,只是为了回答最后几个问题:

  • 要获取当前窗口 -(selected-window)
  • 要获得下一个窗口 -(next-window)
  • 选择一个窗口 -(select-window foo-window)
  • 要获取当前窗口的缓冲区 -(current-buffer)
  • 要获取某个窗口的缓冲区 -(window-buffer foo-window)
  • 为窗口设置缓冲区 -(set-window-buffer foo-window bar-buffer)

我相信您可以使用这些功能将体面的窗口/缓冲区管理功能组合在一起。

您可以使用C-h f这些函数获取更多详细信息。另请查看 Elisp 手册 - h​​ttp: //www.chemie.fu-berlin.de/chemnet/use/info/elisp/elisp_26.html

于 2012-06-07T12:10:28.280 回答