GNU GLOBAL 5.7.1をインストールしてみた
GNU GLOBALの最新版は5.7.1であることに気付いたのでインストール。Debian GNU/Linuxのstableはいまだに4.8.6とかって古すぎwだからtesting版を。
$ sudo apt-get -t testing global
gtags.elを見てみたら、gtags-path-styleという変数が追加されてた!これは、gtags-select-modeでのファイル名の表記方法をカスタマイズする変数で、'root、'relative、'absoluteの3種類取れる。俺は行の内容が見やすくなるよう'relativeが好み。
というか、3/4のGNU GLOBAL on Emacsのタグ選択を見易くする - http://rubikitch.com/に移転しましたで'relative相当のコードを示したから、気付いてくれたのかもしれない。現にchangelogでの修正日が、3/23だ。
Revision 1.16 - (view) (download) (annotate) - [select for diffs] Sun Mar 23 09:19:30 2008 UTC (4 months, 3 weeks ago) by shigio Branch: MAIN Changes since 1.15: +53 -19 lines Diff to previous 1.15 o Added new customizable variable gtags-path-style. o Changed the style of the path in [GTAGS SELECT MODE] relative from the root of the current project. The previous version was absolute by default.
あと、--from-hereオプションを使うようになったから動作が賢くなった。前は
rb_ensure(trap, (VALUE)&arg, trap_ensure, (VALUE)&arg);
こんな行で「trap_ensure」でタグジャンプしようとしても飛んでくれなかったが、今はちゃんとtrap_ensure関数の定義場所にまで飛んでくれる!こりゃええ。変数argでタグジャンプしたら、argが使われている場所をリストしてくれる。おお、ちゃんと空気読んでくれてるよ。
だけど、ごめん。俺gtags-select-mode使ってないのだ。イマドキの候補選択といったらやっぱanything.elでしょーってことで少し前にgtags-select-modeの呼び出しをanythingの呼び出しにすりかえておいた。switch-to-bufferにadviceを定義するとか、かなり強引な方法だけどけっこうあっさりできた。anything-gtags-hijack-gtags-select-modeがtのときにanythingがハイジャックするという設定。anything.elだとなんといっても絞り込み検索とチラ見 ができる。GNU GLOBAL anything interfaceはanything.elの新バージョンと同時にリリースする予定。
GNU GLOBAL on Emacsのタグ候補選択バッファで現在のファイル・行のエントリを示す - http://rubikitch.com/に移転しましたの機能もanythingに移植しなくては。これは特定の候補を予め選択するようにanything.elをいぢるか。
俺はGNU GLOBALの設計は大好きだ。タグ収集・検索は外部コマンドにしてあるから簡単にエディタのインターフェースが書ける。俺も外部コマンド+Emacs Lispなプログラムをたくさん書いてきた。shigio++
ただ問題があって、/logが/m/logのシンボリックリンクなる状態で/log/compile/ruby19にRubyのソースコードを置いてある。そこでgtagsしたらファイルのパスがシンボリックリンクを展開した状態( /m/log/compile/ruby19/*.c )で記録してある。で、Emacsの方は /log/compile〜で開いているから、タグジャンプをしようとすると
global: '/log/compile/ruby18/signal.c' is out of source tree.
と怒られる。怒る前にシンボリックリンクを解決してほしいなぁ。
とりあえずEmacsが /m/log/compile〜で開くようにして逃げている。
あと、シンボルが使われている場所やgtags-find-with-grepの結果を示すときにそのシンボルが使われている関数名も表示してほしい。globalのオプション探したけどなかったし…関数名があるとかなり助かる。今はwhich-funcのindicatorを更新させて逃げようかな…
あー、俺なにしてるんだ。プログラム解析しなきゃいけないのにGNU GLOBALの問題解決に時間取られた。なんつーyak shavingだよ。