在Emacs minibuffer中启用自动完成功能

问题描述 投票:4回答:3

我正在尝试在迷你缓冲区中打开auto-complete

(add-hook 'minibuffer-setup-hook 'auto-complete-mode)

我得到的是auto-complete在minibuffer的第一个实例中运行,但不再运行。加载后即为完整的minibuffer-setup-hook

(auto-complete-mode turn-on-visual-line-mode ido-minibuffer-setup rfn-eshadow-setup-minibuffer minibuffer-history-isearch-setup minibuffer-history-initialize)

如何持续打开auto-complete

emacs elisp
3个回答
7
投票

[如果您的函数充当切换键,您很少想向钩子变量添加功能符号(大多数次要模式就是这种情况。

minibuffer-setup-hook在“进入迷你缓冲区后立即运行”,这意味着您将在首次输入迷你缓冲区时启用自动完成模式;第二次禁用它;第三次启用它;等等...

通常,您要么查看是否存在预定义的turn-on-autocomplete-mode类型的函数,要么定义自己的函数:

(defun my-turn-on-auto-complete-mode ()
  (auto-complete-mode 1)) ;; an argument of 1 will enable most modes
(add-hook 'minibuffer-setup-hook 'my-turn-on-auto-complete-mode)

我无法测试,因为您尚未链接到正在使用的自动完成模式。


4
投票

“自动完成模式”的创建者明确排除了用于自动完成的小型缓冲区。次要模式的定义是:

(define-global-minor-mode global-auto-complete-mode
  auto-complete-mode auto-complete-mode-maybe
  :group 'auto-complete)

所以“打开模式”功能是“也许是自动完成模式-该功能的定义是:

(defun auto-complete-mode-maybe ()
  "What buffer `auto-complete-mode' prefers."
  (if (and (not (minibufferp (current-buffer)))
           (memq major-mode ac-modes))
      (auto-complete-mode 1)))

此函数在if语句中显式测试current-buffer是否为minibuffer,如果为,则不打开auto-complete-mode。

如果要在微型缓冲区中使用自动完成模式,则可能应该联系该模式的维护者,并询问他为什么他排除了微型缓冲区,以及他认为需要进行什么编程更改才能在微型缓冲区中启用该模式。 >


0
投票

Zev引起我注意auto-complete-mode-maybe,这是必需的修改(文件auto-complete.el,所有更改都有注释):

© www.soinside.com 2019 - 2024. All rights reserved.