Настройка автозаполнения для работы с семантикой

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

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

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

Мой файл .emacs (основная его часть взята из статьи Алекса Отта)

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

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


person Zvord    schedule 04.11.2012    source источник


Ответы (2)


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

(defun my-cedet-hook() (добавить в список 'ac-sources' ac-source-semantic))

в:

(defun my-cedet-hook() (добавить в список 'ac-sources' ac-source-semantic-raw))

Он должен работать.

person user1197726    schedule 17.09.2013

Ваша конфигурация автозаполнения позволяет автоматически запускать завершение? Вам необходимо проверить значение следующих переменных: 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-таблицу и т. д.

person Alex Ott    schedule 04.11.2012