настройка семантики с помощью cscope

Я начинаю немного экспериментировать с использованием emacs в качестве среды разработки, и у меня возникают небольшие проблемы. Я хочу использовать cscope с семантикой для довольно надежного способа поиска в моей базе кода. Однако после установки cscope (с apt-get install cscope) и перемещения xscope.el в мой ~/.emacs.d/ у меня по-прежнему возникают проблемы с вызовом некоторых настроек с помощью моего файла .emacs. Когда я пытаюсь вызвать (semanticdb-enable-cscope-databases), я получаю сообщение об ошибке, что определение функции символа недействительно. Я использую емакс 24.3

(semantic-mode 1)

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

;; Semantic
(global-semantic-idle-completions-mode t)
(global-semantic-decoration-mode t)
(global-semantic-highlight-func-mode t)
(global-semantic-show-unmatched-syntax-mode t)

;; auto-complete stuff
(add-to-list 'load-path "~/.emacs.d")
(require 'auto-complete-config)
(ac-config-default)

(add-hook 'c-mode-common-hook '(lambda ()

      ;; ac-omni-completion-sources is made buffer local so
      ;; you need to add it to a mode hook to activate on
      ;; whatever buffer you want to use it with.  This
      ;; example uses C mode (as you probably surmised).

      ;; auto-complete.el expects ac-omni-completion-sources to be
      ;; a list of cons cells where each cell's car is a regex
      ;; that describes the syntactical bits you want AutoComplete
      ;; to be aware of. The cdr of each cell is the source that will
      ;; supply the completion data.  The following tells autocomplete
      ;; to begin completion when you type in a . or a ->

      (add-to-list 'ac-omni-completion-sources
                   (cons "\\." '(ac-source-semantic)))
      (add-to-list 'ac-omni-completion-sources
                   (cons "->" '(ac-source-semantic)))

      ;; ac-sources was also made buffer local in new versions of
      ;; autocomplete.  In my case, I want AutoComplete to use
      ;; semantic and yasnippet (order matters, if reversed snippets
      ;; will appear before semantic tag completions).

          (setq ac-sources '(ac-source-semantic ac-source-yasnippet))
  ))

(require 'xcscope)
(semanticdb-enable-cscope-databases)  ;;This is causing problems

;;C mode
(require 'cc-mode)

;;Color theme
(require 'color-theme)
(setq color-theme-is-global t)
(add-to-list 'load-path "/home/bob/.emacs.d/theme/ample-theme/ample-theme.el")
;;(require 'ample-theme)
(eval-after-load "color-theme"
  '(progn
     (color-theme-initialize)
     (color-theme-jsc-dark)))

;;set font
(set-face-attribute 'default nil :family "Anonymous Pro" :height 140)

;;line numbers
(global-linum-mode 1)
(custom-set-variables '(linum-format (quote "%4d \u2502 ")))

;;treat .h files at C++
(add-to-list 'auto-mode-alist '("\\.h\\'" . c++-mode))

;; use F5 as compile
(global-set-key [(f5)] 'compile)

;; make compilation window smaller
(setq compilation-window-height 8)

person foboi1122    schedule 24.12.2013    source источник
comment
semantic--tag-deep-copy-value доступен только при загрузке semantic/scope.el. Поместите функцию в соответствующие режимы-хуки или в eval-after-load. Я не думаю, что помещать .emacs.d в load-path — хорошая идея. Этот каталог предназначен для конфигурации. Файлы своей личной библиотеки я помещал скорее в ~/share/emacs.   -  person Tobias    schedule 24.12.2013
comment
@Тобиас, спасибо! так что это будет означать, что мне нужно позвонить (требовать «семантика/область») правильно? Я перенесу свои пакеты emacs.   -  person foboi1122    schedule 25.12.2013
comment
@Tobias, я добавил (require 'semantic/scope) в начало моего dotfile, и он все еще не может обнаружить базу данных semanticdb-enable-cscope   -  person foboi1122    schedule 25.12.2013
comment
Извиняюсь. Как-то я неправильно понял поисковое выражение. (См. мой первый комментарий.) Похоже, semanticdb-enable-cscope-databases из CEDET 1.X, а вы используете CEDET 2. Может быть, эта функция устарела? Является ли cscope-database просто инструментом в semantic-symref-tool-alist?   -  person Tobias    schedule 25.12.2013


Ответы (1)


Теперь я действительно начинаю писать ответ, чтобы со временем уточнить его. Вот как далеко я продвинулся до сих пор:

Существует несколько версий cedet.

Emacs 24.3 включает cedet-2.0. Но, что касается приведенной ниже базарной версии, то она кажется несколько устаревшей. Я считаю, что в этой версии cscope поддерживается как один из инструментов в semantic-symref-tool-alist. Переменная semantic-symref-tool-alist описана в информационном руководстве. Туда можно попасть нажатием клавиши C-h i g (semantic-user) Configuring SymRef.

Можно увидеть значение по умолчанию semantic-symref-tool-alist после загрузки semantic/symref. Одним из его членов является:

 ((lambda
    (rootdir)
    (file-exists-p
     (expand-file-name "cscope.out" rootdir)))
  . cscope)

Я думаю, что это именно поддержка cscope во встроенной версии cedet-2.0 и никакого дополнительного включения cscope не требуется (?).


Официальная версия — cedet-1.1 от https://sourceforge.net/projects/cedet/files/cedet/cedet-1.1.tar.gz/download.

В этой версии функция semanticdb-enable-cscope-databases определена в файле semantic/semanticdb-cscope.el


Базарная версия cedet — cedet-2.0. Он доступен на базаре по адресу:

bzr checkout bzr://cedet.bzr.sourceforge.net/bzrroot/cedet/code/trunk cedet

В этой версии функция semanticdb-enable-cscope-databases определена в cedet/semantic/db-cscope.el.

Этот файл отсутствует в версии cedet, поставляемой с emacs 24.3.


: Это заставляет меня поверить, что если вы хотите использовать свою установку, вам следует использовать базарную версию cedet-2.0.

person Tobias    schedule 25.12.2013
comment
Большое спасибо! Мне удалось заставить его работать со встроенным semantic/symref. Ваше предположение о встроенной поддержке cscope было правильным. - person foboi1122; 26.12.2013