まずは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