Permalink
Switch branches/tags
Nothing to show
Find file Copy path
Fetching contributors…
Cannot retrieve contributors at this time
61 lines (51 sloc) 1.55 KB
use strict;
use warnings;
use Irssi;
use vars qw/$VERSION %IRSSI/;
$VERSION = '0.1';
%IRSSI = (
authors => 'Isaac Good',
name => 'listsort',
contact => 'irssi@isaacgood.com',
decsription => 'Sort the /list output by channel size',
license => 'BSD',
url => 'https://github.com/IsaacG/irssi-scripts',
created => '2013/02/23',
);
# Bindings. Start of channel list, end of list, list item.
Irssi::signal_add_last('event 322', \&list_event);
Irssi::signal_add_last('event 323', \&list_end);
# Store the channel list between IRC messages
my %list;
# Store list info in the hash.
sub list_event {
my ($server, $data, $server_name) = @_;
my ($meta, $more) = split (/ :/, $data, 2);
my ($nick, $name, $size) = split (/ /, $meta, 3);
$list{$name}{'size'} = $size;
my $modes = '';
$list{$name}{'desc'} = '';
if ($more =~ /^[^[]*\[([^]]*)\][^ ]* *([^ ].*)$/) {
$modes = $1;
$list{$name}{'desc'} = $2;
}
$modes =~ s/ +$//;
$list{$name}{'modes'} = $modes;
}
# Print out the whole list in sorted order.
sub list_end {
for my $name (sort {$list{$a}{'size'} <=> $list{$b}{'size'}} keys %list) {
my $mode = $list{$name}{'modes'};
$mode = " ($mode)" if ($mode);
my $msg = sprintf (
"%d %s: %s%s",
$list{$name}{'size'},
$name,
$list{$name}{'desc'},
$mode
);
Irssi::print($msg, MSGLEVEL_CRAP);
}
# Drop the hash values; no point in holding them in memory.
%list = ();
}