Emacs: использование и инициализация CEDET - PullRequest
6 голосов
/ 19 июня 2010

Я использую Emacs с CEDET и автозаполнением для завершения кода. Первоначально я настроил CEDET, чтобы он загружался при запуске Emacs каждый раз.

Однако, это заняло довольно много времени, поэтому я подумал, что будет разумно загрузить его только в случае необходимости, то есть - в моем случае - при входе в C ++ - Mode.

Итак, я переместил исходную функцию в lambda, который вызывается при входе в режим C ++:

; cscope for c(++) programming (finding symbols, etc.)
(require 'xcscope)

; C++ stuff
(add-hook 'c++-mode-hook
      (lambda ()
        (load-file "/usr/share/emacs/site-lisp/cedet-common/cedet.el")
        (global-ede-mode 1) ; enable project management system
        (semantic-load-enable-code-helpers) ; enable prototype help and smart completion
        (require 'auto-complete-config)
        (add-to-list 'ac-dictionary-directories "~/elisp/ac-dict")
        (add-to-list 'ac-sources 'ac-source-semantic)
        (local-set-key (kbd "C-:") 'semantic-ia-complete-symbol-menu) ; set shortcut for auto completion.
        (local-set-key (kbd "C-.") 'ac-complete-semantic)
        (ac-config-default)
        )
      )

Нет ошибок, но у меня есть следующая проблема: Когда Emacs впервые входит в режим C ++ - автозавершение кода не работает должным образом. Но если Emacs входит в режим C ++ во второй раз, все работает просто отлично.

Кто-нибудь знает, что я делаю не так?

1 Ответ

8 голосов
/ 20 июня 2010

Инициализация CEDET устанавливает собственные ловушки режима C и C ++.Если он устанавливает свой хук, пока он выполняет тот же хук, он не будет работать, и ваш первый буфер не будет инициализирован.

Что вы можете сделать, это загрузить CEDET при запуске, но затем инициализироватьпомощники кода в хуке режима CТаким образом, режим C ++ будет инициализироваться с помощью mode-local, но дополнительные функции будут установлены после запуска ловушки, так что это может работать.Я сам не пробовал.

Я думаю, что режим EDE не медленный, поэтому, вероятно, это нормально делать и во время инициализации.

...