我面前有 emacs。
我运行了一个 find-grep,它有很多匹配项,并显示在一个窗口中。文件名以绿色显示为超链接。
我用 C-x 1 使它成为唯一的窗口。
如果我单击文件名,窗口会垂直拆分,包含找到的文本的文件会显示在另一个窗口中。
如果我点击更多文件名,那么新文件会替换旧文件,这正是我想要发生的。
到目前为止,还不错......
但是,如果我调整窗口大小,emacs 将周期性地(当我单击时)再次拆分两个窗口之一,使显示难以阅读。然后它将在两个新窗口之间循环打开新文件。有时它会打开更多窗口并使情况变得更糟。如果我关闭这些新窗口中的任何一个,它们就会再次重新打开。
事实上,即使我不调整任何东西的大小,有时也会发生这种不正常的行为。如果我这样做,它似乎会更频繁地发生。
我希望 emacs 停止四处乱窜,只有一个 find-grep 窗口和一个“显示”窗口,并且总是用新文件替换显示窗口。我还希望能够将这些窗口设置为看起来最方便的大小。
有什么办法可以实现吗?
或者任何人都可以给我指点一篇关于整体(替换此窗口的内容/替换不同窗口的内容/通过拆分创建另一个窗口)如何工作的文章,所以我可以去理智地破解它。
最佳答案
简短修复: 尝试这样做
(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 手册 - http://www.chemie.fu-berlin.de/chemnet/use/info/elisp/elisp_26.html
关于windows - 我可以让 emacs grep windows 只使用另一个窗口打开文件吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9433013/