簡體   English   中英

在Emacs迷你緩沖區中啟用自動完成功能

[英]Enable auto-complete in Emacs minibuffer

我正試圖在迷你緩沖區中自動完成

(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

如果該函數充當切換(對於大多數次要模式將是這種情況),您很少想要將函數符號添加到鈎子變量。

minibuffer-setup-hook在“進入迷你緩沖區后”運行,這意味着您第一次進入迷你緩沖區時將啟用自動完成模式; 第二次禁用它; 第三次啟用它; 等等...

通常,您要么查看是否存在預定義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)

我無法測試,因為您沒有鏈接到您正在使用的自動完成模式。

“自動完成模式”的創建者明確排除了用於自動完成的迷你緩沖區。 次要模式的定義是:

(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語句中顯式測試,如果是,則不打開自動完成模式。

如果你想在迷你緩沖區中使用自動完成模式,你可能應該聯系該模式的維護者並詢問他為什么要排除迷你緩沖區以及他認為在迷你緩沖區中啟用模式所需的編程更改。

Zev打電話給我注意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)

當然,存在約束性沖突,但有可能解決它們。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM