2010-06-19 4 views
6

Ich verwende Emacs mit CEDET und Auto-Vervollständigen für die Code-Vervollständigung. Ursprünglich habe ich CEDET aufgebaut, damit es bei Emacs jedes Mal hochfährt.Emacs: Verwenden und Initialisieren von CEDET

Das dauerte allerdings ziemlich lange, daher dachte ich, es wäre schlau, es nur bei Bedarf zu laden, d. H. In meinem Fall in den C++ - Modus.

Also zog ich die ursprüngliche Funktion in eine lambda, dass bei der Eingabe von C++ genannt wird - Modus:

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

Es gibt keine Fehler, aber ich habe folgendes Problem: Wenn Emacs C tritt ++ - Modus für die erste Zeit, Code-Vervollständigung funktioniert nicht richtig. Aber wenn Emacs zum zweiten Mal in den C++ - Modus wechselt, funktioniert alles gut.

Weiß jemand, was ich falsch mache?

Antwort

8

Die CEDET-Initialisierung richtet C- und C++ - Modus-Hooks ein. Wenn es seinen Hook installiert, während es denselben Hook ausführt, wird es nicht ausgeführt und der erste Puffer wird nicht initialisiert.

Sie können CEDET beim Start laden, aber dann die Code-Helfer im C-Modus-Hook initiieren. Auf diese Weise wird der C++ - Modus mit mode-local initialisiert, aber die zusätzlichen Funktionen werden nach dem Ausführen des Hooks installiert, so dass das funktioniert. Ich hatte es selbst nicht versucht.

Ich denke, der EDE-Modus ist nicht langsam, also ist es wahrscheinlich in Ordnung, dies auch bei der Initialisierung zu tun.

+0

Vielen Dank für die Antwort. Also ersetzt CEDET den ursprünglichen C++ - Mode-Hook, oder? – phimuemue