App::trigger進捗

App::triggerというモジュールを書いています。 - Life is very short


数カ月前に書いて放置していたものを、ちゃんとしたものにしようと
いうことで最近また書いています。

目的

iTermのトリガ機能を実現し、以下のようなことをお手軽に実現する。

変更点

コマンドラインオプションの対応

'-m', '--match'オプションで "パターン:色属性:アクション(コマンド)"という形で
指定します。HTTPのステータスを色付けだけする場合は以下のような具合です。

% ptrigger -m '\b2\d{2}\b:cyan,bold' \
           -m '\b3\d{2}\b:green,bold' \
           -m '\b4\d{2}\b:red,bold,on_yellow,underline' \
           -m '\b5\d{2}\b:red,bold' < sample.log
イメージ

注意

コマンドラインオプションで指定する場合、パターンに ":"を直接
含めることができません。8進数表記(072)、16進数表記(0x3A)で
指定する必要があります。ASCIIコードについては 'man ascii'を
参照してください


trigger(action)関数への引数渡しの対応

第一引数にパターンにマッチした文字列、第二引数以降にパターンの中で
キャプチャされた文字列が trigger関数に渡されるようになりました。
コンパイルの警告メッセージを色付け+下線を引きつつ、それをポップアップ
するという例を以下に示します。

コンフィグファイル
+{
    warning => {
        pattern => qr/warning: \s* (.+)$/x,
        color   => [qw/magenta underline/],
        action  => sub {
            my ($matched, $warn_str) = @_;
            my @cmd = (qw/notify-send -t 5000/, "Compiler Warning", $warn_str);
            exec @cmd or die "Can't exec: $!";
        },
    },
};
実行
  % LANG=C gcc test.c 2>&1 | ptrigger -c trigger2.conf
イメージ

おわりに

近いうちに PrePANに出して、CPANに上げれたらいいかなと思います。
それまでもう少し問題がないか確認します。