ソースコード東奔西走1



0 Comment
秀丸エディタのタグジャンプの拡張について その1。
ctagsとの連携。そこそこ動くようなので公開。

秀丸エディタ + ctags連携

ソースコードを読む上で欠かせないのが、タグジャンプ機能。
秀丸にデフォルトでついているタグ機能もいいが、これは基本、関数定義にしかジャンプできない。

そこでctagsの出番。

exuberant ctags 日本語対応版

これは変数定義やdefine定義、構造体の定義にもジャンプしていける。
未知のソースコードに挑む場合、非常に強力な味方となってくれる。
しかし、vimやemacs、サクラエディタなどはctagsが吐き出すtagファイルと連携できるのだが、秀丸エディタは残念ながら対応していない。

そこでctagsが吐き出すtagsファイルを秀丸エディタでも使える形にしてしまう。
と、偉そうに書いておきながら、他人の手を借りましょうw

htags 秀丸用 tag ファイルコンバータ(ctagsを秀丸で利用) (Vector)

※globalに含まれているhtagsとは別物だぞ

既にコンパイル済みのhtags.exeを使用しても特に問題はない。
しかし、ctagsが吐き出す補助情報は、秀丸エディタでジャンプする際にはあまり必要ない上、ジャンプ先候補が複数ある場合は、ジャンプ先を選択するダイアログボックスが非常に見づらくなるので、補助情報を消しておくと良い。

消し方はコンパイルが必要になるので少々面倒だが、
htags.cの142行目のfprintfでtagファイルに出力している所を以下のように変更して、補助情報はtagファイルに出力しないようにする。
fprintf(output_fh,"%s\t%s\t%s\t%s",pcFilename_pos,pcLine_pos,pcSymbol_pos,pcOther_pos);
/* ↓ */
fprintf(output_fh,"%s(%s) : %s\n",pcFilename_pos,pcLine_pos,pcSymbol_pos);

htags.cの139行目を以下のように変更して、行数の末尾にある;"を削除する。
*pcOther_pos = '\0';
/* ↓ */
*pcOther_pos = '\0';
*(pcOther_pos - 1) = '\0';
*(pcOther_pos - 2) = '\0';


あとはコンパイルするだけ。
コンパイルは無料で落とせるVisiual C++ Expressで実行する。
htagsにはプロジェクトファイルが付属しているが、古すぎるのか開けなかったので、新規プロジェクトを立ち上げてコンパイルする。
Win32コンソールアプリケーションの空のプロジェクトを作成して、htags.cを登録。
デバッグはしないので、ソリューション構成をReleaseに切り替えて、「ソリューションのビルド(F7)」をするだけ。
警告が幾つか出るが特に問題ない。

Visiual C++ ExpressをインストールしていないPCでも使用するなら、メニューの「プロジェクト」>「xxxのプロパティ」(xxxはプロジェクト名)から表示されるダイアログで、構成プロパティ>C/C++>コード生成を選択、ランタイムライブラリという項目をマルチスレッド(/MT)にしてからビルドするとよい。

htags.exeができたら、ctags.exeと連携させてtagファイルの作成に移る。
tagファイルを作成するのには付属のmaketags.batを使用する。
自分の場合は以下のような独自のbatファイルを作成して使用している。
:: create_tag
@echo off
set CTAGS_APP=%~dp0ctags58j2bin\ctags.exe
set HTAGS_APP=%~dp0htags\htags.exe
cd /d %1
if exist tags del /F tags
@echo on
%CTAGS_APP% --langmap=c:.c.h --excmd=number --tag-relative=yes --recurse=yes --fields=k -f - | %HTAGS_APP% > tags
@echo off

echo Processing Done...
Pause

※CTAGS_APPとHTAGS_APPはPC環境にあわせる必要がある。上記はbatファイルを置いてあるフォルダにctagsとhtagsのフォルダを置いてある場合
※ctagsのオプションは必要にあわせて変更すること

このbatファイルのショートカットを作り、そこにソースツリーのトップフォルダを放り込めば、tagファイルができあがる。
SendToにショートカットを放り込んで、右クリックの送るから使用するのもあり。自分はこっち。
tagファイルができたら、秀丸エディタ上でジャンプしたい単語上にカーソルをあわせて、ダイレクトタグジャンプ(Ctrl+F10)を実行すればよい。
定義箇所にジャンプできるはず。

当然だが、秀丸エディタの「その他>動作環境>その他のコマンド>tagファイル」の「上の階層もチェックする」はONにしておくこと。
tagsファイル名も合わせておくこと(特に大文字/小文字を区別するがONの場合は気づきにくいので注意)。

0 Comment: