2010-11-01 72 views
2

有了这个.emacs文件Emacs的CEDET语义不会自动完成的scanf()和malloc相关的功能

(load-file "~/Sources/cedet-1.0pre7/common/cedet.el") 
(semantic-load-enable-excessive-code-helpers) 
;;(semantic-load-enable-semantic-debugging-helpers) 

(setq senator-minor-mode-name "SN") 
(setq semantic-imenu-auto-rebuild-directory-indexes nil) 
(global-srecode-minor-mode 1) 
(global-semantic-mru-bookmark-mode 1) 

(require 'semantic-decorate-include) 

;; gcc setup 
(require 'semantic-gcc) 

;; smart complitions 
(require 'semantic-ia) 

(setq-mode-local c-mode semanticdb-find-default-throttle 
       '(project unloaded system recursive)) 
(setq-mode-local c++-mode semanticdb-find-default-throttle 
       '(project unloaded system recursive)) 
(setq-mode-local erlang-mode semanticdb-find-default-throttle 
       '(project unloaded system recursive)) 

(require 'eassist) 

;; customisation of modes 
(defun alexott/cedet-hook() 
    (local-set-key [(control return)] 'semantic-ia-complete-symbol-menu) 
    (local-set-key "\C-c?" 'semantic-ia-complete-symbol) 
    ;; 
    (local-set-key "\C-c>" 'semantic-complete-analyze-inline) 
    (local-set-key "\C-c=" 'semantic-decoration-include-visit) 

    (local-set-key "\C-cj" 'semantic-ia-fast-jump) 
    (local-set-key "\C-cq" 'semantic-ia-show-doc) 
    (local-set-key "\C-cs" 'semantic-ia-show-summary) 
    (local-set-key "\C-cp" 'semantic-analyze-proto-impl-toggle) 
) 
;; (add-hook 'semantic-init-hooks 'alexott/cedet-hook) 
(add-hook 'c-mode-common-hook 'alexott/cedet-hook) 
(add-hook 'lisp-mode-hook 'alexott/cedet-hook) 
(add-hook 'scheme-mode-hook 'alexott/cedet-hook) 
(add-hook 'emacs-lisp-mode-hook 'alexott/cedet-hook) 
(add-hook 'erlang-mode-hook 'alexott/cedet-hook) 

(defun alexott/c-mode-cedet-hook() 
;; (local-set-key "." 'semantic-complete-self-insert) 
;; (local-set-key ">" 'semantic-complete-self-insert) 
    (local-set-key "\C-ct" 'eassist-switch-h-cpp) 
    (local-set-key "\C-xt" 'eassist-switch-h-cpp) 
    (local-set-key "\C-ce" 'eassist-list-methods) 
    (local-set-key "\C-c\C-r" 'semantic-symref) 
) 
(add-hook 'c-mode-common-hook 'alexott/c-mode-cedet-hook) 

;; hooks, specific for semantic 
(defun alexott/semantic-hook() 
;; (semantic-tag-folding-mode 1) 
    (imenu-add-to-menubar "TAGS") 
) 
(add-hook 'semantic-init-hooks 'alexott/semantic-hook) 

(custom-set-variables 
'(semantic-idle-scheduler-idle-time 3) 
'(semantic-self-insert-show-completion-function (lambda nil (semantic-ia-complete-symbol-menu (point)))) 
'(global-semantic-tag-folding-mode t nil (semantic-util-modes))) 
;(global-semantic-folding-mode) 

;; gnu global support 
(require 'semanticdb-global) 
(semanticdb-enable-gnu-global-databases 'c-mode) 
(semanticdb-enable-gnu-global-databases 'c++-mode) 

;; ctags 
(require 'semanticdb-ectag) 
(semantic-load-enable-primary-exuberent-ctags-support) 
(global-semantic-idle-tag-highlight-mode 1) 

;;; ede customization 
(require 'semantic-lex-spp) 
(global-ede-mode t) 


;; my functions for EDE 
(defun alexott/ede-get-local-var (fname var) 
    "fetch given variable var from :local-variables of project of file fname" 
    (let* ((current-dir (file-name-directory fname)) 
     (prj (ede-current-project current-dir))) 
    (when prj 
     (let* ((ov (oref prj local-variables)) 
      (lst (assoc var ov))) 
     (when lst 
      (cdr lst)))))) 

;; setup compile package 
;; TODO: allow to specify function as compile-command 
(require 'compile) 
(setq compilation-disable-input nil) 
(setq compilation-scroll-output t) 
(setq mode-compile-always-save-buffer-p t) 

(defun alexott/compile() 
    "Saves all unsaved buffers, and runs 'compile'." 
    (interactive) 
    (save-some-buffers t) 
    (let* ((r (alexott/ede-get-local-var 
      (or (buffer-file-name (current-buffer)) default-directory) 
      'compile-command)) 
     (cmd (if (functionp r) (funcall r) r))) 
;; (message "AA: %s" cmd) 
    (set (make-local-variable 'compile-command) (or cmd compile-command)) 
    (compile compile-command))) 

(global-set-key [f9] 'alexott/compile) 

;; 
(defun alexott/gen-std-compile-string() 
    "Generates compile string for compiling CMake project in debug mode" 
    (let* ((current-dir (file-name-directory 
         (or (buffer-file-name (current-buffer)) default-directory))) 
     (prj (ede-current-project current-dir)) 
     (root-dir (ede-project-root-directory prj)) 
     ) 
    (concat "cd " root-dir "; make -j2"))) 

;; 
(defun alexott/gen-cmake-debug-compile-string() 
    "Generates compile string for compiling CMake project in debug mode" 
    (let* ((current-dir (file-name-directory 
         (or (buffer-file-name (current-buffer)) default-directory))) 
     (prj (ede-current-project current-dir)) 
     (root-dir (ede-project-root-directory prj)) 
     (subdir "") 
     ) 
    (when (string-match root-dir current-dir) 
     (setf subdir (substring current-dir (match-end 0)))) 
    (concat "cd " root-dir "Debug/" "; make -j2"))) 
;; (concat "cd " root-dir "Debug/" subdir "; make -j3"))) 

;; Example, Qt customization 
;; (setq qt4-base-dir "/usr/include/qt4") 
;; (setq qt4-gui-dir (concat qt4-base-dir "/QtGui")) 
;; (semantic-add-system-include qt4-base-dir 'c++-mode) 
;; (semantic-add-system-include qt4-gui-dir 'c++-mode) 
;; (add-to-list 'auto-mode-alist (cons qt4-base-dir 'c++-mode)) 
;; (add-to-list 'semantic-lex-c-preprocessor-symbol-file (concat qt4-base-dir "/Qt/qconfig.h")) 
;; (add-to-list 'semantic-lex-c-preprocessor-symbol-file (concat qt4-base-dir "/Qt/qconfig-large.h")) 
;; (add-to-list 'semantic-lex-c-preprocessor-symbol-file (concat qt4-base-dir "/Qt/qglobal.h")) 

;;; emacs-rc-cedet.el ends here 
(delete-selection-mode t) 

最至极的是从亚历克斯的的.emacs采取

printf的是自动完成的很好。 任何想法?

回答

2

的第一件事情,当完成失败尝试是:

M-x semantic-analyze-debug-assist RET 

来看看它说。然后,您可以访问stdio.h以查看解析器对该文件的看法。如果在那里你做:

M-x bovinate RET 

然后,你可以搜索,看看是否有scanf。如果没有,可能会出现解析错误,或者某些其他#define设置不正确。通过使用上述内容,您通常可以缩小头文件以查看事件开始分解的位置。

根据您的描述,我假设你在类似类型:

sc 

,并希望它会扩展到scanf

+0

嗨,埃里克,我试图使用*** Semantic-complete-self-insert ***绑定一个点,但它甚至找不到在同一个文件中定义的函数。在运行Semantic-analyze-debug-assist之后,我得到了这个错误,为什么?非常感谢 – 2012-05-22 12:58:55

+0

定期完成非常复杂,并尝试了几件事情。这些命令将捕获错误并无声无息地移动,这对于空闲期间的完成特别有用。 debug-assist命令暴露更多错误,以便更容易调试正在发生的事情。你将不得不发布你的错误,以获得更多的帮助。 – Eric 2012-05-24 22:59:52