【发布时间】:2018-02-20 01:38:03
【问题描述】:
在 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)
在我的.emacs.d/init.el 文件中的my-minibuffer-completion-help 函数之后。一定有更好的办法。
编辑 2:在 my-minibuffer-completion-help 中引用 (message "Making completion list...") 的另一个好处是可以消除自动完成时由于在自动完成期间闪烁另一条消息而导致的闪烁。是否有可能以另一种方式做到这一点?
【问题讨论】:
-
请回滚您的编辑并将其作为答案发布。这个问题应该仍然是一个问题,发布一个答案可以让我们投票决定这个答案是否好。将您自己的答案标记为已接受也会将此问题标记为不再需要答案,尽管您不能立即这样做。
标签: emacs terminal customization ido