=> トップ > 出版 > GNU GLOBAL ハンドブック > 新機能

新機能の御紹介


本書発行後にGLOBAL本体に追加された機能をご紹介します。

GLOBAL-6.5.7 (2017年5月15日リリース)の新機能

1. global の--nearness オプション

--nearness オプションの引数にファイルを指定できるようになりました。 ファイルを指定するとそのファイルが最優先で表示されます。

2. 新しい環境変数

環境変数 MAKEOBJDIR と MAKEOBJDIRPREFIX の別名として、GTAGSOBJDIR と GTAGSOBJDIRPREFIX が追加されました。今後は別名のほうが優先されます。 元の環境変数は BSD システムのビルドに影響するので、GLOBAL の設定には使いにくかったのを改善しました。

3. global の--print コマンド

--print コマンドが追加されました。-p コマンドとほぼ同じ機能ですが、コンフィグレーションファイルの パスを表示できる点が違います。引数と表示内容の対応は次のとおりです。

引数表示内容同じ意味のコマンド
dbpathデータベースディレクトリglobal -p
rootプロジェクトルートディレクトリglobal -pr
confコンフィグレーションファイルなし

4. コンフィグレーションファイルの検索順を変更

プロジェクトの objdir にもコンフィグレーションファイルを置けるようになりました。

  1. --gtagsconf file
  2. $GTAGSCONF
  3. [project root]/gtags.conf
  4. [project root]/[objdir]/gtags.conf <- New!
  5. $HOME/.globalrc
  6. /etc/gtags.conf
  7. [sysconfdir]/gtags.conf
例えば git を使用しているプロジェクトであれば、次のようにして.git ディレクトリ内に コンフィグレーションファイルを置けます。上で紹介した環境変数 GTAGSOBJDIR を使用します。
        $ export GTAGSOBJDIR=.git
        $ cp /usr/local/share/gtags/gtags.conf .git
        $ gtags
        $ global --print=conf
        [カレントディレクトリ]/.git/gtags.conf

GLOBAL-6.5.6 (2016年12月19日リリース)の新機能

1. htags-server

--retry オプションが追加されました。ポートが使用中の場合、自動的に後続の空いたポート番号を使用します。

次の例では、デフォルトの8000番がすでに使われているため、次の8001番を使用しています。

        $ htags-server --retry
        Warning: port 8000 already in use (skipped)
        Please access at http://127.0.0.1:8001
        Python2 http/cgi server
        Serving HTTP on 127.0.0.1 port 8001 ...

2. htags

--show-position オプション指定時に表示されるエディタ用引数を入力フォームの形式にしました。 文字列の選択とコピーがやりやすくなりました。

3. geco.rc

セレクタの候補として'fzf'を追加しました。

4. gtags

コンフィグレーション変数 'gtags_hook' が追加されました。 この変数に指定したコマンドは、gtags の処理に先立って実行されます。 'gtags.files' を動的に更新する際に利用できます。

次の例では、gtags の処理に先立ち、find コマンドで'gtags.files' を更新しています。

        :gtags_hook=find src lib -print >gtags.files:\
フックからは環境変数 'GTAGS_COMMANDLINE' を参照でき、gtags の実行時の引数が設定されています。

GLOBAL-6.5.5 (2016年9月21日リリース)

バグフィックスリリースです。新機能はありません。

GLOBAL-6.5.4 (2016年3月27日リリース)

バグフィックスリリースです。新機能はありません。

Universal Ctags プラグインパーサに重大な不具合があります。 このプラグインパーサを使用しない場合は、アップグレードの必要はありません。

GLOBAL-6.5.3 (2016年3月18日リリース)の新機能

1. gtags

Universal Ctags 用のプラグインパーサが追加されました。

2. gtags.conf

コンフィグレーション変数 ctagscom が追加されました。 ctags を使用するプラグインパーサのそれぞれについて、ctags のパスをいつでも変更できるようになりました。

GLOBAL-6.5.2 (2015年12月16日リリース)の新機能

1. global

近さソートオプション(-N, --nearness)が -P コマンド及び -g コマンドでも有効になりました。

2. gtags.vim

