2011-09-22 313 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