helm-gtags.elの更新

自分で使いながら、Bug Fixなり機能追加を行なっております。
だいぶ使えるものになったので、ここらで更新のお知らせをします。

前回からの変更点

helm-gtags.elを書いた - Life is very shortからの変更点

  • gtags.elの依存をなくす

gtags.elのソースを見ていたところ、内部状態をいろいろと持っていて、部分的に
使うことにすると、変な風になるんじゃないかって思ったことと、一部挙動がおかしい
(helmとの組み合わせの関係?)ところがあったので、一部利用していた機能をすべて
自前で実装しました。あと gtags.elって結構バージョンアップしていて、サポート
する際確かめるのが面倒だなと思い、全部自分で責任が取れるようにしたというのも
理由の一つです。

  • 特定のディレクトリ以下からの検索機能の実装

helm-gtags-find-tag, helm-gtags-find-rtag, helm-gtags-find-symbolに
C-u(prefix argument)を付加すると、ディレクトリを指定してそれ以下から
検索できるようにしました。FreeBSD, NetBSDのようにカーネルユーザランド
一緒に配布しているものだと、カーネルユーザランドで同じ名前の関数、マクロ、
変数が定義されていて、どちらかしか見たくないってことがあるので、実装しました。
(NetBSDの場合は usr/src/sys以下を指定する等のイメージです)
一般的には不要だと思う機能ですが、場合により有能だろうと思います。

設定例

gtags.elとの依存関係をなくしたので完全に独自の設定が必要になります。

    (require 'helm-config)
    (require 'helm-gtags)

    (add-hook 'c-mode-hook (lambda () (helm-gtags-mode)))

    ;; customize
    (setq helm-c-gtags-path-style 'relative)
    (setq helm-c-gtags-ignore-case t)

    ;; key bindings
    (add-hook 'helm-gtags-mode-hook
              '(lambda ()
                  (local-set-key (kbd "M-t") 'helm-gtags-find-tag)
                  (local-set-key (kbd "M-r") 'helm-gtags-find-rtag)
                  (local-set-key (kbd "M-s") 'helm-gtags-find-symbol)
                  (local-set-key (kbd "C-t") 'helm-gtags-pop-stack)))

おわりに

まだ自分以外の人に安心して使ってもらえるクオリティでないですが、
実装に関しては落ち着いてきたので、自分で使いまくってみて、
問題がないことが確認出来次第、MELPA等に登録します。