因为我现在使用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)
它继续前进。 有没有办法做到这一点?
答案 0 :(得分:3)
eval-after-load
和autoload
后,我的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
))