2010-06-19 19 views
6

J'utilise Emacs avec CEDET et auto complete pour la complétion de code. A l'origine j'ai mis en place CEDET donc ça se charge au démarrage d'Emacs à chaque fois. Cependant, cela a pris beaucoup de temps, donc j'ai pensé qu'il serait intelligent de le charger juste si nécessaire, c'est-à-dire - dans mon cas - en entrant en mode C++.Emacs: Utilisation et initialisation de CEDET

Je déplacé la fonction d'origine dans un lambda qui est appelé lors de l'entrée C++ - Mode:

; 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) 
     ) 
    ) 

Il n'y a pas d'erreur, mais j'ai le problème suivant: Lorsqu'Emacs entre C++ - Mode pour la première temps, l'achèvement du code ne fonctionne pas correctement. Mais si Emacs entre en mode C++ la seconde fois, tout fonctionne correctement.

Est-ce que quelqu'un sait ce que je fais mal?

Répondre

8

L'initialisation CEDET met en place ses propres crochets en mode C et C++. S'il installe son hook alors qu'il exécute le même hook, alors il ne s'exécutera pas, et votre premier buffer n'aura pas été initialisé. Ce que vous pouvez faire est de charger CEDET au démarrage, mais init init les aides de code dans le crochet de mode C

De cette façon, le mode C++ s'initialisera avec mode-local, mais les fonctions supplémentaires seront installées après l'exécution du hook, ce qui peut fonctionner. Je ne l'avais pas essayé moi-même.

Je pense que le mode EDE n'est pas lent, donc il est probablement correct de le faire au moment de l'initialisation.

+0

Merci pour la réponse. Donc CEDET remplace le C++ - mode-hook original, non? – phimuemue