Skip to content

Instantly share code, notes, and snippets.

@sluchin
Created April 3, 2013 05:50
Show Gist options
  • Save sluchin/5298750 to your computer and use it in GitHub Desktop.
Save sluchin/5298750 to your computer and use it in GitHub Desktop.
;;; GNU Global
;; wget http://tamacom.com/global/global-6.2.8.tar.gz
(when (and (executable-find "global")
(locate-library "gtags"))
(autoload 'gtags-mode "gtags" "Gtags facility for Emacs." t)
(add-hook 'gtags-select-mode-hook
(lambda () ; 強調表示
(when (fboundp 'hl-line-mode) (hl-line-mode t))))
(let ((hook (lambda ()
(when (fboundp 'gtags-mode) (gtags-mode t))
(when (fboundp 'set-gtags-libpath) (set-gtags-libpath)))))
(add-hook 'c-mode-common-hook hook) ; C言語
(add-hook 'java-mode-hook hook) ; Java
(add-hook 'ruby-mode-hook hook) ; Ruby
(add-hook 'python-mode-hook hook) ; Python
(add-hook 'perl-mode-hook hook)) ; Perl
(eval-after-load "gtags"
'(progn
;; ローカルバッファ変数
(defvar gtags-libpath nil "Library directory of language.")
(make-variable-buffer-local 'gtags-libpath)
;; ローカルバッファ変数にパスを設定する関数定義
(defun set-gtags-libpath ()
(let (path-string
(dirs (cond
((eq major-mode 'c-mode)
'("/usr/src/linux-source-3.2.0"
"/usr/include"))
((eq major-mode 'ruby-mode)
'("/usr/lib/ruby/1.8"))
((eq major-mode 'python-mode)
'("/usr/lib/python2.7"))
((eq major-mode 'perl-mode)
'("/usr/lib/perl/5.14"
"/usr/lib/perl5")))))
(dolist (dir dirs)
(if (file-exists-p (concat (file-name-as-directory dir) "GTAGS"))
(setq path-string (concat path-string dir ":"))
(message "GTAGS does't exist: %s" dir)))
(if (and (boundp 'gtags-libpath) path-string)
(setq gtags-libpath (substring path-string 0 -1)))
(message "gtags-libpath: %s" gtags-libpath)))
;; 環境変数の設定
(defadvice gtags-goto-tag
(before setenv-gtags-libpath activate)
(setenv "GTAGSLIBPATH" gtags-libpath)
(message "GTAGSLIBPATH: %s" (getenv "GTAGSLIBPATH")))
;; パスの表示形式
(when (boundp 'gtags-path-style)
(setq gtags-path-style 'absolute))
;; ポップ時バッファ削除
(when (boundp 'gtags-pop-delete)
(setq gtags-pop-delete t))
;; 選択バッファを一段階のみ有効
(when (boundp 'gtags-select-buffer-single)
(setq gtags-select-buffer-single t))
;; キーバインド
;; 定義タグ検索
(define-key gtags-mode-map (kbd "C-c g d") 'gtags-find-tag)
;; 参照タグ検索
(define-key gtags-mode-map (kbd "C-c g r") 'gtags-find-rtag)
;; シンボル一覧表示
(define-key gtags-mode-map (kbd "C-c g s") 'gtags-find-symbol)
;; grep 検索
(define-key gtags-mode-map (kbd "C-c g g") 'gtags-find-with-grep)
;; POSIX 正規表現検索
(define-key gtags-mode-map (kbd "C-c g p") 'gtags-find-pattern)
;; パス名検索
(define-key gtags-mode-map (kbd "C-c g P") 'gtags-find-file)
;; ファイルの定義タグ検索
(define-key gtags-mode-map (kbd "C-c g f") 'gtags-parse-file)
;; コンテキスト検索
(define-key gtags-mode-map (kbd "C-]") 'gtags-find-tag-from-here)
;; タグスタックをポップ
(define-key gtags-mode-map (kbd "C-t") 'gtags-pop-stack)
;; 一覧表示のキーバインド
(define-key gtags-select-mode-map "p" 'previous-line)
(define-key gtags-select-mode-map "n" 'next-line)
(define-key gtags-select-mode-map "q" 'gtags-pop-stack)
(message "Loading %s (gtags)...done" this-file-name))))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment