2010-06-19 10 views
6

Utilizzo Emacs con CEDET e completamento automatico per il completamento del codice. Inizialmente ho installato CEDET in modo che si carichi all'avvio di Emacs ogni volta.Emacs: utilizzo e inizializzazione di CEDET

Tuttavia, questo ha richiesto molto tempo, quindi ho pensato che sarebbe stato intelligente caricarlo solo se necessario, ad esempio - nel mio caso - quando si entra in C++ - Modalità.

così ho spostato la funzione originale in un lambda che viene chiamato quando si entra in C++ - Modalità:

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

non ci sono errori, ma ho il seguente problema: Quando Emacs entra C++ - Modalità per la prima tempo, il completamento del codice non funziona correttamente. Ma se Emacs entra nella modalità C++ - la seconda volta, tutto funziona perfettamente.

Qualcuno sa cosa sto facendo male?

risposta

8

L'inizializzazione di CEDET imposta i relativi hook di modalità C e C++. Se si installa è hook mentre sta eseguendo lo stesso hook, quindi non verrà eseguito e il tuo primo buffer non verrà inizializzato.

Quello che si potrebbe fare è caricare CEDET all'avvio, ma poi avviare gli helper del codice nel hook della modalità C. In questo modo, la modalità C++ verrà inizializzata con mode-local, ma le funzioni extra verranno installate dopo l'esecuzione dell'hook, quindi potrebbe funzionare. Non l'avevo provato da solo.

Penso che la modalità EDE non sia lenta, quindi probabilmente è ok anche a farlo al momento dell'iniziativa.

+0

Grazie per la risposta. Quindi CEDET sostituisce l'aggancio in modalità C++ originale, giusto? – phimuemue