コンソール上で動くCUIなIRCクライアントを探していたのですが, Irssiを紹介されたので使ってみます.
FreeBSDにIrssiをインストールしてみました.
portsからインストールしました.楽.
/usr/ports/irc/irssi等でmake installしてください.
ホームディレクトリ下の.irssi/configで設定します. 設定はサンプルを見ながらやれば問題無いと思います.
servers,chatnets,channelsにエントリを追加します. あとは,一番したのsettingsを書き換えればOkです.
# ~/.irssi/config
servers = (
{ address = "irc.himitsukichi.com"; chatnet = "H"; port = "6660"; },
);
chatnets = {
H = { type = "IRC"; };
};
channels = (
{ name = "#channel"; chatnet = "H"; autojoin = "Yes"; },
);
# 略
settings = {
core = {
real_name = "Kousuke Kawahira";
user_name = "kawa";
nick = "ksk";
};
"fe-text" = { term_force_colors = "yes"; };
};
「/(スラッシュ)」から始まる文字列はコマンドとして扱われます. 接続するには,connectコマンドを使います.
チャンネルのautojoinをNoにした場合は,joinコマンドでチャンネルに参加.
/connect H /join #channel
上記の設定なら,irc.himitsukichi.comにつながります.
exitコマンドで終了します. 複数のチャンネルに参加している場合は,windowコマンドで切り替えられます. 詳しくはIrssiのサイトを参照.
Irssiは文字コードの変換をしてくれないので,チャットの文字コードと ローカルの文字コードが違うと文字が化けてしまいます.
「irssi | nkf -uJw」とかで切り抜けようとしましたが,これはだめでした.
とりあえず今回はプラグインを書いて対処.
プラグインは ~/.irssi/scripts に置くと,scriptコマンドでロードできます. 「/script load conv.pl」と入力して読み込んでください.
/.irssi/scripts/autorun に入れておけば,起動時に自動的にロードされるので ここに入れておきましょう.
見ればわかりますが,単純なperlスクリプトです. 好きに書き換えて使ってください. ライセンスはNYSLとしておきます.
…トピックの扱いが無理やりなのは手抜きです.
conv.pl
use Irssi;
use Encode;
our $VERSION = '0.02';
our %IRSSI = (
authors => 'ksk',
contact => 'ksk_binzume.net',
name => 'conv',
description => 'convert to utf-8',
license => 'NYSL',
url => 'http://www.binzume.net/',
changed => '2007-10-05',
);
my $local_charset = 'UTF-8';
my $remote_charset = 'ISO-2022-JP';
sub send_text {
my ( $text, $server, $witem ) = @_;
if ($server && $witem) {
Encode::from_to($text, $local_charset, $remote_charset );
}
Irssi::signal_continue( $text, $server, $witem );
}
Irssi::signal_add( 'send text', 'send_text' );
sub send_command {
my ($command,$server,$item) = @_;
Encode::from_to($command, $local_charset, $remote_charset );
Irssi::signal_continue( $command, $server, $item );
}
Irssi::signal_add( 'send command', 'send_command' );
sub print_text {
my ( $dest, $text, $stripped ) = @_;
if ($text!~/Topic for .+:/) {
Encode::from_to($text, $remote_charset, $local_charset );
}
Irssi::signal_continue( $dest, $text, $stripped );
}
Irssi::signal_add( 'print text', 'print_text' );
sub message_topic {
my ( $server, $chan, $topic, $nick, $addr ) = @_;
Encode::from_to($topic, $local_charset, $remote_charset );
Irssi::signal_continue( $server, $chan, $topic, $nick, $addr );
}
Irssi::signal_add_first( 'message topic', 'message_topic' );
sub event_topic {
my ($server, $data, $nick, $address) = @_;
my ($channel, $topic) = split(/ :/, $data, 2);
Encode::from_to($topic, $remote_charset, $local_charset );
$data = "$channel :$topic";
Irssi::signal_continue( $server, $data, $nick, $address );
}
Irssi::signal_add_first("event topic", "event_topic");
Irssi::signal_add_first("event 332", "event_topic");
Irssi::signal_add_first("event 333", "event_topic");
autorunに入れてない場合は,Irssi起動後に「/script load conv.pl」として プラグインを読み込んでください.