Emacs 文本卡在迷你缓冲区中

Ed *_*vis 5 emacs minibuffer

我正在使用 GNU Emacs 24.4.1(编辑:也可以在 24.5.1 中看到)。vc-mode 的一些旧输出(我认为)出现在迷你缓冲区中:

Auto-merging foo/bar
Run Code Online (Sandbox Code Playgroud)

我目前没有进行任何版本控制操作,但此文本卡在迷你缓冲区中。按 Cg 会短暂地将其替换为“退出”,但会在下一次击键时返回。

它不是什么:它不是递归编辑。C-] 或abort-recursive-edit给出错误No recursive edit is in progress,并且迷你缓冲区中的尴尬文本仍然存在。

它不是用鼠标选择的文本,因为我在文本控制台(通过 ssh 的 GNU 屏幕会话)中运行,没有鼠标支持。

我已经尝试了http://www.emacswiki.org/emacs/MiniBufferswitch-to-minibuffer中的命令,但这给出了错误。然而这个尴尬的文字仍然不断出现。Minibuffer is not active

这不是屏幕大小问题(使用过时的文本,因为 Emacs 不知道终端窗口的正确大小),因为我可以调整终端窗口的大小,Emacs 也可以正确调整它的大小......文本仍然显示在迷你缓冲区中。

有时我在迷你缓冲区中看到两行或更多行文本的这种效果。事实上,我当前的 Emacs 会话emacsclient -nw在一个屏幕上的一个客户端会话 ( ) 中具有该功能,主会话仅显示一行。客户端会话在迷你缓冲区中显示了几行版本控制内容:

Auto-merging foo/bar
CONFLICT (content): Merge conflict in foo/bar
Run Code Online (Sandbox Code Playgroud)

我怎样才能让它消失?

leg*_*cia 3

如果您点击C-g终止正在运行的 shell 命令,则可能会发生这种情况。这将使迷你缓冲区窗口指向*Shell Command Output*缓冲区。

如bug #25209中所述,您可以通过调用(minibuffer-window)暂存缓冲区来检查是否发生了这种情况:

(minibuffer-window)
#<window 2 on *Shell Command Output*>
Run Code Online (Sandbox Code Playgroud)

并用以下方法修复它:

(set-window-buffer (minibuffer-window) (get-buffer " *Minibuf-0*"))
Run Code Online (Sandbox Code Playgroud)

此提交已修复此问题,并且该修复已作为 Emacs 26.1 的一部分发布。