5

我很好奇,是否可以将回显区域和迷你缓冲区分开,所以两个不同的地方(行、窗格、框架)用于消息的输出和命令的输入。

正如Hide Emacs echo area during inactivity中所说,完全摆脱 echo area 是不可能的,但一些建议是:

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

4

1 回答 1

10

根据手册并查看 C 代码,我相信答案是“否”。

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

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

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

编辑:

为了确认,如果您查看 C 函数的源代码message3_nolog()xdisp.c它会获取所选帧的 minibuffer 的帧,选择该帧,然后echo_area_display()使用当前选择的帧的 minibuffer 窗口作为回显区域窗口。

(Emacs 24.0.95)

所以minibuffer和echo区域使用的“mini window”确实是一模一样的,就像手册说的那样。

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

编辑2:

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

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

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

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

(但是如果你真的很想实现这个,我建议你最好把时间花在 C 中工作并提供一个允许进行这种分离的补丁,因为我有点怀疑所有这些建议是否可靠在长期。)

于 2012-04-09T01:17:45.880 回答