如何加载cedet,语义等。仅当.cxx,.h .cpp文件打开时

时间:2011-11-15 22:16:04

标签: c++ emacs elisp cedet

因为我现在使用Emacs做很多事情,所以我只想在打开c / C ++源代码或标题时加载cedet.el,而不是每次启动emacs都会因为启动时间显着增加而加载。

现在我的init文件的开头是这样的:

  (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 个答案:

答案 0 :(得分:3)

在我学会使用eval-after-loadautoload后,我的emacs启动得到了显着改善。

如果你有一个只想在打开类型文件时加载的模式,可以在你的.emacs中添加这样的东西(假设foo-mode在你的加载路径上的foo-mode.el中定义):

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

如果您在加载“主”库后只需要加载一些帮助库,请在.emacs中添加这样的内容(假设条模式是增强foo模式的辅助模式):

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

因此,在您的情况下,您可能希望使用eval-after-load c++-mode设置cedet。

答案 1 :(得分:0)

你可以这样做:

(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中定义的内容,或维护加载的标志)自己)。

编辑:这样的标志可能如下所示:

(setq need-to-load-cedet-p t)
(add-hook 'c-mode-common-hook (lambda ()
  (if need-to-load-cedet-p
    (progn (load-file "~/.emacs.d/plugins/cedet/common/cedet.el")
           (setq need-to-load-cedet-p nil))
    ;; code that should only be executed once after cedet is loaded goes here
  )
  ;; code that should be executed every time a new buffer is opened goes here
))