本節主要參考: 曹樂的《在Emacs下用C/C++編程》
王純業的《Emacs 一個強大的平臺》
emacswiki.orgemcas難學易用,可擴展性強。有人把她當作信仰,有人認為他是魔鬼!學習首先記住基本的鍵盤快捷鍵,學會常用插件,深入學習還需學習lisp語言。本節緊對emacs作為開發環境做一個基本的介紹。
基本安裝設置請參考:Ubuntu Ubuntu 8.04 LTS 配置筆記emacs的基本安裝設置完成后,使emacs成為C開發環境還需做如下設置,新建$HOME/.emacs文件
vim $HOME/.emacs
本文把emacs插件放在 $HOME/.emacs.d/site-lisp/ 目錄下,如果在$HOME下沒有找到.emacs.d目錄,請手動建立
在.emacs文件添加
;;LOAD_PATH
(add-to-list 'load-path' "~/.emacs.d/site-lisp")
Color theme在.emacs文件添加
下載
Color theme解壓后放到$HOME/.emacs.d/site-lisp/ 目錄下
;;COLOR_THEME
(require 'color-theme)
(color-theme-classic)
顯示行號從
http://ann77.stu.cdut.edu.cn/EmacsDisplayLineNumber.html下載,把里面的 display-line-number.el放到加載路徑~/.emacs.d/site-lisp/目錄下。
在.emacs文件添加
(require 'display-line-number)
(setq display-line-number-format "%3d ")
(add-hook 'c-mode-hook 'display-line-number-mode)
(add-hook 'c++-mode-hook 'display-line-number-mode)
參考:http://ann77.stu.cdut.edu.cn/EmacsDisplayLineNumber.html
感覺ann77的這個的確比setnu.el好用
session從
http://emacs-session.sourceforge.net/ 下載,把里面的 session.el 解壓出來放到加載路徑~/.emacs.d/site-lisp/目錄下。
在.emacs文件添加
(require 'session)
(add-hook 'after-init-hook 'session-initialize)
(load "desktop")
(desktop-save-mode)
閱讀代碼
在emacs下讀代碼通常有一下幾種工具,etags,ECB(emacs code browser),cscope,Xref。這幾種工具也可以相互配合使用。其中:etags是emcas自帶的標準插件,注意不是ctags。Xref是的Xrefactory的免費版本,非GNU,支持C和java的跳轉,自動補全插等功能,比cedet+ECB組合速度要快,用起來也很簡單,回答幾個問題新建一個project,然后幾個快捷鍵就可以滿足需要了,美中不足的是對C++支持是收費,且狂貴,這個小東西要400刀,也沒找到破解的版本,寫C++代碼的時候還得用CEDET+ECB。
安裝 cscope
sudo apt-get install cscope
找到xcscope.el文件 cp到 ~/.emacs.d/site-lisp/
在.emacs文件添加
(require 'xcscope)
cscope的主要功能和對應的快捷鍵:
;; C-c s a 設定初始化的目錄,一般是你代碼的根目錄
;; C-s s I 對目錄中的相關文件建立列表并進行索引
;; C-c s s 序找符號
;; C-c s g 尋找全局的定義
;; C-c s c 看看指定函數被哪些函數所調用
;; C-c s C 看看指定函數調用了哪些函數
;; C-c s e 尋找正則表達式
;; C-c s f 尋找文件
;; C-c s i 看看指定的文件被哪些文件include)
安裝CEDET從
http://cedet.sourceforge.net/下載cedet,解壓到~/.emacs.d/site-lisp/在cedet目錄下運行make。以下載到的cedet-1.0pre4.tar.gz為例
cp cedet-1.0pre4.tar.gz ~/.emacs.d/site-lisp/
cd ~/.emacs.d/site-lisp/
tar xvzf cedet-1.0pre4.tar.gz
cd cedet-1.0pre4
make
詳情請參考INSTALL文檔
在.emacs文件添加
(add-hook 'texinfo-mode-hook (lambda () (require 'sb-texinfo)))
(load-file "~/.emacs.d/site-lisp/cedet-1.0pre4/common/cedet.el")
(semantic-load-enable-code-helpers)
(autoload 'speedbar-frame-mode "speedbar" "Popup a speedbar frame" t)
(autoload 'speedbar-get-focus "speedbar" "Jump to speedbar frame" t)
(define-key-after (lookup-key global-map [menu-bar tools])
[speedbar]
'("Speedbar" .
speedbar-frame-mode)
[calendar])
安裝ECB從
http://ecb.sourceforge.net/ 下載ECB,解壓到~/.emacs.d/site-lisp/ 即可
在.emacs文件添加
(add-to-list 'load-path "~/.emacs.d/site-lisp/ecb-2.32")
(load-file "~/.emacs.d/site-lisp/ecb-2.32/ecb.el")
(require 'ecb)
(setq ecb-auto-activate t
ecb-tip-of-the-day nil
ecb-tree-indent 4
ecb-windows-height 0.5
ecb-windows-width 0.20)
ecb-auto-compatibility-check nil
ecb-version-check nil
inhibit-startup-message t
重啟Emacs
在emacs執行M-x ecb-byte-complie編譯,可以加快ECB運行速度
M-x ecb-show-help看在線幫助
M-x customize-option RET ecb-source-path RET設置源碼目錄
ECB默認是不支持
鼠標響應的,需作如下設置:
打開emacs中的菜單 ECB->Preferences->Most important...,
找到Ecb Primary Secondary Mouse Buttons:并點擊Show Value,
選擇第三個選項:Primary:mouse-1,secondary:mouse-2
保存選項為以后所用
設置自動補全在.emacs文件添加
;;;;C/C++語言啟動時自動加載semantic對/usr/include的索引數據庫
(setq semanticdb-search-system-databases t)
(add-hook 'c-mode-common-hook
(lambda ()
(setq semanticdb-project-system-databases
(list (semanticdb-create-database
semanticdb-new-database-class
"/usr/include")))))
;; project root path
(setq semanticdb-project-roots
(list
(expand-file-name "/")))
;; 避免semantic占用CPU過多
(setq-default semantic-idle-scheduler-idle-time 432000)
(defun my-indent-or-complete ()
(interactive)
(if (looking-at "\\>")
(hippie-expand nil)
(indent-for-tab-command)))
(autoload 'senator-try-expand-semantic "senator")
(setq hippie-expand-try-functions-list
'(
senator-try-expand-semantic
try-expand-dabbrev
try-expand-dabbrev-visible
try-expand-dabbrev-all-buffers
try-expand-dabbrev-from-kill
try-expand-list
try-expand-list-all-buffers
try-expand-line
try-expand-line-all-buffers
try-complete-file-name-partially
try-complete-file-name
try-expand-whole-kill
)
)
;;快捷鍵 在.emacs文件添加
(global-set-key [M-/] 'hippie-expand)
;;右Ctrl+\ 自動補全menu
(global-set-key "\C-\\" 'semantic-ia-complete-symbol-menu)
;; 跳轉到全局定義
(global-set-key "\C-xg" 'cscope-find-global-definition-no-prompting)
安裝Xref
從
http://xref-tech.com/xrefactory/downloads/下載1.X.X linux版本(1.X.X為免費版,2.X.X為收費版)。解壓后放到~/.emacs.d/site-lisp/目錄下。以下載的xref-1.6.10-i86pcLinux.tar.gz為例
cp xref-1.6.10-i86pcLinux.tar.gz ~/.emacs.d/site-lisp/
cd ~/.emacs.d/site-lisp/xref
sh ./xrefsetup
.........
請參考INSTALL文檔
安裝程序在.emacs文件上追加了
;; Xrefactory configuration part ;;
;; some Xrefactory defaults can be set here
(defvar xref-current-project nil) ;; can be also "my_project_name"
(defvar xref-key-binding 'global) ;; can be also 'local or 'none
(setq load-path (cons "/home/uiu/.emacs.d/site-lisp/xref/emacs" load-path))
(setq exec-path (cons "/home/uiu/.emacs.d/site-lisp/xref" exec-path))
(load "xrefactory")
;; end of Xrefactory configuration part ;;
(message "xrefactory loaded")
為使上次建立的project仍有效,需將
(defvar xref-current-project nil) ;; can be also "my_project_name"
改為
(defvar xref-current-project t) ;; can be also "my_project_name"
;; c-mode設置在.emacs文件添加
;; c-mode公共設置
(defun my-c-mode-common-hook ()
(setq default-tab-width 4)
(setq tab-width 4)
(setq c-basic-offset 4)
(hs-minor-mode t))
(add-hook 'c-mode-common-hook 'my-c-mode-common-hook)
;; C語言設置
(defun my-c-mode-hook ()
(c-set-style "cc-mode"))
(add-hook 'c-mode-hook 'my-c-mode-hook)
;; C++設置
(defun my-c++-mode-hook ()
(c-set-style "stroustrup"))
(add-hook 'c++-mode-hook 'my-c++-mode-hook)
輸入左邊的括號,就會自動補全右邊的部分.包括(), "", [] , {} , 等
在.emacs文件添加
(defun my-c-mode-auto-pair ()
(interactive)
(make-local-variable 'skeleton-pair-alist)
(setq skeleton-pair-alist '(
(?` ?` _ "''")
(?\( ? _ " )")
(?\[ ? _ " ]")
(?{ \n > _ \n ?} >)))
(setq skeleton-pair t)
(local-set-key (kbd "(") 'skeleton-pair-insert-maybe)
(local-set-key (kbd "{") 'skeleton-pair-insert-maybe)
(local-set-key (kbd "`") 'skeleton-pair-insert-maybe)
(local-set-key (kbd "[") 'skeleton-pair-insert-maybe))
(add-hook 'c-mode-hook 'my-c-mode-auto-pair)
(add-hook 'c++-mode-hook 'my-c-mode-auto-pair)
我的.emacs相關的配置,僅供參考
;;LOAD_PATH
(add-to-list 'load-path' "~/.emacs.d/site-lisp")
;=========================================END==============================================;
;;COLOR_THEME
(require 'color-theme)
(color-theme-classic)
;=========================================END==============================================;
;;LANG
(set-language-environment 'Chinese-GB)
(set-keyboard-coding-system 'utf-8)
(set-clipboard-coding-system 'utf-8)
(set-terminal-coding-system 'utf-8)
(set-buffer-file-coding-system 'utf-8)
(set-default-coding-systems 'utf-8)
(set-selection-coding-system 'utf-8)
(modify-coding-system-alist 'process "*" 'utf-8)
(setq default-process-coding-system '(utf-8 . utf-8))
(setq-default pathname-coding-system 'utf-8)
(set-file-name-coding-system 'utf-8)
(setq ansi-color-for-comint-mode t) ;;處理shell-mode亂碼,好像沒作用
;=========================================END==============================================;
;;MY CUSTOMIZE
(auto-image-file-mode t);打開圖片顯示功能
(display-time-mode 1);顯示時間,格式如下
(setq display-time-24hr-format t)
(setq display-time-day-and-date t)
(transient-mark-mode t);允許臨時設置標記
(setq frame-title-format '("" buffer-file-name "@emacs" ));在標題欄顯示buffer名稱
(setq default-fill-column 80);默認顯示 80列就換行
(set-scroll-bar-mode nil) ; 取消滾動欄
;;(tool-bar-mode nil) ; 取消工具欄
(setq default-directory "~/") ; 設置打開文件的缺省路徑
(ido-mode t) ; 打開ido,使打開文件時后面有提示,在emacs23帶有ido
(setq visible-bell t) ; 關閉煩人的出錯時的提示聲
(setq inhibit-startup-message t) ; 關閉emacs啟動時的畫面
(setq gnus-inhibit-startup-message t) ; 關閉gnus啟動時的畫面
(fset 'yes-or-no-p 'y-or-n-p) ; 按 y 或空格鍵表示 yes,n 表示 no
(setq mouse-yank-at-point t) ; 不在鼠標點擊的那個地方插入剪貼板內容
(setq kill-ring-max 200) ; 設置粘貼緩沖條目數量
(setq auto-save-mode nil) ; 自動保存模式
(setq x-select-enable-clipboard t) ; 允許emacs和外部其他程序的粘貼
(setq user-full-name "XXXXXX")
(setq user-mail-address "XXXXXX@gmail.com") ; 設置有用的個人信息,這在很多地方有用。
(setq global-font-lock-mode t) ; 進行語法加亮。
(setq-default kill-whole-line t) ; 在行首 C-k 時,同時刪除該行
(setq show-paren-mode t) ;打開括號匹配顯示模式
(setq show-paren-style 'parenthesis) ;括號匹配時可以高亮顯示另外一邊的括號,但光標不會煩人的跳到另一個括號處。
(setq mouse-avoidance-mode 'animate) ;光標靠近鼠標指針時,讓鼠標指針自動讓開,別擋住視線。
(setq auto-image-file-mode t) ;讓 Emacs 可以直接打開和顯示圖片
(setq default-major-mode 'text-mode)
; (add-hook 'text-mode-hook 'turn-on-auto-fill) ; 設置缺省主模式是text,,并進入auto-fill次模式.而不是基本模式fundamental-mode
(setq-default auto-fill-function 'do-auto-fill) ; Autofill in all modes;;
;(setq-default indent-tabs-mode nil)
;(setq default-tab-width 8)
;(setq tab-stop-list ())
;;不用 TAB 字符來indent, 這會引起很多奇怪的錯誤。編輯 Makefile 的時候也不用擔心,因為 makefile-mode 會把 TAB 鍵設置成真正的 TAB 字符,并且加亮顯示的。注:還沒搞清楚
(setq column-number-mode t)
(setq line-number-mode t) ; 顯示行號
(setq display-time-24hr-format t)
(setq display-time-day-and-date t)
(display-time) ; 顯示時間
(setq sentence-end "\\([。!?]\\|……\\|[.?!][]\"')}]*\\($\\|[ \t]\\)\\)[ \t\n]*")
(setq sentence-end-double-space nil) ; 設置 sentence-end 可以識別中文標點。不用在 fill 時在句號后插入兩個空格。
(setq enable-recursive-minibuffers t) ; 可以遞歸的使用 minibuffer
(setq scroll-margin 3 scroll-conservatively 10000)
;;防止頁面滾動時跳動, scroll-margin 3 可以在靠近屏幕邊沿3行時就開始滾動,可以很好的看到上下文。
(setq track-eol t) ; 當光標在行尾上下移動的時候,始終保持在行尾。
(setq Man-notify-method 'pushy) ; 當瀏覽 man page 時,直接跳轉到 man buffer。
(setq next-line-add-newlines nil) ; Emacs 21 中已經是缺省設置。按 C-n 或向下鍵時不添加新行。
(setq speedbar-show-unknown-files t);;可以顯示所有目錄以及文件
(setq dframe-update-speed nil);;不自動刷新,手動 g 刷新
(setq speedbar-update-flag nil)
(setq speedbar-use-images nil);;不使用 image 的方式
(setq speedbar-verbosity-level 0)
(setq time-stamp-active t)
(setq time-stamp-warn-inactive t)
(setq time-stamp-format "%:y-%02m-%02d %3a %02H:%02M:%02S chunyu") ; 設置時間戳,標識出最后一次保存文件的時間。
(setq dired-recursive-copies 'top)
(setq dired-recursive-deletes 'top) ;讓 dired 可以遞歸的拷貝和刪除目錄。
;=========================================END==============================================;
;;xcscope
(require 'xcscope)
;; C-c s a 設定初始化的目錄,一般是你代碼的根目錄
;; C-s s I 對目錄中的相關文件建立列表并進行索引
;; C-c s s 序找符號
;; C-c s g 尋找全局的定義
;; C-c s c 看看指定函數被哪些函數所調用
;; C-c s C 看看指定函數調用了哪些函數
;; C-c s e 尋找正則表達式
;; C-c s f 尋找文件
;; C-c s i 看看指定的文件被哪些文件include
;=========================================END==============================================;
;;文件頭header設置
(require 'header2)
;;(require 'header)
(setq make-header-hooks '(header-mode-line
header-blank
header-file-name
header-blank
header-copyright
header-blank
header-author
header-creation-date
header-modification-author
header-modification-date
header-update-count
header-blank
header-history
header-blank
))
(setq header-copyright-notice " XXXXXXX" )
(make-local-variable 'user-full-name)
(make-local-variable 'user-mail-address)
;=========================================END==============================================;
;;setnu
;(add-hook 'c-mode-common-hook '(lambda() (require 'setnu+) ) ) ;;設置C/C++mode顯示行號
;(add-hook 'c++-mode-common-hook '(lambda() (require 'setnu+) ) )
;; 加載顯示行號模塊
(require 'display-line-number)
;;(add-hook 'c-mode-common-hook '(lambda() (require 'display-line-number) ) )
;; 如果想所有打開的文件都顯示行的話就打開下面的注釋
;;(global-display-line-number-mode 1)
;; 設置顯示格式
(setq display-line-number-format "%3d ")
;; 在 tool bar 上增加一個圖標,
;; 注意: 一定要在 load-path 中 可以找到 display-line-nuber.xpm 文件才行。
;;
;;(tool-bar-add-item "display-line-number"
;; 'display-line-number-mode
;; 'display-line-number-mode
;; :help "display line number!"
;; :button (cons :toggle '(and (boundp
;; display-line-number-mode)
;; display-line-number-mode)))
;;
;; 使用方法
;; M-x display-line-number-mode
;; 用來 toggle 顯示行號的模式
;; M-x display-line-number-mode-on
;; 啟動顯示行號的模式
;; M-x display-line-number-mode-off
;; 關閉顯示行號的模式
;; 僅對某種 mode 啟動顯示行號的模式
;; (add-hook 'c-mode-hook 'display-line-number-mode)
(add-hook 'c-mode-hook 'display-line-number-mode)
(add-hook 'c++-mode-hook 'display-line-number-mode)
;=========================================END==============================================;
;;tabbar
(require 'tabbar)
(tabbar-mode)
;=========================================END==============================================;
;加入會話功能
(require 'session)
(add-hook 'after-init-hook 'session-initialize)
(load "desktop")
(desktop-save-mode)
;=========================================END==============================================;
;; 啟用redo
(require 'redo)
;=========================================END==============================================;
;;cedet ecb安裝
(add-hook 'texinfo-mode-hook (lambda () (require 'sb-texinfo)))
(load-file "~/.emacs.d/site-lisp/cedet-1.0pre4/common/cedet.el")
(semantic-load-enable-code-helpers)
(autoload 'speedbar-frame-mode "speedbar" "Popup a speedbar frame" t)
(autoload 'speedbar-get-focus "speedbar" "Jump to speedbar frame" t)
(define-key-after (lookup-key global-map [menu-bar tools])
[speedbar]
'("Speedbar" .
speedbar-frame-mode)
[calendar])
;; 指定semantic臨時文件的路徑,避免到處都是臨時文件
(setq semanticdb-default-save-directory "~/backups/emacs/semantic")
;;;;C/C++語言啟動時自動加載semantic對/usr/include的索引數據庫
(setq semanticdb-search-system-databases t)
(add-hook 'c-mode-common-hook
(lambda ()
(setq semanticdb-project-system-databases
(list (semanticdb-create-database
semanticdb-new-database-class
"/usr/include")))))
;; project root path
(setq semanticdb-project-roots
(list
(expand-file-name "/")))
;; 避免semantic占用CPU過多
(setq-default semantic-idle-scheduler-idle-time 432000)
;;ecb
(add-to-list 'load-path "~/.emacs.d/site-lisp/ecb-2.32")
(load-file "~/.emacs.d/site-lisp/ecb-2.32/ecb.el")
(require 'ecb)
(setq ecb-auto-activate nil
ecb-tip-of-the-day nil
ecb-tree-indent 4
ecb-windows-height 0.5
ecb-windows-width 0.13)
ecb-auto-compatibility-check nil
ecb-version-check nil
inhibit-startup-message t
;;重啟Emacs
;;運行M-x ecb-byte-complie編譯,可以加快運行速度
;;M-x ecb-show-help看在線幫助
;;M-x customize-option RET ecb-source-path RET設置源碼目錄
;;設置自動補全
(defun my-indent-or-complete ()
(interactive)
(if (looking-at "\\>")
(hippie-expand nil)
(indent-for-tab-command)))
(autoload 'senator-try-expand-semantic "senator")
(setq hippie-expand-try-functions-list
'(
senator-try-expand-semantic
try-expand-dabbrev
try-expand-dabbrev-visible
try-expand-dabbrev-all-buffers
try-expand-dabbrev-from-kill
try-expand-list
try-expand-list-all-buffers
try-expand-line
try-expand-line-all-buffers
try-complete-file-name-partially
try-complete-file-name
try-expand-whole-kill
)
)
;=========================================END==============================================;
;; c-mode設置
;; c-mode公共設置
(defun my-c-mode-common-hook ()
(setq default-tab-width 4)
(setq tab-width 4)
(setq c-basic-offset 4)
(hs-minor-mode t))
(add-hook 'c-mode-common-hook 'my-c-mode-common-hook)
(load-library "hideshow")
(add-hook 'c-mode-hook 'hs-minor-mode)
(add-hook 'c++-mode-hook 'hs-minor-mode)
(add-hook 'java-mode-hook 'hs-minor-mode)
(add-hook 'perl-mode-hook 'hs-minor-mode)
(add-hook 'php-mode-hook 'hs-minor-mode)
(add-hook 'emacs-lisp-mode-hook 'hs-minor-mode)
;;能把一個代碼塊縮起來,需要的時候再展開
;; M-x hs-minor-mode
;; C-c @ ESC C-s show all
;; C-c @ ESC C-h hide all
;; C-c @ C-s show block
;; C-c @ C-h hide block
;; C-c @ C-c toggle hide/show
;; C語言設置
(defun my-c-mode-hook ()
(c-set-style "cc-mode"))
(add-hook 'c-mode-hook 'my-c-mode-hook)
;; C++設置
(defun my-c++-mode-hook ()
(c-set-style "stroustrup"))
(add-hook 'c++-mode-hook 'my-c++-mode-hook)
;=========================================END==============================================;
(defun my-c-mode-auto-pair ()
(interactive)
(make-local-variable 'skeleton-pair-alist)
(setq skeleton-pair-alist '(
(?` ?` _ "''")
(?\( ? _ " )")
(?\[ ? _ " ]")
(?{ \n > _ \n ?} >)))
(setq skeleton-pair t)
(local-set-key (kbd "(") 'skeleton-pair-insert-maybe)
(local-set-key (kbd "{") 'skeleton-pair-insert-maybe)
(local-set-key (kbd "`") 'skeleton-pair-insert-maybe)
(local-set-key (kbd "[") 'skeleton-pair-insert-maybe))
(add-hook 'c-mode-hook 'my-c-mode-auto-pair)
(add-hook 'c++-mode-hook 'my-c-mode-auto-pair)
;;輸入左邊的括號,就會自動補全右邊的部分.包括(), "", [] , {} , 等等。
;=========================================END==============================================;
;;bakup
(setq auto-save-default nil) ;不生成 #filename# 文件
(setq make-backup-files t) ;設定不產生備份文件
(setq auto-save-mode nil) ;自動保存模式
;;(setq-default make-backup-files t) ; 不生成臨時文件
(setq delete-old-versions t)
(setq version-control 'never) ; 啟用版本控制,即可以備份多次
(setq kept-old-versions 2) ; 備份最原始的版本兩次,及第一次編輯前的文檔,和第二次編輯前的文檔
(setq kept-new-versions 1) ; 備份最新的版本1次,理解同上
(setq delete-old-versions t) ;刪掉不屬于以上3中版本的版本
(setq backup-directory-alist '((" " . "~/backups/emacs/"))) ; 設置備份文件的路徑
(setq backup-by-copying t) ;備份設置方法,直接拷貝
;; Emacs 中,改變文件時,默認都會產生備份文件(以 ~ 結尾的文件)。可以完全去掉
;; (并不可取),也可以制定備份的方式。這里采用的是,把所有的文件備份都放在一
;; 個固定的地方("~/backups")。對于每個備份文件,保留最原始的兩個版本和最新的
;; 1個版本。并且備份的時候,備份文件是復本,而不是原件。
;=========================================END==============================================;
;;HOT KEY
;;保留F3、F4、F5、F6、F7、F8 for Xrefactory
(global-set-key [f1] 'shell) ; 進入shell
(global-set-key [C-f9] 'gdb) ; 調試
(setq compile-command "make -f Makefile") ; 編譯
(global-set-key [f9] 'do-compile)
(global-set-key [f10] 'speedbar) ; 啟動/關閉speedbar
(global-set-key (kbd "M-\[") 'hs-hide-block) ; 隱藏塊
(global-set-key (kbd "M-\]") 'hs-show-block) ; 顯示塊
(global-set-key [C-f12] 'comment-or-uncomment-region) ; 注釋 / 取消注釋
(global-set-key [f12] 'c-indent-line-or-region) ; 格式化代碼
(global-set-key (kbd "C-`") 'ecb-goto-window-sources) ; 切換到ecb sources窗口
(global-set-key [C-tab] 'other-window) ; 切換窗口
(global-set-key [M-return] 'delete-other-windows) ; 關閉其他窗口
(global-set-key "\C-xk" 'kill-this-buffer) ; 關閉當前buffer
(global-set-key (kbd "s-SPC") 'set-mark-command) ; 改變set mark鍵
;; 顯示buffer列表
(global-set-key (kbd "C-x C-b") 'ibuffer)
;; 跳轉到當前目錄的Dired
(global-set-key "\C-x\C-j" 'dired-jump)
;; 跳轉到寄存器指定的位置
(global-set-key "\C-xj" 'jump-to-register)
;; 跳轉到全局定義
(global-set-key "\C-xg" 'cscope-find-global-definition-no-prompting)
(global-set-key (kbd "S-<SPC>") 'set-mark-command) ;用shift+space 來 setmark 了, C-@ 很不好按。
(global-set-key [C-=] 'my-indent-or-complete) ;自動補全或縮進
(global-set-key [\C-f12] 'ecb-activate) ;啟用ECB
(global-set-key [\C-S-f12] 'ecb-deactivate) ;退出ECB
;; 補全命令 右Ctrl+\ 自動補全menu
(global-set-key [M-/] 'hippie-expand)
;;(global-set-key [(control return)] 'senator-complete-symbol);
;;(global-set-key [(control return)] ' senator-completion-menu-popup)
(global-set-key "\C-\\" 'semantic-ia-complete-symbol-menu)
;;tabbar
(global-set-key (kbd "S-<up>") 'tabbar-backward-group)
(global-set-key (kbd "S-<down>") 'tabbar-forward-group)
(global-set-key (kbd "S-<left>") 'tabbar-backward)
(global-set-key (kbd "S-<right>") 'tabbar-forward)
(global-set-key ( kbd "C-.") 'redo)
;=========================================END==============================================;
(custom-set-variables
;; custom-set-variables was added by Custom.
;; If you edit it by hand, you could mess it up, so be careful.
;; Your init file should contain only one such instance.
;; If there is more than one, they won't work right.
'(ecb-options-version "2.32")
'(ecb-primary-secondary-mouse-buttons (quote mouse-1--mouse-2)))
(custom-set-faces
;; custom-set-faces was added by Custom.
;; If you edit it by hand, you could mess it up, so be careful.
;; Your init file should contain only one such instance.
;; If there is more than one, they won't work right.
)
;=========================================END==============================================;
;; Xrefactory configuration part ;;
;; some Xrefactory defaults can be set here
(defvar xref-current-project t) ;; can be also "my_project_name"
;;注:這里的nil改為了t
(defvar xref-key-binding 'global) ;; can be also 'local or 'none
(setq load-path (cons "/home/uiu/.emacs.d/site-lisp/xref/emacs" load-path))
(setq exec-path (cons "/home/uiu/.emacs.d/site-lisp/xref" exec-path))
(load "xrefactory")
;; end of Xrefactory configuration part ;;
(message "xrefactory loaded")
;=========================================END==============================================;