新たなカスタム変数 Gtags_Close_When_Single を1 にすると、検索結果が1件だった時に限り、quickfix が開かなくなります。

3. gtags.conf

コンフィグレーションファイルのシンタックスが強化されました。

変数参照

Bシェルスタイルの変数参照が可能になりました。例えば次の例で、b の値は'XYZ'になります。
	:a=Y:b=X${a}Z:

外部参照

別ファイルのレコードを取り込めるようになりました。例えば次の例では、ホームディレクトリにある'.globalrc' ファイルのデフォルトレコードを取り込んでいます。
	:tc=default@~/.globalrc:

GLOBAL-6.5.1 (2015年9月15日リリース)の新機能

1. gtags

環境変数 GTAGSFORCEENDBLOCK

この環境変数を設定すると、gtags 組み込み C および C++ パーサは、行頭の '}' によりすべてのブロックを終了したと見なします。

--skip-unreadable オプション

読み込み不可のファイルを読みとばします。オプションを指定しないときはコマンドの実行を終了します。

2. gozilla

互換性のない仕様変更

これまで gozilla は firefox を 「firefox -remote "openURL(<URL>)"」として起動していましたが、今後は一般的なブラウザと同じく 「firefox <URL>」として起動します。firefox バージョン39 より -remote オプションが廃止されたためです。

GLOBAL-6.5 (2015年6月10日リリース)の新機能

1. global

近さソート(nearness sort)機能が追加されました。 同名のメソッドが数多くあるとき、より関係の深いメソッドが先に表示される可能性が高まります。

--nearness[=start] オプション

タグ検索の出力結果を、位置的に start ディレクトリに近いものから表示します。 start のデフォルト値はカレントディレクトリです。

近さソートの結果は、以下の1 からn までをこの順番でつなげたものです。

1. start ディレクトリ下のみのタグ検索結果
2. 1. の親ディレクトリ下のみのタグ検索結果から1. を除いたもの
3. 2. の親ディレクトリ下のみのタグ検索結果から1. 2. を除いたもの
(... 繰り返す ...)
n. プロジェクトルートディレクトリ下のみのタグ検索結果から1. から n-1 を除いたもの

GLOBAL-6.4 (2015年3月24日リリース)の新機能

1. gtags

タグファイル

SQLite3 フォーマットが正式なフォーマットになりました。 次のようにして使用します。
インストール方法
$ ./configure --with-sqlite3
$ make
$ sudo make install
実行方法
$ gtags --sqlite3
global の使い方はまったく同じです。

--single-update オプションがファイルの削除に対応

ファイルを削除した場合も--single-update オプションが使えるようになりました。 これで追加、更新、削除のすべてに対応しました。 使用例を示します。
$ rm test.c
$ gtags --single-update=test.c

--explain オプション

gtags に--explain オプションが追加されました。 ファイルを読み飛ばした理由、ソースファイルに適用したパーサ種別などを表示します。

GLOBAL-6.3.3 (2014年11月26日リリース)の新機能

1. gtags

Pygments プラグインパーサ

Python 3 に対応しました。

2. gozilla

OSX のデフォルトブラウザを起動できるようになりました。 環境変数 BROWSER に 'osx-default' と設定してください。

$ htags --suggest --map-file
$ export BROWSER=osx-default
$ gozilla +120 main.c   # main.c の 120行目を表示する
$ gozilla -d main       # main の定義を表示する

GLOBAL-6.3.2 (2014年9月4日リリース)の新機能

1. gtags

Pygments プラグインパーサ

Yoshitaro MAKISE 様の Pygments プラグインパーサを取り込ませていただきました。 これにより、gtags で処理できる言語が飛躍的に増え、さらに Exuberant Ctags を併用することによって、25 の言語で定義/参照の両方を取り扱うことができるようになりました。

[定義/参照を扱える 25 の言語]
Awk, Dos batch, COBOL, C, C++, C#, Erlang, Fortran, Java, JavaScript, Lisp, Lua, Pascal, Perl, PHP, Python, Ruby, Matlab, OCaml, Scheme, Tcl, TeX, Verilog, VHDL, Vim

用意するもの

