gtags の便利設定と関数一覧を出す関数の自前定義(gtags-parse-file)

gtags.el Version: 2.6 でのみ確認、他ではほぼ確実に動かない。

以下のような感じに gtags-goto-tag を修正して、

     ((char-equal flag-char ?r)
      (setq prefix "(R)"))
     ((char-equal flag-char ?f)
      (setq prefix "(F)"))
     (t (setq prefix "(D)")))

以下のように .emacs あたりに書く。

(setq gtags-suggested-key-mapping t)
(setq gtags-prefix-key "\C-c")
(require 'gtags)
(defun gtags-parse-file2 ()
  (interactive)
  (let ((root (gtags-get-rootpath))
        (path (buffer-file-name)))
    (if (string-match root path)
        (gtags-goto-tag
         (replace-match "" t nil path)
         "f" t)
      (message "Not found."))))

(setq gtags-mode-hook
      '(lambda ()
         (local-set-key (concat gtags-prefix-key "t") (lambda () (interactive) (gtags-find-tag t)))
         (local-set-key (concat gtags-prefix-key "r") 'gtags-find-rtag)
         (local-set-key (concat gtags-prefix-key "s") 'gtags-find-symbol)
         (local-set-key (concat gtags-prefix-key "f") 'gtags-parse-file2)))

(setq gtags-select-mode-hook
      '(lambda ()
         (local-set-key "\C-m" (lambda ()
                                 (interactive)
                                 (let ((buf (current-buffer)))
                                   (gtags-select-tag-other-window)
                                   (kill-buffer buf))))
         (local-set-key "\C-o" 'gtags-select-tag)
         ))
(add-hook 'c-mode-common-hook
          '(lambda()
             (gtags-mode 1)
             ))
(add-hook 'php-mode-hook
          '(lambda()
             (gtags-mode 1)
             ))
(add-hook 'emacs-lisp-mode-hook
          '(lambda()
             (gtags-mode 1)
             ))
(setq gtags-select-buffer-single t)

gtags-parse-file は gtags.el の最新バージョンだとあったけど、TRAMP と併用で動かなくなってた。