Режим автозаполнения не включается автоматически в буферах ObjC - PullRequest
0 голосов
/ 14 марта 2011

Я загружаю режим автозаполнения следующим образом:

(let ((ac-path "path/to/auto-complete"))
  (add-to-list 'load-path ac-path)
  (require 'auto-complete-config)
  (add-to-list 'ac-dictionary-directories (concat ac-path "ac-dict"))
  (ac-config-default))

Он отлично работает в режиме C Major, но не включается автоматически при открытии файлов ObjC.Я все еще могу включить его вручную, и он будет нормально работать вместе с основным режимом ObjC.

Вот фрагмент из документов, касающихся основного режима ObjC:

The hook `c-mode-common-hook' is run with no args
at mode initialization, then `objc-mode-hook'.

Если я правильно понимаю,auto-complete добавляет хук к c-mode-common-hook, но objc-mode-hook как-то переопределяет его.Есть ли способ исправить это?

Спасибо.

Ответы [ 3 ]

4 голосов
/ 04 апреля 2011

Просматривая исходный код auto-complete.el, я наткнулся на это определение

(defcustom ac-modes
  '(emacs-lisp-mode
    lisp-interaction-mode
    c-mode cc-mode c++-mode
    java-mode clojure-mode scala-mode
    scheme-mode
    ocaml-mode tuareg-mode
    perl-mode cperl-mode python-mode ruby-mode
    ecmascript-mode javascript-mode js-mode js2-mode php-mode css-mode
    makefile-mode sh-mode fortran-mode f90-mode ada-mode
    xml-mode sgml-mode)
  "Major modes `auto-complete-mode' can run on."
  :type '(repeat symbol)
  :group 'auto-complete)

Оказывается, что auto-complete не имеет истинного глобального режима. Он включается только в тех основных режимах, которые включены в переменную ac-modes.

Итак, добавление следующей строки в файл .emacs решило проблему для меня.

; add this line after the auto-complete mode has been loaded
(add-to-list 'ac-modes 'objc-mode)
1 голос
/ 14 марта 2011

Используйте следующее:

(defun my-objc-mode-hook ()
   (auto-complete-mode 1))
(add-hook 'objc-mode-hook 'my-objc-mode-hook)

Примечание 1: Функция auto-complete-mode является функцией переключения, когда вызывается без аргументов.

Примечание 2: Можно добавить анонимныйиспользовать lambda, но у этого есть несколько недостатков.Наиболее важными из них являются: изменение функции и переоценка выражения добавят модифицированную функцию в дополнение к более ранней версии, а C-h v xxx выведет полностью неформатированную лямбда-функцию, которую обычно безнадежно читать и понимать.

0 голосов
/ 14 марта 2011
(add-hook 'objc-mode-hook 'auto-complete-mode)

Это следует сделать, если вы используете режим автозаполнения.Вы можете добавить более сложные вещи в ловушки режима, выполнив:

(add-hook 'objc-mode-hook '(lambda ()
                              (something-with arguments)))

Обратите внимание, что оба аргумента для add-hook заключены в кавычки, это необходимо, и если вы добавите функции без кавычек, они, вероятно, не будут работать.

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