以下のソフトウエアが必要です。 まだなければインストールしてください。
  • Python 2.6 以降(ただし 3.x はサポート外です)
    [追記] GLOBAL-6.3.3 からは3.X もサポートされました
  • Pygments python package
  • Exuberant Ctags 5.5 以降
Python と ctags がコマンド名だけで起動できるようにします。 Bash をお使いであれば、次のようにして確認できます。
$ type python
python is /usr/bin/python
$ type ctags
ctags is /usr/local/bin/ctags

GLOBAL のビルド

GLOBALをビルドおよびインストールしなおします。 Python と ctags のありかは自動認識します。
$ ./configure
$ make
$ sudo make install

設定方法

Pygments プラグインパーサの定義は、標準の gtags.conf の中にあります。 次のようにして利用します。
$ export GTAGSCONF=/usr/local/share/gtags/gtags.conf
$ export GTAGSLABEL=pygments
GLOBAL を /usr/local (デフォルト)以外にインストールした場合は、/usr/local の部分を 変更してください。

使用方法

いつもと同じにgtags を実行します。
$ gtags
どのプラグインパーサが使われているかを確認するには、デバッグオプションを 使います。(追記: GLOBAL-6.4 以降では --explain オプションをお使いください)
$ gtags --debug
(GLOBAL-6.4 以降)
$ gtags --explain
プラグインパーサの指定方法の詳細については、「第18章 Exuberant Ctags」 および「第19章 パーサを書こう」を参照してください。

GLOBAL-6.3.1 (2014年8月11日リリース)の新機能

1. gtags.vim

Gtagsa コマンド

Gtagsa コマンドはGtags コマンドとほとんど同じですが、タグリストを初期化せず、 既存のタグリストに結果を追加する点が異なります。

例えば、「Gtags -d main」と「Gtags -r main」を連結したい場合、次のようにします。

:Gtags -d main
:Gtagsa -r main

2. geco.rc (新規)

Geco は Emacs の helm-gtags や auto-complete-gtags のbash 版です。 コマンドラインから手軽にシンボルの検索、絞り込み、エディタの起動が行えます。

用意するもの

以下のソフトウエアが必要です。 まだなければインストールしてください。
  • bash
  • percol (またはpeco)
  • less

使い方

geco はbash(1)のコマンドラインで使用します。 オプションはglobal(1)とほぼ同じです。 次のようにするとヘルプが表示できます。

$ geco --help
なお引き数の入力には、入力補完機能が利用できます。 先頭の1,2文字を入力して[TAB]キーを押してみてください。 ここでは「mai[TAB]」を入力していますが、プロジェクトによってもちろん反応は異なります。
$ geco ma[TAB]
       ↓
$ gego main _
       ↓
$ gego main [ENTER]

シンボルの後に[ENTER]キーを入力すると、次のような一覧画面になります。 この状態で一覧からタグを選択できますが、 数が多い場合は絞り込みを行います。

QUERY> _
main               32 boot/arm/at91/boot0iic/main.c main(void)
main               37 boot/i386/at91/boot0spi/main.c main(void)
main              153 boot/sparc64/at91/boot2/boot2.c main(void)
main               42 boot/ia64/at91/bootiic/main.c main(void)
...

例えば「i3」を入力すると、「i3」を含む行だけが抽出されて他は見えなくなります。 helm や auto-complete と同じ動作です。

QUERY> _
main               37 boot/i386/at91/boot0spi/main.c main(void)
...
行を選択して[ENTER]キーを入力すると、less(1)が起動され、 タグ位置が表示されます。
main(void)
{
        int len, i, j, off, sec;
        char *addr = (char *)SDRAM_BASE + (1 << 20); /* download at + 1MB */
        char *addr2 = (char *)SDRAM_BASE + (2 << 20); /* readback to + 2MB */
        char *addr3 = (char *)SDRAM_BASE + (3 << 20); /* extra copy at + 3MB */
...
[boot/i386/at91/boot0spi/main.c]
この状態で'v'を入力すると、エディタが起動され、less と同じ画面を表示します。

less の画面内で「:t(コロンと't'」を入力すると次のようなプロンプトが表示されます。 ここで検索したいシンボルを指定します。 シンボルの前には geco と同じオプションを指定できます。

tag: _
例えばfunc の参照部分を表示するには、 次のようにします。
tag: -r func [ENTER]

GLOBAL-6.3 (2014年6月9日リリース)の新機能

1. global

3つの新規オプション

次のオプションが追加されました。デフォルトを明示的に指定するオプションです。

-F (--first-match)
GTAGSLIBPATH による検索で、最初にタグが見つかったとき、それ以降のタグファイルの 検索を行わない
-M (--match-case)
大文字小文字を区別する
-E (--extended-regexp)
拡張正規表現を使用する

新規環境変数

環境変数 GREP_COLORS がサポートされました。 前バージョンでの取りこぼしです。 これにより、grep(1) コマンドの環境変数で global(1) の表示色のコントロールができます。

2. htags-server

Htags 専用の軽量Web サーバです。 Apache のような複雑なセットアップが不要で、CGIなども機能します。

htags 実行後に同じディレクトリで実行します。

$ htags --suggest2
$ htags-server
Python2 http/cgi server
Serving HTTP on 127.0.0.1 port 8000 ...

デフォルトでlocalhost の8000 番ポートを使用しますので、 次のURLを参照してください。

[デフォルト時のURL]
http://localhost:8000/
複数のプロジェクトを扱うときは、オプションでポートを変更します。

3. 環境設定

環境設定に関して、3つの機能が追加されました。 これらを用いて、プロジェクト毎に異なる環境を構築できます。

プロジェクトベース gtags.conf

プロジェクトルートディレクトリに gtags.conf ファイルがあると、 $HOME/.globalrc ファイルより優先してコンフィグレーションファイルと 見なされます。これにより、プロジェクト毎に設定を変えられます。 Leo Liu 様のアイディアです。

デフォルトオプション GTAGS_OPTIONS, HTAGS_OPTIONS

環境変数 GTAGS_OPTIONS, HTAGS_OPTIONS によって、gtags, htags のデフォルトオプションを指定できます。global にはデフォルトオプション はありません。

環境変数と同名のコンフィグレーション変数

環境変数と同名のコンフィグレーション変数が追加されました。 そのような変数に値を指定すると、gtags, htags, global の実行中、 同名の環境変数が設定されます。 指定可能な環境変数についてはオンラインマニュアルを参照してください。

GLOBAL-6.2.12 (2014年3月31日リリース)の新機能

1. global

--color オプション

マッチした部分を強調表示します。 grep (1) の--color オプションのサブセットです。 環境変数 GREP_COLOR をサポートします。 --colour オプションと 環境変数 GREP_COLORS はサポートしておりません。 (追記: GREP_COLORS は GLOBAL-6.3 でサポートしました)

指定は以下のアトリビュートの組み合わせです。セミコロンで区切って指定します。 (これらはANSIの規格に定められています)

  
0       Reset all attributes 
1       Bright 
2       Dim  
4       Underscore       
5       Blink
7       Reverse
8       Hidden 

        Foreground Colours 
30      Black
31      Red  
32      Green
33      Yellow 
34      Blue 
35      Magenta
36      Cyan 
37      White

        Background Colours 
40      Black
41      Red  
42      Green
43      Yellow
44      Blue
45      Magenta
46      Cyan
47      White

例えば、文字を Red (31)、背景をGreen (42)とし、文字に下線 (4) をつけるには 環境変数 GREP_COLOR を次のように設定します。

$ export GREP_COLOR='31;42;4'
$ global --color -x main
main              246 fs/udf/osta.c    main()
...

GLOBAL-6.2.11 (2014年3月12日リリース)の新機能

GLOBAL-6.2.11 には重大な障害がありますので、修正版の GLOBAL-6.2.12をご利用ください。

1. global

-S (--scope) <ディレクトリ> オプション

指定したディレクトリ以下のみを検索対象にします。 -l (--local) オプションと機能的には同じですが、目的のディレクトリに移動する 必要がなくなりました。

2. gtags

スキップリスト中のワイルドカード

コンフィグレーションファイルのskip 変数中に、 ワイルドカード(*, ?, [...], [!...], [^...]) が指定できるようになりました。 デフォルトのコンフィグレーションファイルには、以下の指定が追加されました。
[gtags.conf]
*.orig,*.rej,*.bak,*~,#*#,*.swp,*.tmp,*_flymake.*,*_flymake

-I (--idutils) オプションの動作の変更

-I (--idutils) オプション使用時にも、ファイルリスト(--file または gtags.files) を参照するようになりました。 今までは idutils の処理対象は、idutils の機能を使って指定するしかありませんでした。 代わりに idutils-4.5 以降が必須となりました。

GLOBAL-6.2.10 (2014年1月16日リリース)の新機能

GLOBAL-6.2.10 には重大な障害がありますので、修正版の GLOBAL-6.2.12をご利用ください。

1. gtags.el

カスタム変数 gtags-find-all-text-files が追加されました。

カスタム変数 gtags-find-all-text-files

gtags-find-all-text-files を t に設定すると、 ソースファイルだけでなく、テキストファイルをも処理の対象にします。 デフォルトは nil です。
[$HOME/.emacs]
(setq gtags-find-all-text-files t)
次の二つのコマンドの動作に影響します。
gtags-find-file
デフォルトではソースファイルのパスだけを検索しますが、 gtags-find-all-text-files を t に設定すると、 テキストファイルのパスも検索対象となります。
gtags-completing-files
デフォルトではソースファイルのパスだけが補完候補となりますが、 gtags-find-all-text-files を t に設定すると、 テキストファイルのパスも補完候補となります。

2. global コマンド

大文字小文字を区別しない検索の最適化

-i オプションを使った次のような検索が以前よりも高速化しました。
$ global -xi strlen
$ global -xi '^str'

GLOBAL-6.2.8 (2013年2月28日リリース)の新機能

1. global コマンド

--path-style=<スタイル> オプション

出力するタグのファイルのパス表記の仕方を指定します。 以下の<スタイル>が指定できます。
relative
相対パス(global のデフォルトと同じ)
absolute
絶対パス(-a (--absolute) オプションと同じ)
shorter
相対パスと絶対パスのうち、短い方(タグ毎に判断します)
abslib
現プロジェクトは相対パス、ライブラリプロジェクトは絶対パス (ライブラリプロジェクトは、GTAGSLIBPATH で参照されるプロジェクトです)
through
タグファイル中の生のパス(プロジェクトルートディレクトリからの相対パス)
--path-style オプションの指定は -a (--absolute) オプションよりも優先されます。

2. htags コマンド

python ビルドインWEBサーバのサポート(Python 2.4以上が必要)

Python のビルドインWEBサーバをサポートします。 Apache などの設定の難しいWEBサーバの代わりに、手軽に利用できます。 CGIやAJAXが機能します。
制限事項
--system-cgi オプションは機能しません。

使用方法
htags が生成するHTMLディレクトリで、次のように起動します。
(Python 2.X の場合)
$ htags --suggest2			# ハイパーテキストを生成
$ cd HTML				# HTMLディレクトリに移動
$ python -m CGIHTTPServer               # サーバを起動
Serving HTTP on 0.0.0.0 port 8000 ...
_
(Python 3.X の場合)
$ htags --suggest2			# ハイパーテキストを生成
$ cd HTML				# HTMLディレクトリに移動
$ python3 -m http.server --cgi          # サーバを起動
Serving HTTP on 0.0.0.0 port 8000 ...
_

デフォルトで8000番のポートを使用します。 参照の際には、ホスト名の後に次のようにポート番号を指定します。

$ firefox http://localhost:8000/
サーバを停止するには、Ctrl-C を入力します。

Python のビルドインWEBサーバに「サポート」が必要な理由は、直りそうにない次の二つのバグが あるためです。これに対する回避策を htags に施しました。

  • Location ヘッダをサポートしない
  • CGIプログラムを cgi-bin ディレクトリで実行しない
Ruby(WEBrick)によるWEBサーバは、6.2.7以前のGLOBALでも使えます。起動方法がやや面倒です。
(ruby WEBrick によるWEBサーバ)
$ htags --suggest2
$ cd HTML
$ ruby -rwebrick -e 'WEBrick::HTTPServer.new({:DocumentRoot => "./", :Port
=> 8000}).start'
こちらのWEBサーバはCtrl-Cでは停止しないようです。kill -9 <プロセスID> で終了させてください。

