Как загрузить cedet, semantic et.только когда открыты .cxx, .h .cpp файлы - PullRequest
1 голос
/ 16 ноября 2011

Поскольку в настоящее время я использую Emacs для многих вещей, я хотел бы загружать cedet.el только тогда, когда открываю исходный код или заголовок c / C ++, а не каждый раз, когда запускается emacs, поскольку это требует значительных затрат времени запуска.

Прямо сейчас начало моего файла инициализации выглядит так:

  (load-file "~/.emacs.d/plugins/cedet/common/cedet.el")

(semantic-load-enable-excessive-code-helpers)
;;(semantic-load-enable-semantic-debugging-helpers)

(setq senator-minor-mode-name "SN")
(setq semantic-imenu-auto-rebuild-directory-indexes nil)
(global-srecode-minor-mode 1)
(global-semantic-mru-bookmark-mode 1)

И это продолжается. Есть ли способ сделать это?

Ответы [ 2 ]

3 голосов
/ 17 ноября 2011

мой запуск emacs значительно улучшился после того, как я научился использовать eval-after-load и autoload.

если у вас есть режим, который вы хотите загрузить только при открытии файла такого типа, добавьте что-то подобное в ваш .emacs (при условии, что foo-mode определен в foo-mode.el на вашем пути загрузки):

(autoload 'foo-mode "foo-mode" nil t)
(add-to-list 'auto-mode-alist '("\\.foo\\'" . foo-mode))

если у вас есть несколько вспомогательных библиотек, которые вы хотите загрузить только после загрузки «основной» библиотеки, добавьте что-то подобное в ваш .emacs (при условии, что bar-mode является вторичным режимом, который расширяет режим foo):

(eval-after-load "foo-mode"
  '(progn
    (require 'bar-mode)
    ;; ... do other bar-mode setup here ...
    ))

так что, в вашем случае, вы, вероятно, захотите настроить cedet, используя eval-after-load c++-mode.

0 голосов
/ 16 ноября 2011

Вы можете сделать это следующим образом:

(add-hook 'c-mode-common-hook (lambda ()
  (load-file "~/.emacs.d/plugins/cedet/common/cedet.el")
  ;; any code dependent on having this file loaded
))

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

Редактировать: Такой флаг может выглядеть так:

...