是否可以在Emacs中分离微型缓冲区和回波区?

是否可以在Emacs中分离微型缓冲区和回波区?,emacs,elisp,minibuffer,Emacs,Elisp,Minibuffer,我很好奇,是否有可能将回音区和微型缓冲区分开,这样就可以使用两个不同的位置(行、窗格、帧)来输出消息和输入命令 如中所述,不可能完全消除回声区,但一些建议如下: ) -例如,仅在回显区域打印按键,并对其他消息使用*消息*缓冲区 我有什么选择?理论上是否有可能将回波区和微型缓冲区分开?从理论上讲,它需要重写C源代码并重新编译Emacs吗?请发表任何想法和想法。根据手册和C代码,我相信答案是“否” M-:(信息”(elisp)回音区域自定义”)RET说: 变量“max mini window h

我很好奇,是否有可能将回音区和微型缓冲区分开,这样就可以使用两个不同的位置(行、窗格、帧)来输出消息和输入命令

如中所述,不可能完全消除回声区,但一些建议如下:

  • )
  • -例如,仅在回显区域打印按键,并对其他消息使用
    *消息*
    缓冲区

我有什么选择?理论上是否有可能将回波区和微型缓冲区分开?从理论上讲,它需要重写C源代码并重新编译Emacs吗?请发表任何想法和想法。

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

M-:
(信息”(elisp)回音区域自定义”)
RET说:

变量“max mini window height”指定了调整小缓冲区窗口大小的最大高度,它也适用于回显区域(这实际上是小缓冲区窗口的特殊用途;*注意小缓冲区杂项:)

Minibuffer Misc
链接不会进一步讨论该特定点,但如果回声区域明确使用Minibuffer窗口,则您将无法将它们分开

编辑:

为了确认,如果您查看
xdisp.C
中C函数
message3\u nolog()
的源代码,它将获得所选帧的微缓冲区的帧,选择该帧,然后传递到
echo\u area\u display()
,该窗口使用当前所选帧的微缓冲区窗口作为回音区域窗口

(Emacs 24.0.95)

因此,用于微型缓冲区和回波区的“微型窗口”实际上是一个相同的窗口,正如手册所述

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

编辑2:

从理论上讲,它需要重写C源代码并重新编译Emacs吗

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

如果复制方法足够,您可以通过建议所有可能导致消息写入回显区域的函数,完全在elisp中管理这一点。您可以从这里开始阅读,看看这可能需要什么:

M-:
(信息(elisp)回波区)
RET


(但如果您真的非常想实现这一点,我建议您最好将时间花在C语言上,并提供一个允许进行这种分离的补丁,因为我有点怀疑所有这些建议从长远来看是否可靠。)

有时,我会发现emacs交互式提示阻止状态消息。分离将使emacs更好!