追記: GLOBAL-6.3 でhtags-server が追加されました。上のコマンドラインを自動的に実行します。

GLOBAL-6.2.7 (2012年12月22日リリース)の新機能

GLOBAL-6.2.6 には重大な障害がありますので、修正版の GLOBAL-6.2.7をご利用ください。

1. global コマンド

リテラル検索の高速化

リテラル検索機能(-g --literal)が高速化されました。 なお英数字とブランクのみからなるパターンを検索する際は、 -g コマンドだけで自動的にリテラルとして検索を行います。

2. gtags.vim

カスタム変数 Gtags_No_Auto_Jump が追加されました。

カスタム変数 Gtags_No_Auto_Jump

Gtags_No_Auto_Jump を1に設定すると、 タグリスト生成時に自動的に先頭タグにジャンプするのを抑止します。
[$HOME/.vimrc]
let Gtags_No_Auto_Jump = 1
デフォルトではタグリスト生成時、自動的に先頭タグにジャンプします。

3. ctags 参照タグ生成機能

Exuberant Ctagsで GLOBALの参照タグを生成する機構が利用可能になりました。

今までもExuberant CtagsをGLOBALのパーサとして利用(本書第18章)することはできましたが、 参照タグの生成はできませんでした。 本機能を利用することで、参照タグを生成するctags パーサを記述でき、ctags とGLOBALの 共通パーサを書くことができます。

