可以在Emacs中分离迷你缓冲区和回声区域吗?

时间:2012-04-08 14:08:08

标签: emacs elisp minibuffer

我很好奇,是否可以将回音区域和迷你缓冲区分开,因此两个不同的位置(行,窗格,帧)用于输出消息和输入命令。

正如在Hide Emacs echo area during inactivity 中所说,完全摆脱回声区域是不可能的,但有些建议是:

我有哪些选择?理论上可以将回声区域和迷你缓冲区分开吗?它理论上是否需要重写C源代码并重新编译Emacs?请发表任何想法和想法。

1 个答案:

答案 0 :(得分:10)

根据手册和C代码,我相信答案是“不”。

M - : (info "(elisp) Echo Area Customization") RET 说:

  

变量`max-mini-window-height',它指定调整迷你缓冲窗口大小的最大高度,也适用于回声区域(这实际上是迷你缓冲窗口的特殊用途; * note Minibuffer Misc::)

Minibuffer Misc链接未进一步讨论该特定点,但如果回显区域明确使用了迷你缓冲区窗口,那么您将无法将它们分开。

修改:

要进行确认,如果您查看message3_nolog()中C函数xdisp.c的来源,它会获取所选帧的迷你缓冲区的帧,选择该帧,然后传递给echo_area_display()它使用当前选择的帧的迷你缓冲窗口作为回声区域窗口。

(Emacs 24.0.95)

因此,用于迷你缓冲区和回声区域的“迷你窗口”确实是同一个,就像手册所述。

我能想到的唯一可能性是尝试找到一种自动复制回显区域消息到其他窗口的方法,但因为这一切都发生在C代码中,在未暴露的函数中elisp,我怀疑这也不可能。

编辑2:

  

理论上是否需要重写C源代码并重新编译Emacs?

如果你需要真正的分离,那么是的,我相信情况就是这样。

如果复制方法已经足够,那么可能能够通过建议所有可能导致消息被写入回声区域的函数来完全管理它。你可以在这里开始阅读,看看这可能带来什么:

M - : (info "(elisp) The Echo Area") RET

(但如果你真的非常渴望实现这一点,我建议你花时间在C上工作并提供一个允许进行这种分离的补丁,因为我有点怀疑所有这些建议从长远来看会很稳健。)