Irssi

コンソール上で動くCUIなIRCクライアントを探していたのですが,Irssiを紹介されたので使ってみます.

依存しているライブラリは比較的少ないのでインストールは楽です.Emacs使いの人はrieceとかがいいでしょう.

今回はFreeBSDにIrssiをインストールしてみました.

インストール

portsからインストールしました.楽.

/usr/ports/irc/irssi等でmake installしてください.

設定

ホームディレクトリ下の.irssi/configで設定します.設定はサンプルを見ながらやれば問題無いと思います.

servers,chatnets,channelsにエントリを追加します.あとは,一番したのsettingsを書き換えればOkです.

# ~/.irssi/config
servers = (
  {
    address = "irc.friend-chat.jp"; port = "6660";
    chatnet = "H"; autoconnect="yes";
  },
);
chatnets = {
  H = { type = "IRC"; };
};
channels = (
  { name = "#channel"; chatnet = "F"; autojoin = "Yes"; },
);

# 略

settings = {
  core = {
    real_name = "kousuke kawahira";
    user_name = "binzume";
    nick = "binzume";
  };
  "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     => 'binzume',
    contact     => 'kawahira_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」としてプラグインを読み込んでください.

更新履歴

Copyright © binzume all rights reserved.