archive- Random tools & helpful resources for IRC |
git clone git://git.acid.vegas/archive.git |
Log | Files | Refs | Archive |
chansort.pl (1105B)
1 use strict; 2 use Irssi; 3 use Irssi::Irc; 4 5 sub sig_sort_trigger { 6 return unless Irssi::settings_get_bool('chansort_autosort'); 7 cmd_chansort(); 8 } 9 10 sub cmd_chansort { 11 my(@windows); 12 my($minwin); 13 for my $win (Irssi::windows()) { 14 my $act = $win->{active}; 15 my $key; 16 if ($act->{type} eq 'CHANNEL') { 17 $key = "C".$act->{server}{tag}.' '.substr($act->{visible_name}, 1); 18 } 19 elsif ($act->{type} eq 'QUERY') { 20 $key = "Q".$act->{server}{tag}.' '.$act->{visible_name}; 21 } 22 else { 23 next; 24 } 25 if (!defined($minwin) || $minwin > $win->{refnum}) { 26 $minwin = $win->{refnum}; 27 } 28 push @windows, [ lc $key, $win ]; 29 30 } 31 for (sort {$a->[0] cmp $b->[0]} @windows) { 32 my($key,$win) = @$_; 33 my($act) = $win->{active}; 34 $win->command("window move $minwin"); 35 $minwin++; 36 } 37 } 38 39 Irssi::command_bind('chansort', 'cmd_chansort'); 40 Irssi::settings_add_bool('chansort', 'chansort_autosort', 0); 41 Irssi::signal_add_last('window item name changed', 'sig_sort_trigger'); 42 Irssi::signal_add_last('channel created', 'sig_sort_trigger'); 43 Irssi::signal_add_last('query created', 'sig_sort_trigger');