2010-06-19 18 views
6

Używam Emacsa z CEDETEM i autouzupełnianie do uzupełniania kodu. Pierwotnie ustawiłem CEDET tak, aby ładował się przy uruchamianiu Emacsa za każdym razem.Emacs: Używanie i inicjowanie CEDETA

Jednakże zajęło to dużo czasu, więc pomyślałem, że byłoby sprytnie załadować go w razie potrzeby, tj. - w moim przypadku - przy wejściu w tryb C++.

Więc przeniosłem pierwotną funkcję do lambda że nazywa się przy wejściu C++ - tryb:

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

Nie ma żadnych błędów, ale mam następujący problem: Gdy Emacs przejdzie C++ - tryb dla pierwszego czas, wykonanie kodu nie działa poprawnie. Ale jeśli Emacs po raz drugi wejdzie w tryb C++, wszystko działa dobrze.

Czy ktoś wie, co robię źle?

Odpowiedz

8

Inicjalizacja CEDET ustawia własne haki trybu C i C++. Jeśli instaluje to hak podczas działania tego samego haka, to nie uruchomi się, a twój pierwszy bufor nie zostanie zainicjalizowany.

Co można zrobić, to wczytać CEDET podczas uruchamiania, a następnie zainicjować pomocników kodu w hakowaniu trybu C. W ten sposób tryb C++ zostanie zainicjowany w trybie mode-local, ale dodatkowe funkcje zostaną zainstalowane po uruchomieniu haka, więc może działać. Sam tego nie próbowałem.

Wydaje mi się, że tryb EDE nie jest powolny, więc prawdopodobnie jest w porządku, aby zrobić to również w czasie init.

+0

Dziękuję za odpowiedź. CEDET zastępuje oryginalny hak w trybie C++, prawda? – phimuemue