2011-09-22 258 views
4

启用自动完成,我试图把auto-complete在迷你缓冲区:在Emacs小缓冲区

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

我得到的是auto-complete在小缓冲区的一审工作,但不再。这是加载后全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上持续?

回答

0

泽夫叫我注意auto-complete-mode-maybe,这是必要的修改(文件auto-complete.el,所有更改评论):

;; Add this variable 
(defcustom ac-in-minibuffer t 
    "Non-nil means expand in minibuffer." 
    :type 'boolean 
    :group 'auto-complete) 

... 

(defun ac-handle-post-command() 
    (condition-case var 
     (when (and ac-triggered 
       (not (ido-active)) ;; Disable auto pop-up in ido mode 
       (or ac-auto-start 
        ac-completing) 
       (not isearch-mode)) 
     (setq ac-last-point (point)) 
     (ac-start :requires (unless ac-completing ac-auto-start)) 
     (ac-inline-update)) 
    (error (ac-error var)))) 

... 

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

而且.emacs

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

当然,也有结合冲突但可以解决它们。

7

如果该函数充当切换键(对于大多数次要模式都是这种情况),您很少想要将函数符号添加到钩子变量中。

minibuffer-setup-hook在“进入minibuffer之后”运行,这意味着您将在第一次进入minibuffer时启用自动完成模式;第二次禁用它;第三次启用它;等等......

通常你要么看看是否有一个预先定义的turn-on-autocomplete-mode类型的功能,或者定义自己:

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

我无法测试,因为你还没有链接到您正在使用的自动填充模式。

+0

不好意思告诉它,但我使用的是cx4a.org/software/auto-complete/。我检查了切换功能:它不适用于奇数,即它在第一次实例后被禁用。 –

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语句中显式测试当前缓冲区是否是微型缓冲区,如果是,则不打开自动完成模式。

如果你想在minibuffer中使用自动完成模式,你应该联系模式的维护者,问他为什么要排除minibuffer,他认为在minibuffer中启用模式需要什么样的编程修改。

+0

谢谢,zev!我写了解决方案,现在等待5小时后发布(信誉限制)。 –

+0

@anton:我不认为有投票的时间限制对您有用 - 如果这是一个有用的答案,请点击它! – Tyler