пятница, 18 июня 2010 г.

Хайлайты через notify-send в irssi

Благодаря наличию в Irssi поддержки perl-скриптования, можно очень простым
способом, не используя никаких дополнительных модулей или еще чего либо
реализовать довольно-таки удобную функцию уведомления о приватных сообщениях и
хайлайтах через notify-osd, используя приведенный здесь скрипт. Конечно же, вы
можете использовать что угодно вместо notify-osd по вашему желанию, и тогда это
будет лишь небольшим примером того как можно облагородить такой, кажущийся
многим с первого взгляда убогим, IRC-клиент.

#!/usr/bin/perl -w -C

use strict;
use Irssi;
use Irssi::Irc;
use Desktop::Notify;

our $timeout = 3000;

sub sig_public
{
my @host;
my ($server, $msg, $nick, $address, $target) = @_;
my $mynick = $server->{nick};
chomp $mynick;
if ($msg =~ m/.*$mynick.*/ )
{
# Замена разных спецсимволов на более понятные для notify-osd
$msg =~ s/</&lt;/;
$msg =~ s/>/&gt;/;
$msg =~ s/'/`/g;
my $notify = Desktop::Notify->new();
my $notification = $notify->create(summary => "Irssi:$nick [$target]",
body => "$msg",
timeout => $timeout);
$notification->show();
$notification->close();

}
}

sub sig_private
{
my ($server, $msg, $nick, $address) = @_;
$msg =~ s/</&lt;/;
$msg =~ s/>/&gt;/;
$msg =~ s/'/`/g;
my $notify = Desktop::Notify->new();
my $notification = $notify->create(summary => "Irssi:$nick [private]",
body => "$msg",
timeout => $timeout);
$notification->show();
$notification->close();
}

Irssi::signal_add_last('message public', 'sig_public');
Irssi::signal_add_last('message private', 'sig_private');



Конечно же, это работает только если клиент запущен локально у вас на машине, а
не в screen на удаленном сервере.

P.S. есть бага и не могу пофиксить пока никак:
11:21 Argument "" isn't numeric in subroutine entry at /usr/lib/perl5/Net/DBus/Binding/Iterator.pm line 445.

Комментариев нет:

Отправить комментарий