1#!/usr/local/bin/perl 2# 3# $Id: chansort.pl,v 1.4 2004/11/02 22:52:33 peder Exp $ 4# 5# Copyright (C) 2004 by Peder Stray <peder@gzip.ninja.no> 6# 7 8use strict; 9use Irssi; 10use Irssi::Irc; 11 12# ======[ Script Header ]=============================================== 13 14use vars qw{$VERSION %IRSSI}; 15($VERSION) = '$Revision: 1.4 $' =~ / (\d+\.\d+) /; 16%IRSSI = ( 17 name => 'chansort', 18 authors => 'Peder Stray', 19 contact => 'peder@ninja.no', 20 url => 'http://ninja.no/irssi/chansort.pl', 21 license => 'GPL', 22 description => 'Sort all channel and query windows', 23 ); 24 25# ======[ Hooks ]======================================================= 26 27# --------[ sig_sort_trigger ]------------------------------------------ 28 29sub sig_sort_trigger { 30 return unless Irssi::settings_get_bool('chansort_autosort'); 31 cmd_chansort(); 32} 33 34# ======[ Commands ]==================================================== 35 36# --------[ CHANSORT ]-------------------------------------------------- 37 38# Usage: /CHANSORT 39sub cmd_chansort { 40 my(@windows); 41 my($minwin); 42 43 for my $win (Irssi::windows()) { 44 my $act = $win->{active}; 45 my $key; 46 47 if ($act->{type} eq 'CHANNEL') { 48 $key = "C".$act->{server}{tag}.' '.substr($act->{visible_name}, 1); 49 } 50 elsif ($act->{type} eq 'QUERY') { 51 $key = "Q".$act->{server}{tag}.' '.$act->{visible_name}; 52 } 53 else { 54 next; 55 } 56 if (!defined($minwin) || $minwin > $win->{refnum}) { 57 $minwin = $win->{refnum}; 58 } 59 push @windows, [ lc $key, $win ]; 60 61 } 62 63 for (sort {$a->[0] cmp $b->[0]} @windows) { 64 my($key,$win) = @$_; 65 my($act) = $win->{active}; 66 67# printf("win[%d->%d]: t[%s] [%s] [%s] {%s}\n", 68# $win->{refnum}, 69# $minwin, 70# $act->{type}, 71# $act->{visible_name}, 72# $act->{server}{tag}, 73# $key, 74# ); 75 76 $win->command("window move $minwin"); 77 $minwin++; 78 } 79} 80 81# ======[ Setup ]======================================================= 82 83# --------[ Register commands ]----------------------------------------- 84 85Irssi::command_bind('chansort', 'cmd_chansort'); 86 87# --------[ Register settings ]----------------------------------------- 88 89Irssi::settings_add_bool('chansort', 'chansort_autosort', 0); 90 91# --------[ Register signals ]------------------------------------------ 92 93Irssi::signal_add_last('window item name changed', 'sig_sort_trigger'); 94Irssi::signal_add_last('channel created', 'sig_sort_trigger'); 95Irssi::signal_add_last('query created', 'sig_sort_trigger'); 96 97# ======[ END ]========================================================= 98 99# Local Variables: 100# header-initial-hide: t 101# mode: header-minor 102# end: 103 104