summaryrefslogtreecommitdiffstats
path: root/scripts/xlist.pl
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/xlist.pl')
-rw-r--r--scripts/xlist.pl65
1 files changed, 65 insertions, 0 deletions
diff --git a/scripts/xlist.pl b/scripts/xlist.pl
new file mode 100644
index 0000000..ace8ca6
--- /dev/null
+++ b/scripts/xlist.pl
@@ -0,0 +1,65 @@
+#!/usr/bin/perl
+
+# (c) Matthäus 'JonnyBG' Wander <jbg@swznet.de>
+
+# Usage: Simply use /list as you always do
+
+use strict;
+use vars qw($VERSION %IRSSI);
+
+$VERSION = '1.00';
+%IRSSI = (
+ authors => 'Matthäus \'JonnyBG\' Wander',
+ contact => 'jbg@swznet.de',
+ name => 'xlist',
+ description => 'Better readable listing of channel names',
+ license => 'GPLv2',
+ url => 'http://jbg.swznet.de/xlist/',
+);
+
+use Irssi;
+
+my %xlist = ();
+
+sub collect {
+ my ($server, $data) = @_;
+
+ my (undef, $channel, $users, $topic) = split(/\s/, $data, 4);
+ $topic = substr($topic, 1);
+
+ $xlist{$channel} = [ $users, $topic ];
+}
+
+sub list {
+ my ($data, $server) = @_;
+ %xlist = ();
+
+ print "%K[%n".$server->{'tag'}."%K]%n %B<-->%n xlist";
+}
+
+sub show {
+ my ($server) = @_;
+ my ($printstring, $channel);
+
+ for $channel ( sort { ${ $xlist{$b} }[0] <=> ${ $xlist{$a} }[0] } keys %xlist ) {
+ $printstring = "%K[%n" . $server->{'tag'} . "%K]%n " .
+ sprintf("%4d", ${ $xlist{$channel} }[0]) .
+ " " . $channel;
+
+ if (length ${ $xlist{$channel} }[1] > 0 ) {
+ $printstring .= " %B->%n ". ${ $xlist{$channel} }[1];
+ }
+
+ print $printstring;
+ }
+
+ %xlist = ();
+
+ print "%K[%n".$server->{'tag'}."%K]%n %B<-->%n End of xlist";
+}
+
+Irssi::command_bind('list', \&list);
+Irssi::signal_add('event 322', \&collect);
+Irssi::signal_add('event 323', \&show);
+
+print "%B<-->%n xlist v$VERSION: Simply use /list as you always do";