ctags-5.8.patch

Exuberant Ctags バージョン5.8 に、 GLOBALの参照タグを生成する関数 makeSimpleReferenceTag()を追加します。 makeSimpleTag()の代わりに使用すると参照タグになります。

libexuberant-ctags.la

上のパッチを当てたExuberant Ctags の出力をGLOBALに取り込みます。

GLOBAL-6.2.4 (2012年5月30日リリース)の新機能

GLOBAL-6.2.3 には重大な障害がありますので、修正版の GLOBAL-6.2.4をご利用ください。

1. gtags.el

カスタム変数 gtags-auto-update と gtags-ignore-case が追加されました。

カスタム変数 gtags-auto-update

gtags-auto-update を t に設定すると、ソースファイルをセーブする度にタグファイルを 自動更新します。更新は最適化された方法(単一ファイル限定の差分更新)で高速に行われます。 自動更新が行われるのは gtagsモード の時だけです。 単一ファイル限定の差分更新については、「20.6.4 使用上の留意点」をご理解の上でご使用ください。
[$HOME/.emacs]
(setq gtags-auto-update t)	;ファイルセーブ時にタグファイルを更新する

カスタム変数 gtags-ignore-case

gtags-ignore-case を t に設定すると、GLOBALの検索コマンドにおいて大文字小文字を区別しません。 nil に設定すると大文字小文字を区別します。 デフォルトもしくは follow-case-fold-search に設定すると、 Emacs の検索コマンドと同様に、バッファの case-fold-search 変数の値に従います。
[$HOME/.emacs]
(setq gtags-ignore-case t)	;大文字小文字 t:区別しない、nil:区別する

2. gtags.vim

カスタム変数 Gtags_Auto_Update が追加されました。

カスタム変数 Gtags_Auto_Update

Gtags_Auto_Update を 1 に設定すると、ソースファイルをセーブする度にタグファイルを 自動更新します。更新は最適化された方法(単一ファイル限定の差分更新)で高速に行われます。 単一ファイル限定の差分更新については、「20.6.4 使用上の留意点」をご理解の上でご使用ください。
[$HOME/.vimrc]
let Gtags_Auto_Update = 1

3. gtags コマンド

単一ファイル限定の差分更新を実行する --single-update オプションが、 ファイルの更新だけでなく、ファイルの追加についても機能するようになりました。 旧バージョンでは、--single-updateオプションに新規のファイルを指定すると、ファイルの 指定が無視され、通常の差分更新が行われましたが、 新バージョンでは単一ファイル限定の差分更新が行われます。

4. global コマンド

-u コマンドに --single-update オプションが追加されました。 フォーマットは gtags と同じで、globalで指定したファイル名が絶対パスに変換され、 gtagsの--single-updateオプションの引数として渡されます。