読者です 読者をやめる 読者になる 読者になる

Greple モジュール対応

関連

モジュール

Greple は、~/.greplerc にオプションやプログラムを書くことができて、これはこれで便利なのだが、量が多くなってくるとごちゃごちゃしてわかりにくくなるのが問題だった。 また、使わない機能を毎回読み込むのも無駄なので、以前からモジュールを定義するようにしたいと思っていた。 やっとそれが実装できたのでリリースすることにする。

以下に Perlスクリプトを検索するためのモジュールを付ける。 デモ用なので、あまり凝ったことはしていなくて、コメント、POD、それ以外というセクションを指定してパターンを探すことができる。 組み合わせることも可能で、--allsection というオプションを使うと、すべてのセクションが指定される。 それではすべてのパターンが表示されてしまって意味がないようだが、マルチカラー環境だとそれぞれが違う色で表示されるのだ。

この程度の機能はわざわざプログラムを作らなくてもオプションだけで実装できる。 オプションの指定は、モジュールの __DATA__ 以降に書くことができる。 形式は .greplerc と同じ。 参考のために、プログラム版とオプション版の両方を記述してあるが、オプションのみで実装するなら package 宣言だけあれば十分だ。

Greple module to handle perl script.

使う時には、次のように -M オプションでモジュールを指定する。 このオプションは特別で、必ず先頭で指定しなければならない。 複数指定することもできる。

greple -Mperl --code default greple
greple -Mperl --colorful --allsection default greple

実行結果はこんな感じ。

f:id:uta46:20140111102649p:plain

マルチカラーは結構便利で、~/.greplerc に次のような行を入れておくと常に有効になる。 ただ、OS X のターミナルは比較的目に優しい色で表示してくれるのでいいのだが、原色で表示されるエミュレータなどを使っている場合は、何か方法を考えた方がいいだろう。

option default --colorful

デフォルトオプションは、もちろんモジュールでも定義することができる。 --chdir--glob と組み合わせると、ファイルを指定しないで使用することもできる。 昔は、RFC のインデックスを検索するのにこの機能を使っていたが、最近は読まなくなっちゃったし、自分しか持っていないデータでなければ検索エンジンを使った方が早い。

--inside, --outside, --include, --exclude

--inside/outside オプションの仕様が変更されている。 上の説明からもわかると思うが、複数の領域を指定した場合、いずれかの領域に含まれるマッチがすべて選択される。

以前はすべての条件を満たすマッチが選択されていたが、これは --include/exclude オプションで実装するようにした。 単独で使うのであれば、どちらでも同じである。

--inside/outside オプションで必要なマッチを選択し、--include/exclude オプションで不必要な部分を削除するという使い方を想定している。

ところで

--include/exclude は、grep との互換性のために使わずにおいたものだが、わかりやすいので使ってしまった。 他にもっといい考えがあれば、早めに教えて頂ければ今からでも変えちゃうかもしれない。 ちなみに mg再帰的検索をサポートしていたが、greple では廃止してしまった。 実際に役立ったことはほとんどなかったからだ。 また greple は、テキスト検索に特化するように変更したので、いろいろなファイルが混在した環境では Encode モジュールが文句を言ったりしてイマイチ使いにくい。 どうしてもやりたいという方は、find の出力をパイプで渡して --readlist で読み込んでください。