Emacs - 抑制自动完成缓冲区

4
在Emacs中,即使在minibuffer中按下tab键自动完成时有多个结果,我也不想弹出*Completions*缓冲区。这会分散注意力并造成不适。
我该如何做?
更好的方法是使用一个不分散注意力或造成不适的替代方法,例如如果可用,则需要一个tab进行自动完成,但需要两个tab来打开Completions缓冲区。这样,当我期望自动完成时,就不会出现Completions缓冲区。这就是OS X终端用于显示选项卡完成可能性的方式。
我认为原因是 minibuffer-completion-help 命令,它是自动运行的,可以在此处找到说明:https://www.gnu.org/software/emacs/manual/html_node/elisp/Completion-Commands.html 我使用ido和smex,但这个问题也会在vanilla Emacs中出现。
编辑:我找到了一个hack来解决这个问题。使用 M-x find-function,我找到并复制了minibuffer-completion-help函数定义到我的.emacs.d/init.el文件中。然后,我将我复制的版本重命名为my-minibuffer-completion-help,并将(with-displayed-buffer-window *Completions* 改为 '(with-displayed-buffer-window *Completions*(在前面加上引号,这样它就只被解释为一个字符串)。最后,我通过放置来覆盖对minibuffer-completion-help的调用。

(advice-add 'minibuffer-completion-help
        :override #'my-minibuffer-completion-help)

在我的.emacs.d/init.el文件中my-minibuffer-completion-help函数之后,一定有更好的方法。

编辑2:在my-minibuffer-completion-help中引用(message "Making completion list...")还有一个额外的好处,就是消除了自动完成时由于另一个消息闪烁而导致的闪屏现象。是否有其他方法可以做到这一点?


请撤销您的编辑并将其作为答案发布。问题应保持为问题,发布答案可以让我们投票决定这个答案是否好用。将自己的答案标记为已接受也会将此问题标记为不再需要回答,但您不能立即执行该操作。 - tripleee
2个回答

1
我相信你只是想将completion-auto-help设置为nil:
(setq completion-auto-help nil)

0

我相信你要找的是暂时修改display-buffer-alist,可能将其设置为在*Completions*中使用display-buffer-no-window,或者使用M-x customize-group completion并将Completion Show Help设置为nil


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