Включить автозаполнение в минибуфере Emacs - PullRequest
4 голосов
/ 22 сентября 2011

Я пытаюсь включить автозаполнение в минибуфере:

(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?

Ответы [ 3 ]

7 голосов
/ 22 сентября 2011

Вы редко когда-либо хотите добавить символ функции в переменную ловушки, если эта функция действует как переключатель (что будет иметь место в большинстве второстепенных режимов).

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)

Я не могу проверить этопотому что вы не связались с используемым вами режимом автозаполнения.

4 голосов
/ 22 сентября 2011

Создатель «auto-complete-mode» явно исключает минибуфер для использования с автозаполнением.Определение для второстепенного режима:

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

, поэтому функция включения режима «auto-complete-mode-возможно» - определение этой функции:

(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, является ли текущий буфер минибуфером, и не включает режим автозаполнения, если он есть.

Если вы хотите использовать режим автозаполнения в минибуфере, вам, вероятно, следует связаться с сопровождающим режима и спросить его, почему он исключил минибуфер и какие изменения в программе, по его мнению, необходимы для включения режима вминибуфер.

0 голосов
/ 23 сентября 2011

Зев обратил на мое внимание 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)

Конечно, существуют конфликты, но их можно разрешить.

...