stasikos 07.08.2010 17:11

СкриптыХайлайты через notify-send в irssi

Так как кое-где еще не нашлось достаточно пользователей irssi, думаю что здесь ему будет полезнее полежать. :)

Благодаря наличию в Irssi поддержки perl-скриптования, можно очень простым
способом, не используя никаких дополнительных модулей или еще чего либо
реализовать довольно-таки удобную функцию уведомления о приватных сообщениях и
хайлайтах через notify-osd, используя приведенный здесь скрипт. Конечно же, вы
можете использовать что угодно вместо notify-osd по вашему желанию, и тогда это
будет лишь небольшим примером того как можно облагородить такой, кажущийся
многим с первого взгляда убогим, IRC-клиент.
 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#!/usr/bin/perl -w -C

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

our $timeout = 3000;

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

sub sig_public {
my @host;
my ($server, $msg, $nick, $address, $target) = @_;
my $mynick = $server-&gt;{nick};
chomp $mynick;
if ($msg =~ m/.*$mynick.*/ ) {
send_notification($msg, $nick, $target);
}
}

sub sig_private {
my ($server, $msg, $nick, $address) = @_;
send_notification($msg, $nick);
}

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.


Тэги: irc Irssi perl scripts
+ 3 -
Похожие Поделиться

dfx 07.08.2010 17:14 #
/code
cut
stasikos 07.08.2010 17:18 #
Спасибо
kstep 07.08.2010 20:56 #
Я бы приличный кусок кода вынес в отдельную функцию:


sub send_notification()
{
my ($msg, $nick, $target) = @_;
$target ||= "private";
$msg =~ s/</</;
$msg =~ s/>/>/;
$msg =~ s/'/`/g;
my $notify = Desktop::Notify->new();
my $notification = $notify->create(summary =>; "Irssi:$nick <$target>",
body => "$msg",
timeout => $timeout);
$notification->show();
$notification->close();
}

stasikos 07.08.2010 23:25 #
Согласен