我通常使用 emacs,将单个框架拆分为垂直堆叠的 2 个窗口。
在 emacs 23(及之前)中,当我遇到编译器警告的一行时,回显区域/迷你缓冲区将展开以显示消息的整个文本(如果消息超过一行),但 2 个主窗口否则将不受影响(因此底部窗口可能会暂时丢失一行或两行显示)。
然而,在 emacs 24 中,整个底部窗口(在 minibuffer 上方)向上移动,因此顶部窗口最终会暂时丢失一行或 2 行显示。我发现整个底部窗口移动并希望回到 emacs 23(及更早版本)的行为在视觉上非常令人不安。
我查看了 emacs 手册(windows、frames、minibuffer、echo area)和版本 24 NEWS 并没有找到任何提及可能导致此行为的更改或可能能够控制此行为的变量行为。任何指针将不胜感激。
更新:
重现行为:
- 打开emacs 24,将框架分成2个窗口,一个在另一个之上
- 在顶部窗口中打开一些充满文本的缓冲区
- 在底部窗口中打开
"*scratch*"
缓冲区 - 将此代码段添加到您的暂存缓冲区并从光标处执行它(使用
eval-last-sexp
, C-x C-e),确保测试消息足够长,可以包裹在窗口中
(message "this is a very long message that will cause the minibuffer window to show more than one line of text and cause the whole bottom window to shift as a result in emacs 24")
这应该会导致"*scratch*"
缓冲区窗口在迷你缓冲区显示消息时向上移动,并在消息消失时返回。如果您在 emacs 23 中尝试相同的测试,"*scratch*"
缓冲区窗口将不会移动。
更新 2:
为了进一步澄清(也许我的描述让一些人感到困惑),但问题不在于 minibuffer 的行为。minibuffer 的行为很好并且没有改变(它暂时调整大小以显示所有文本)。我所指的行为是小缓冲区上方的窗口(2 个主缓冲区窗口的下部窗口)。在 emacs 23 中,这个窗口根本没有移动(所以下面的行暂时被遮住了)。在 emacs 24 中,此窗口中的所有文本都会随着 minibuffer 大小的调整而上移。这是新的、有问题的行为。