find-tags の実行時に TAGS ファイルを探しに行く
GNU Global だと、こういうことはやってくれるけど、変数と関数を区別していて(?)手になじまなかったので etags を使い続けている。だけど GNU Global はタグファイルを自動で検索してくれるところが使いやすかった。
だから etags の場合でも find-tags を実行時にソースコードを含むディレクトリから上に上に TAGS ファイルを検索していくようにしてみた。
(defun tags-search-tags-file (file-name) "Search TAGS file to upper directories of the current buffer" (let ((parent-directory (file-name-directory (directory-file-name file-name)))) (unless (string= file-name parent-directory) (let ((tags-file (concat parent-directory "TAGS"))) (if (file-exists-p tags-file) (setq tags-file-name tags-file) (tags-search-tags-file parent-directory)))))) (add-hook 'pre-command-hook (lambda () (when (eq this-command 'find-tag) (tags-search-tags-file (buffer-file-name)))))
tags-table-list のことは知っているけど、ちょっとだけ違う複数のソースコードを扱っていると、単にタグファイルを列挙するだけでは不十分で、都度タグファイルを読んでほしかったのです。