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

Mir*_*lov 5 emacs elisp minibuffer

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

正如在不活动期间隐藏Emacs回声区域所述,完全摆脱回声区域是不可能的,但有些提议是:

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

phi*_*ils 10

根据手册和C代码,我相信答案是"不".

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

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

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

编辑:

为了确认,如果看一下源为C函数message3_nolog()xdisp.c,它获得用于所选择的帧的迷你缓冲区的帧,选择的是,然后通过对echo_area_display()使用所述当前选择的帧的迷你缓冲区窗口作为回声区窗口.

(Emacs 24.0.95)

因此,用于迷你缓冲区和回声区域的"迷你窗口"确实是同一个,正如手册所述.

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

编辑2:

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

如果你需要真正的分离,那么是的,我相信是这样的.

如果复制方法足够,您可以通过建议可能导致消息写入回显区域的所有函数来纯粹在elisp中进行管理.你可以在这里开始阅读,看看这可能带来什么:

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

(但如果你真的急于实现这一点,我建议你花时间在C上工作并提供一个允许进行这种分离的补丁,因为我有点怀疑所有的建议都是健全的在长期.)