etags

どもども。
gtags では Windows環境だと,global のソースコードに対して,
タグファイルを生成できないので,オレ,etags,使う。
(GTAGS ファイルを作成しようとしてこける。gtags ディレクトリがあるから)


で,ちょっと混乱したついでに,etags についてちょっと調べたので,
調べた範囲でまとめます。

M-x からの〜

  • visit-tags-table

タグテーブルファイルを選択する。こんときに既に1個以上のタグファイルを
使っている場合は,現在のタグテーブルリストに追加するか,
もしくは,新たなタグテーブルリストを作るか聞かれる。
新たに作った場合は,下の select-tags-table での選択肢が増えることになる。
つまり使用するリストを切替え可能になる。
例えば2つのリストがある場合は以下の様になると。

(~/src/foo/TAGS)   <--- この行にカーソルおいて t で,このタグテーブルリストを使用するということ。
(~/elisp/bar/TAGS)
~/src/foo/TAGS <--- これらは何のためにあるのかわからんかった。
~/elisp//TAGS
  • select-tags-table

上記参照。
タグテーブルを選択するバッファに突入。q で終了。t で選択できる。
t すると,エコーエリアにメッセージがでます。
見逃したら,*Message* バッファを見ればわかるはずです。

  • tags-reset-tags-table

タグテーブルリストとかをリセットしまっせ。
今まで選択してきたタグファイルがぱーになります。
間違ったタグファイルを選択してしまった場合とかに使う?

  • find-tag, pop-tag-mark

タグを探して移動。んで戻ってくるときは,pop-tag-mark
find-tag は,デフォルトでは 「M-.」,
pop-tag-mark は,「M-*」にそれぞれバインドされています。

  • gtags が動くとき

gtags-mode が有効の時は,上記のキーバインドが上書きされるようです。
つまり,「M-.」は,gtags-find-tag に,「M-*」は,gtags-pop-stack になると。
一応,gtags.el から引用します。

;
; New key assignment to avoid conflicting with ordinary assignments.
;
(define-key gtags-mode-map "\e*" 'gtags-pop-stack)
(define-key gtags-mode-map "\e." 'gtags-find-tag)
;
; Old key assignment.
;
; If you hope old style key assignment. Please include following code
; to your $HOME/.emacs:
;
; (setq gtags-mode-hook
;   '(lambda ()
;         (define-key gtags-mode-map "\eh" 'gtags-display-browser)
;         (define-key gtags-mode-map "\C-]" 'gtags-find-tag-from-here)
;         (define-key gtags-mode-map "\C-t" 'gtags-pop-stack)
;         (define-key gtags-mode-map "\el" 'gtags-find-file)
;         (define-key gtags-mode-map "\eg" 'gtags-find-with-grep)
;         (define-key gtags-mode-map "\eI" 'gtags-find-with-idutils)
;         (define-key gtags-mode-map "\es" 'gtags-find-symbol)
;         (define-key gtags-mode-map "\er" 'gtags-find-rtag)
;         (define-key gtags-mode-map "\et" 'gtags-find-tag)
;         (define-key gtags-mode-map "\ev" 'gtags-visit-rootdir)
; ))

わたしゃ,C-t をつぶされたくないので,コメントアウトされている
キーバインドを有効にはしていません。


でですね,gtags-mode で,gtags の有効,無効を切り替えられまっせ。
だもんで,global のソースを覗く時には,M-x gtags-mode で無効にして,
etags の方を使わないとね。GTAGS とかないからだべよ。
ちなみに,gtags-mode が有効の時に,M-x select-tags-table とか,
M-x visit-tags-table とかしても,gtags-mode が有効のときには,
その効果は現れないので,ワタシみたいにひつこく何度もしないように。

まとめ

ま,etags 使うなら,gtags 使っとけって感じもするけど,
gtags 使えないときには,やはり etags な気もするので。


こないだ書いた件で,global -ci ってできたらいいなと思って,
ソースを覗いてみたけど,btree の操作で候補を引っ張ってきている感があって,
太刀打ちできなさそうなので諦めムードが漂っています。
あとコメントが英語で書かれているわけですが,
ついついスペルミスを見つけてしまったりと,でも見ないふり見ないふり。
てか,global -ci の i オプションっていらなくね? とか立場をささっと変えてみたり。
そういうわけで,global の中の人,ありがとう!