綾小路龍之介の素人思考

[weechat] scriptパッケージの導入とテスト

weechatというCUIで動くチャットクライアントを一月程度動かしてみて、結構効率よく動いている気がした。というわけで、irssiからの乗換えを考えてスクリプトを使ってみよう。

まずはaptitudeで確認、インストール。

# aptitude search weechat
i   weechat         - Fast, light and extensible IRC client
i A weechat-common  - Common files for WeeChat
i A weechat-curses  - Fast, light and extensible IRC client
i A weechat-plugins - Plugins for WeeChat
p   weechat-scripts - script collection for the WeeChat IRC client
# aptitude install weechat-scripts

weechat自体はaptitudeから導入したものを使ってはいないけど、スクリプトパッケージはaptitudeが用意してくれるものを使う。といっても、導入したけれど使ってないな。。。スクリプトの基本はscripting guideのに載っているのでこれを踏襲する。まずは、Registerの章を参照。

All WeeChat scripts must "register" themselves to WeeChat, and this must be first WeeChat function called in script.

「全てのWeeChatのスクリプトは、必ず自分自身ををWeeChatに登録しなければいけない。そして、この登録作業はスクリプトの最初で行わねばならない。」ということなので、その次の章、Script Exampleの章に従って以下の内容を書き込む。

weechat::register("test_perl", "FlashCode", "1.0", "GPL3", "Test script", "", "");

Script APIの章から適当なhook関数を選ぶ。全ての表示をまとめて表示するために、今回はhook_printを選んだ。この章の最初に書かれているように、WeeChat Plugin API Referenceを参照して、引数と使い方を確認しておく。例として挙げられているのはPythonだけど、Perlでは下のようにすればいいと思う。こうすることで、何かを表示した場合に、my_print_cbコールバック関数が呼ばれることになる。

weechat::hook_print( "", "", "", 1, "my_print_cb", "" );

最後にmy_print_cb関数の定義。WeeChat Scripting Guideを参照すると、

Almost all WeeChat callbacks must return WEECHAT_RC_OK or WEECHAT_RC_ERROR (exception is modifier callback, which returns a string).

「ほとんど全てのWeechatコールバックはWEECHAT_RC_OK又はWEECHAT_RC_ERRORのどちらかを返さなければならない。例外は文字列を返すmodifier callbackである。」ということなので、WEECHAT_RC_OKを返す。Dumperを使っているので、Data::Dumperをインクルードしておく。

use Data::Dumper;
sub my_print_cb {
        foreach (@_) {
                weechat::print("", Dumper $_);
        }
        weechat::print("", "");
        return weechat::WEECHAT_RC_OK;
}

できたスクリプトは以下のようになる。test.plというファイル名で~/.weechat/perl/の下に保存しておく。

use strict;
use warnings;
use Data::Dumper;

weechat::register("test", "FlashCode", "1.0", "GPL3", "Test script", "", "");
weechat::hook_print( "", "", "", 1, "my_print_cb", "" );

sub my_print_cb {
        foreach (@_) {
                weechat::print("", Dumper $_);
        }
        weechat::print("", "");
        return weechat::WEECHAT_RC_OK;
}

これをWeeChatから呼び出す。WeeChat Scripting Guide の Load Scriptの章を参照して、以下のように呼び出す。

/perl load perl/test.pl

リファレンス

  1. WeeChat, the extensible chat client
  2. Debian -- lenny の weechat-scripts パッケージに関する詳細
  3. WeeChat Scripting Guide
  4. WeeChat Plugin API Reference

ソーシャルブックマーク

  1. はてなブックマーク
  2. Google Bookmarks
  3. del.icio.us

ChangeLog

  1. Posted: 2009-04-24T20:39:44+09:00
  2. Modified: 2009-04-24T20:39:44+09:00
  3. Generated: 2017-08-21T23:09:18+09:00