#author("2023-12-07T00:54:04+09:00","","")
#author("2023-12-07T00:54:19+09:00","","")
#topicpath

///////////////////////////////////////////////////////////////////////////////
* 目次 [#m3be6eaf]
#contents();

////////////////////////////////////////////////////////////////////////////////
* gtags / global [#uc7a788c]
- タグシステムの一つ
- debian では、 global パッケージに入っている。
- 敢えて絞った結果なのかもしれないが、 emacs 用の gtags.el で用意されている機能は、 [[cscope>Prog/TagSystem/cscope]], [[rtags>Prog/TagSystem/rtags]] のそれと比べて随分少ない。

//==============================================================================
** tag の生成 [#he22dbd6]
 $ gtags [options] [path]
 $ gtags -f <files>
 $ gtags -v
- gtags には、etags と違って append mode が存在しないため、xargs でマルチスレッド化して実行するのは不可かもしれない。
- -f <file> を指定しない場合、gtags はカレント以下のディレクトリを走査してタグ情報を生成する。
- tag の生成処理が終わると、実行したディレクトリ配下に、下記4つのファイルが作られる:
 GPATH GTAGS GRTAGS

|~file  |~description |
|GTAGS  |シンボル定義のデータベース |
|GRTAGS |シンボル参照のデータベース |
|GPATH  |ソースファイルへのパスのデータベース |


//==============================================================================
** emacs の設定 [#t7049b32]
- gtags.el を入手する
-- ディストリビューションによっては、下記のようなパスにインストールされる場合もある
 /usr/share/emacs/site-lisp/global/gtags.el
-- もしディストリビューションで用意されていない場合は、手動で取得し、library-path の通っている場所に配置する。
-- 大文字・小文字を区別するように設定する~
→ [[検索時に大文字・小文字を区別するかしないかの設定>Editor/emacs#case-fold-search]]

- 設定
 (when (locate-library "gtags")
 
   ; gtags.el で定義されているキーバインドを有効にする。
   ; gtags.el を読み込む直前に設定する必要がある。
   ; 但し、これを設定すると "C-c r" が gtags で喰われてしまう為、rtags との併用が出来なくなるので注意。
   (setq gtags-suggested-key-mapping t)
 
   (require 'gtags)
 
   (autoload 'gtags-mode "gtags" "" t)
   (setq gtags-mode-hook
         '(lambda ()
            ; ネット上でよく見かけるキーバインド(個人的には非推奨)
            (local-set-key "\C-v" 'gtags-visit-rootdir)
            (local-set-key "\M-t" 'gtags-find-tag)    ;関数の定義元へ
            (local-set-key "\M-r" 'gtags-find-rtag)   ;関数の参照先へ
            (local-set-key "\M-s" 'gtags-find-symbol) ;変数の定義元/参照先へ
            (local-set-key "\M-]" 'gtags-find-tag-from-here);現在のカーソルがある語をtagとして検索
            (local-set-key "\M-T" 'gtags-find-pattern);テキストを検索
            (local-set-key "\M-f" 'gtags-find-file)   ;ファイルを検索
            (local-set-key "\C-t" 'gtags-pop-stack)   ;一つ前の検索結果に戻る
            ))
   )


//------------------------------------------------------------------------------
** gtags.el の標準キーバインド [#hf536c9d]

|~binding  |~function                   |~description |~remark |
|C-t       |gtags-pop-stack             | | |
|C-]       |gtags-find-tag-from-here    | | |
|<mouse-2> |gtags-find-tag-by-event     | | |
|<mouse-3> |gtags-pop-stack             | | |
|M-*       |gtags-pop-stack             | | |
|M-.       |gtags-find-tag              | | |
|C-c I     |gtags-find-with-idutils     | | |
|C-c P     |gtags-find-file             | | |
|C-c d     |gtags-find-tag              | | |
|C-c f     |gtags-parse-file            | | |
|C-c g     |gtags-find-with-grep        | | |
|C-c h     |gtags-display-browser       | | |
|C-c r     |gtags-find-rtag             | | |
|C-c s     |gtags-find-symbol           | | |
|C-c t     |gtags-find-tag              | | |
|C-c v     |gtags-visit-rootdir         | | |
|C-x 4 .   |gtags-find-tag-other-window | | |

//------------------------------------------------------------------------------
** [[rtags.el>Prog/TagSystem/rtags#rtags-emacs]] との併用 [#q44c00fb]
- gtags.el で定義されているキーバインドを有効にすると、rtags.el で定義されたキーバインドのプレフィックスである "C-c r" が gtags.el に喰われてしまって使えない。これでは rtags.el の機能を使いこなせないため、 gtags.el で定義されている "C-c r" を無効にする:

 index da38467..7efea77 100644
 --- a/site-lisp/gtags.d/gtags.el
 +++ b/site-lisp/gtags.d/gtags.el
 @@ -215,7 +215,7 @@
        (define-key gtags-mode-map (concat gtags-prefix-key "g") 'gtags-find-with-grep)
        (define-key gtags-mode-map (concat gtags-prefix-key "I") 'gtags-find-with-idutils)
        (define-key gtags-mode-map (concat gtags-prefix-key "s") 'gtags-find-symbol)
 -      (define-key gtags-mode-map (concat gtags-prefix-key "r") 'gtags-find-rtag)
 +      ; (define-key gtags-mode-map (concat gtags-prefix-key "r") 'gtags-find-rtag)
        (define-key gtags-mode-map (concat gtags-prefix-key "t") 'gtags-find-tag)
        (define-key gtags-mode-map (concat gtags-prefix-key "d") 'gtags-find-tag)
        (define-key gtags-mode-map (concat gtags-prefix-key "v") 'gtags-visit-rootdir)



//==============================================================================
** vi での設定 [#acde7a15]
+ vimのプラグインを ~/.vim/plugin にコピー
 $ mkdir ${HOME}/.vim/plugin
 $ cp /usr/share/doc/global/examples/gtags.vim.gz ${HOME}/.vim/plugin
 $ cd ${HOME}/.vim/plugin
 $ gunzip gtags.vim.gz
+ ~/.vimrc にgtagsの設定を追加
 map <C-h> :Gtags -f %<CR>
 map <C-j> :GtagsCursor<CR>
 map <C-n> :cn<CR>
 map <C-p> :cp<CR>

//------------------------------------------------------------------------------
*** 操作 [#s7eecedc]
|~binding |~ description |
|C-h      |そのソースの関数を表示 |
|C-n      |リストのカーソルを下に移動 |
|C-p      |リストのカーソルを上に移動 |
|C-j      |現在の関数の中にジャンプ |
|C-o      |ジャンプする前の位置に戻る |

//==============================================================================
** 参考リンク [#kf18ab46]
- [[GNU GLOBAL(gtags)>http://cha.la.coocan.jp/doc/gnu_global.html]]
- [[新機能の御紹介>http://www.tamacom.com/handbook/new.html]]
- [[[Linux][開発] GNU GLOBALとvimで快適な開発環境を手に入れる>https://qiita.com/suzutsuki0220/items/1e755fd98e5b12af3e2d]]

トップ   編集 差分 履歴 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS