Отключить фирменный режим в минибуфере - PullRequest
1 голос
/ 14 марта 2011

Я создал компанию для глобальной загрузки, например:

(let ((company-path "path/to/company"))
  (add-to-list 'load-path company-path)
  (autoload 'company-mode "company" nil t)
  (global-company-mode t))

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

Спасибо.

Обновление:

Несколько уточнений.

Прежде всего, что заставляет меня думать, что company-mode загружается каждый раз, когда я переключаюсь на минибуфер? Что ж, каждый раз, когда я набираю C-x из M-x, минибуфер показывает «Pymacs загружает веревку ...» и зависает на долю секунды. Такое поведение можно наблюдать только при включенном global-company-mode, поэтому я обвинил его в company.

Однако зачем обвинять company, если там написано pymacs, верно? Поэтому я продолжил и отключил загрузку pymacs, которая выглядела так в моем файле .emacs (взятом из инструкции по установке):

(defun load-pymacs ()
  "Self-explanatory."
  (add-to-list 'load-path (make-plugin-path "Pymacs"))
  (autoload 'pymacs-apply "pymacs")
  (autoload 'pymacs-call "pymacs")
  (autoload 'pymacs-eval "pymacs" nil t)
  (autoload 'pymacs-exec "pymacs" nil t)
  (autoload 'pymacs-load "pymacs" nil t))
; make-plugin-path is a function defined somewhere else in my .emacs file.

(load-pymacs)

После комментирования последней строки и перезапуска Emacs сообщение «Pymacs loading ropemacs ...» пропало даже при включенном company-mode глобально. Однако мне все равно пришлось вручную набрать (company-mode), прежде чем (global-company-mode t) сработает.

После этого небольшого расследования я бы хотел немного перефразировать исходный вопрос. Я не знаком с понятиями require и autoload в Emacs, поэтому прошу совета здесь:

Что именно мне нужно поместить в мой файл .emacs, чтобы company автоматически включался в каждом файловом буфере (а не в минибуфере) и включал Pymacs вместе с ним?

Спасибо.

1 Ответ

4 голосов
/ 14 марта 2011

У вас последняя версия? Мне было любопытно, поэтому я попробовал это, установив пакет ELPA (в списке как версия 0.5), и включил global-company-mode, и он не активируется в минибуфере для меня. Пакет ELPA также заботится об автозагрузке.

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

FWIW, ваш код выглядит немного странно для меня. Переменная let используется только в следующей строке, поэтому она на самом деле не нужна, и, если я не знаю о каком-либо автоматическом поведении, эта автозагрузка должна быть избыточной, если вы можете успешно вызвать global-company-mode без аналогичного объявления. - предположительно, либо собственные комментарии автозагрузки библиотеки были обработаны, либо библиотека уже загружена?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...