etagsを使う

etagsとは

プログラミングをしていると、ある関数の挙動を知るためにソースを読みたい時がある。
しかしその度に関数が定義されているソースファイルを探すのは大変。
etagsを使うとEmacs上でコマンドを叩くだけで目的の関数定義のソースを参照できるようになる。
この機能を実現するためにetagsは、様々なプログラミング言語の関数定義の知識と検索機能を備えている。

準備

まずは、関数名と関数定義の場所のマッピングをするTAGSというファイルを作成する。
このファイルはタグテーブルとよばれる。
今回はElispのソースファイルを元にタグテーブルを作成する。


# cd /usr/share/emacs
# find . -name "*.el" | etags -
次にEmacsにタグテーブルの場所を教える。

M-x visit-tags-table
Visit tags table: → /usr/share/emacs/TAGS を指定。
これで準備完了。
M-.(またはM-x find-tag)でElispの関数名を指定するとソースが表示されるようになった。
別のウィンドウに関数定義を表示する場合は、C-x 4 .と打つ。
同名の関数が複数ある場合は、C-u M-. で次の関数定義に飛べる。(C-u M-*で前に戻る)
関数名の上にポイントを置いた状態でコマンドを打つとデフォルトでその関数名を補完してくれる。
元の画面に戻るには、M-*とコマンドする。
参考 http://www.geocities.co.jp/SiliconValley-Bay/9285/EMACS-JA/emacs_273.html タグテーブルの選択




※追記
関数定義を表示できない関数があった。
例えばM-x append-to-bufferとして実行できるのに、M-. append-to-bufferで関数定義を見つけられない。
これはappend-to-buffer関数が定義されているsimple.elが存在せずコンパイル済みのsimple.elcのみ存在したためだった。
CentOSが提供するEmacsRPMパッケージはemacs-elパッケージとしてソースが別に配布されているのでこれをインストールした。

# yum install emacs-el
タグテーブルを作り直してM-. append-to-bufferを実行すると今度は関数定義が見つけられた。