2010-06-19 113 views
6

我使用Emacs和CEDET并自动完成代码完成。最初我设置了CEDET,因此每次启动时都会加载Emacs。Emacs:使用和初始化CEDET

但是,这花了相当长的时间,所以我认为只要需要就可以加载它,例如 - 在我的情况下 - 在进入C++模式时。

所以我提出的原函数为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++模式,那么一切正常。

有人知道我在做什么错吗?

回答

8

CEDET初始化设置它自己的C和C++模式钩子。如果它在运行相同钩子时安装它的钩子,那么它将不会运行,并且您的第一个缓冲区将不会被初始化。

你可以做的是在启动时加载CEDET,然后在C模式钩子中初始化代码助手。这样C++模式将使用本地模式初始化,但额外的函数将在钩子运行后安装,以便可以工作。我没有自己尝试过。

我认为EDE模式并不慢,因此在初始阶段也可以这样做。

+0

谢谢你的回答。所以CEDET取代了原来的C++ - mode-hook,对吧? – phimuemue 2010-06-21 06:09:30