Skip to content

Instantly share code, notes, and snippets.

@sluchin
Last active December 15, 2015 17:49
Show Gist options
  • Save sluchin/5299599 to your computer and use it in GitHub Desktop.
Save sluchin/5299599 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 1))))
(let ((hook (lambda ()
(when (fboundp 'gtags-mode) ; gtags-mode
(gtags-mode 1))
(when (fboundp 'set-gtags-libpath) ; パス設定
(set-gtags-libpath)))))
(add-hook 'c-mode-common-hook hook) ; C, C++
(add-hook 'java-mode-hook hook)) ; Java
(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 'c++-mode)
'("/usr/include")))))
(dolist (dir dirs)
(if (file-readable-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))))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment