在 Emacs 中,我不希望 *Completions* 缓冲区弹出,即使我在 minibuffer 中按 tab 自动完成并且有多个结果。这让人分心和刺耳。
我怎样才能做到这一点?
更好的是,我想要一种不会分散注意力或不和谐的替代方案——例如,如果可用,需要一个选项卡来自动完成,但需要两个选项卡来打开完成缓冲区。这样,当我期待自动完成时,我不会得到 Completions 缓冲区。这就是 OS X 终端为显示选项卡完成可能性所做的工作。
我认为原因是自动运行的 minibuffer-completion-help 命令,如下所述:https ://www.gnu.org/software/emacs/manual/html_node/elisp/Completion-Commands.html
我使用 ido 和 smex,但问题也出现在香草 Emacs 中。
编辑:我找到了解决此问题的方法。使用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)
my-minibuffer-completion-help
在我的.emacs.d/init.el
文件中的函数之后。一定会有更好的办法。
编辑 2:引用(message "Making completion list...")
inmy-minibuffer-completion-help
具有消除自动完成中闪烁的额外好处,这是由在自动完成期间闪烁另一条消息引起的。是否有可能以另一种方式做到这一点?