(require 'cedet) (global-ede-mode t) ;;;; Helper tools. (custom-set-variables '(semantic-default-submodes (quote ( global-semantic-decoration-mode global-semantic-idle-completions-mode global-semantic-idle-scheduler-mode global-semanticdb-minor-mode global-semantic-idle-summary-mode global-semantic-mru-bookmark-mode))) '(semantic-idle-scheduler-idle-time 3)) (semantic-mode) ;; 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)) ;;;; Include settings (require 'semantic/bovine/gcc) (require 'semantic/bovine/c) (defconst cedet-user-include-dirs (list ".." "../include" "../inc" "../common" "../public" "." "../.." "../../include" "../../inc" "../../common" "../../public")) (setq cedet-sys-include-dirs (list "/usr/include" "/usr/include/bits" "/usr/include/glib-2.0" "/usr/include/gnu" "/usr/include/gtk-2.0" "/usr/include/gtk-2.0/gdk-pixbuf" "/usr/include/gtk-2.0/gtk" "/usr/local/include" "/usr/local/include")) (let ((include-dirs cedet-user-include-dirs)) (setq include-dirs (append include-dirs cedet-sys-include-dirs)) (mapc (lambda (dir) (semantic-add-system-include dir 'c++-mode) (semantic-add-system-include dir 'c-mode)) include-dirs)) (setq semantic-c-dependency-system-include-path "/usr/include/") ;;;; TAGS Menu (defun my-semantic-hook () (imenu-add-to-menubar "TAGS")) (add-hook 'semantic-init-hooks 'my-semantic-hook) ;;;; Semantic DataBase存储位置 (setq semanticdb-default-save-directory (expand-file-name "~/.emacs.d/semanticdb")) ;; 使用 gnu global 的TAGS。 (require 'semantic/db-global) (semanticdb-enable-gnu-global-databases 'c-mode) (semanticdb-enable-gnu-global-databases 'c++-mode) (ede-cpp-root-project "maze" :name "maze project" :file "~/Workspace/c++/maze/main.cpp" :include-path '("/" "/include" ) :system-include-path '("/usr/include")) ;;;; 缩进或者补齐 ;;; hippie-try-expand settings (setq hippie-expand-try-functions-list '( yas/hippie-try-expand semantic-ia-complete-symbol try-expand-dabbrev try-expand-dabbrev-visible try-expand-dabbrev-all-buffers try-expand-dabbrev-from-kill try-complete-file-name-partially try-complete-file-name try-expand-all-abbrevs)) (defun indent-or-complete () "Complete if point is at end of a word, otherwise indent line." (interactive) (if (looking-at "\\>") (hippie-expand nil) (indent-for-tab-command) )) (defun yyc/indent-key-setup () "Set tab as key for indent-or-complete" (local-set-key [(tab)] 'indent-or-complete) ) ;;;; C-mode-hooks . (defun yyc/c-mode-keys () "description" ;; Semantic functions. (semantic-default-c-setup) (local-set-key "\C-c?" 'semantic-ia-complete-symbol-menu) (local-set-key "\C-cb" 'semantic-mrub-switch-tags) (local-set-key "\C-cR" 'semantic-symref) (local-set-key "\C-cj" 'semantic-ia-fast-jump) (local-set-key "\C-cp" 'semantic-ia-show-summary) (local-set-key "\C-cl" 'semantic-ia-show-doc) (local-set-key "\C-cr" 'semantic-symref-symbol) (local-set-key "\C-c/" 'semantic-ia-complete-symbol) (local-set-key [(control return)] 'semantic-ia-complete-symbol) (local-set-key "." 'semantic-complete-self-insert) (local-set-key ">" 'semantic-complete-self-insert) ;; Indent or complete (local-set-key [(tab)] 'indent-or-complete) ) (add-hook 'c-mode-common-hook 'yyc/c-mode-keys) (defadvice push-mark (around semantic-mru-bookmark activate) "Push a mark at LOCATION with NOMSG and ACTIVATE passed to `push-mark'. If `semantic-mru-bookmark-mode' is active, also push a tag onto the mru bookmark stack." (semantic-mrub-push semantic-mru-bookmark-ring (point) 'mark) ad-do-it) ;;代码回跳 (global-set-key "\C-cB" (lambda () (interactive) (if (ring-empty-p (oref semantic-mru-bookmark-ring ring)) (error "Semantic Bookmark ring is currently empty")) (let* ((ring (oref semantic-mru-bookmark-ring ring)) (alist (semantic-mrub-ring-to-assoc-list ring)) (first (cdr (car alist)))) (if (semantic-equivalent-tag-p (oref first tag) (semantic-current-tag)) (setq first (cdr (car (cdr alist))))) (semantic-mrub-switch-tags first)))) (provide 'mycedet)