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

App::triggerというモジュールを書いています。

perl

Mac - iTerm2で特定文字列をハイライトやGrowl通知する - Qiita


を汎用的にできないかなって思って書いてみました。
まだまだ書き始めなので、気になる部分がありますが、とりあえず紹介。

使い方

モジュールをインストールすると ptriggerというコマンドが
インストールされます。ptriggerは設定ファイルを元に、
色付け、アクションを定義します。設定ファイルはコマンドライン
オプションから指定できます。指定しない場合はホームディレクトリの
.ptriggerファイルを読み込みます。


使い方は以下のようになります。

  % ptrigger --config=myptrigger filename

filenameを省略した場合は標準入力から読み込みます。


"--tail"オプションで tail -fのように振る舞います。
ログを見るのを想定しているので、以下のように使うことになるでしょうか。

  % ptrigger --config=myptrigger --tail myapp.log # 稼働中の Webアプリのログ等

設定ファイルの例

設定ファイルは Perlスクリプトです。特定の形式に従った HashRefを
返すように記述します。

以下にサンプルを示します。

use strict;
use warnings;

use utf8;

+{
    Chrome => {
        regexp => qr/\bchrome\b/i,
        color  => ['blue', 'bold'],
        action => "notify-send -t 5000 Chrome くろーむ",
    },

    Firefox => {
        regexp => qr/\bFirefox\b/i,
        color  => ['red', 'bold'],
        action => sub {
            exec qw/notify-send -t 5000 緊急事態/;
        },
    },
};

"regexp"でマッチする文字列を指定します。これがないとエラーになります。


色付けをしたい場合は "color"パラメータを指定します。このパラメータは
Term::ANSIColor::color関数に渡されます。


"action"はマッチする文字列が見つかったときに実行するアクションを指定
します。サブルーチンリファレンスであればそれを実行し、文字列だったら
コマンドとして、それを execします。actionパラメータは別プロセスとして
実行するので、ブロックする処理をしても出力が停止するということは
ありません。

実行例

上記の設定ファイルを使って実行した例です。ファイル名を指定せずに
起動し、標準入力から文字を入力しています。色がついているのと、
アクションで指定した、notify-sendが実行されていることがわかります。

おわりに

まだ開発中で、なんとなくの理解で書いたところが多数あるので、
改良していきたいと思います。iterm2だけでなくどんな環境でも
使えるようなものにしたいですね。