XTAGS #1 作る

XTAGS を作る(make-tags-file)ための何やら。

変数 ed::*maketag-list*

XTAGS を作る時は ed::*maketag-list* に設定された (タグ作る関数 ワイルドカード...) に従ってワイルドカードにマッチするファイルをタグ作る関数で処理していく。

ワイルドカードの方は単にワイルドカードなのでテキトーに指定しておく。

対象のファイル毎にそのファイルの内容をバッファに読み込んでおいて(モードとか何もしてないので注意)、タグ作る関数が呼び出される。引数が2つ。

  • 対象のファイル名(基本的には make-tags-file で指定したディレクトリからの相対パスっぽいのだが、絶対パスになってることがあるかも)
  • その make-tags-file 実行でこれまでに作った XTAGS エントリの数

一応 make-tags-file が作成されたエントリの数を数えてるので2つ目の引数をエントリ毎に incf しておいて、最後にその値を返す*1。ステータスバーに表示してるだけっぽいけど。
このとき *standard-output* が XTAGS ファイル(になるバッファ)になってるので、呼び出された関数でファイルを処理して XTAGS エントリを出力していく。

  • 参考: ${XYZZY}/lisp/maketags.l の make-tags-file

XTAGS エントリ

XTAGS エントリは以下の形式で書き出す。見やすくするために改行してるけど、改行は要らない。

;; ^F ^V ^S ^_ ^A ^^
;; こいつらは制御文字なのでコピペ注意。入力するには C-q C-f とか。
クラス名^F関数名^_ファイル名^_ポイント^A引数^^
クラス名^V変数名^_ファイル名^_ポイント^^
クラス名^S構造体名^_ファイル名^_ポイント^^

クラス名と関数の ^A引数 は省略可。引数はジャンプ先が複数ある場合に出てくるダイアログとか XTAGS から補完候補作るときに使われるっぽいのだけどよくわかってない。

*1:返した値が次のタグ作る関数に渡されていくので、整数以外は返しちゃダメ。だけど誰かが整数以外を返したりした時のために2つ目の引数は整数でない事も考えといた方がいいかも。