2012-11-04 4 views
2

У меня проблема с автозаполнением пакета в Emacs. В настоящее время у меня есть и работает cedet с правильной автозаполнением, но у автозаполнения есть странное поведение. Он не использует базу данных семантики (сенатора?), Пока я явно не включу файл include и не сделаю «C-u M-x bovinate». Затем я могу вернуться к исходному файлу, и список завершения автозаполнения будет выглядеть точно так же, как и семантический.Настройка автозаполнения для работы с семантикой

Другое дело, если я отредактирую исходный файл, например, в режиме C++, и попробуйте «bovinate» заголовок в c-режиме, автозаполнение не получит никаких дополнительных точек в его списке завершения.

Любые идеи, как автоматически автоматизировать работу?

Мой .emacs файл (основные части были взяты из Alex Ott's article)

(load "~/.emacs.d/cedet/cedet-devel-load.el") 
(add-to-list 'semantic-default-submodes 'global-semanticdb-minor-mode) 
(add-to-list 'semantic-default-submodes 'global-cedet-m3-minor-mode) 
(add-to-list 'semantic-default-submodes 'global-semantic-mru-bookmark-mode) 
(add-to-list 'semantic-default-submodes 'global-semantic-idle-local-symbol-highlight-mode) 
(add-to-list 'semantic-default-submodes 'global-semantic-idle-scheduler-mode) 
(add-to-list 'semantic-default-submodes 'global-semantic-idle-completions-mode) 
(add-to-list 'semantic-default-submodes 'global-semantic-idle-summary-mode) 
(add-to-list 'semantic-default-submodes 'global-semantic-decoration-mode) 

(require 'semantic/ia) 
(semantic-mode 1) 

(require 'semantic/bovine/gcc) 

(semantic-add-system-include "/usr/include/mpi/" 'c++-mode) 

;; ;; Imenu integration 
(defun my-semantic-hook() 
    (imenu-add-to-menubar "TAGS")) 
(add-hook 'semantic-init-hooks 'my-semantic-hook) 

;; Class suggest improvement 
(defun my-c-mode-cedet-hook() 
(local-set-key "." 'semantic-complete-self-insert) 
(local-set-key ">" 'semantic-complete-self-insert)) 
(add-hook 'c-mode-common-hook 'my-c-mode-cedet-hook) 

;;;; Semantic and auto-config integration 
(require 'auto-complete-config) 
(ac-config-default) 
(add-to-list 'ac-dictionary-directories "/home/zvord/.emacs.d/ac-dict") 
(define-key ac-mode-map [(meta return)] 'auto-complete) 

(defun my-cedet-hook() 
    (add-to-list 'ac-sources 'ac-source-semantic)) 
(add-hook 'c-mode-common-hook 'my-cedet-hook) 

Из всего, что я прочитал это должно быть достаточно, чтобы получить автозаполнения работу, но это не так.

ответ

0

Попробуйте изменить:

(Defun мой-Cedet-крючок() (добавить к списку ' AC-источников 'ас-исток-семантический))

в:

(Defun мой-Cedet-крюк() (добавить к списку' AC-источники «ас-источника- семантический-сырой))

Должно работать.

2

Поддерживает ли ваша автоматическая конфигурация автозапуск завершения? Вам нужно проверить значение следующих переменных: ac-auto-show-menu - сколько времени ждать до шоу-меню с возможными пополнениями (по умолчанию 0,5 с) и ac-auto-start - когда начать выполнение (сколько символов вам нужно ввести - исходное значение равно 2).

Полная конфигурация для автозаполнения может выглядеть следующим образом (в дополнении к вашей установке в my-cedet-hook):

(require 'auto-complete-config) 
(ac-config-default) 
;; start after 3 characters were typed 
(setq ac-auto-start 3) 
;; show menu immediately... 
(setq ac-auto-show-menu t) 
;; explicit call to auto-complete 
(define-key ac-mode-map [(meta return)] 'auto-complete) 

Я использую аналогичные конфигурации, и она отлично работает для меня, показывая доработки для семантических данных. На каком языке вы пытаетесь использовать завершение имени? Например, для C++, было бы необходимо добавить записи SPP-таблицы и т.д.