在Emacs中是否可以分离minibuffer和echo区域?

5
我很好奇能否将回显区和迷你缓冲区分开,使得消息输出和命令输入在两个不同的位置(行、窗格、框架)中进行。如在隐藏Emacs闲置期间的回显区中所述,完全摆脱回显区是不可能的,但有一些提议: 我有哪些选择?理论上是否可以分离回显区和迷你缓冲区?从理论上讲,是否需要重写C源代码并重新编译Emacs?请发表任何想法和建议。

您IP地址为143.198.54.68,由于运营成本限制,当前对于免费用户的使用频率限制为每个IP每72小时10次对话,如需解除限制,请点击左下角设置图标按钮(手机用户先点击左上角菜单按钮)。 - Abdillah
1个回答

10

根据手册和查看C代码,我认为答案是“否”。

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

变量'max-mini-window-height'指定调整迷你缓冲区窗口的最大高度,也适用于回显区域(实际上是迷你缓冲区窗口的特殊用法; *参见Minibuffer Misc ::)。

Minibuffer Misc链接没有进一步讨论这个特定点,但如果回显区明确使用迷你缓冲区窗口,则无法将它们分开。

编辑:

如果您查看xdisp.cmessage3_nolog() C函数的源代码,则会获取所选帧的迷你缓冲区的框架,然后选择该框架,并传递到echo_area_display(),该函数使用当前选定的帧的迷你缓冲区窗口作为回显区窗口。

(Emacs 24.0.95)

因此,用于迷你缓冲区和回显区的“小窗口”确实是相同的,就像手册中所述。

我唯一能想到的可能性是尝试找到一种自动“复制”回显区消息到其他窗口的方法,但由于所有这些都发生在C代码中,而且是不暴露给elisp的函数,我认为也许这不可能。

编辑2:

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

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

如果复制方法足够,您可能可以通过建议导致写入回显区消息的所有函数来仅在elisp中进行。 您可以从这里开始阅读以了解可能需要做什么:

M-: (info "(elisp) 回显区") RET

(但如果你真的迫切想要实现这个功能,我建议你在 C 语言上花更多时间,并提供一个补丁程序来允许这样的分离,因为我有点怀疑所有这些建议长期来看是否都是稳健的。)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接