All pastes #493761 Raw Edit

Anonymous

public text v1 · immutable
·published 2007-05-17 22:31 UTC
rendered paste body
#! /usr/bin/perl
# $Id$

# Ack: Jump to the next active window, with tiebreakers.

use warnings;
use strict;

use Irssi;

### Script header.

use vars qw($VERSION);
$VERSION = do {my@r=(q$Revision: 0.0$=~/\d+/g);sprintf"%d."."%04d"x$#r,@r};

use vars qw(%IRSSI);
%IRSSI = (
  name        => 'ack',
  authors     => 'Rocco Caputo',
  contact     => 'rcaputo@cpan.org',
  url         => '(none yet)',
  license     => 'Perl',
  description => 'Jump to the next active window, with tiebreakers.',
);

# Jump to an active channel.

sub cmd_ack {
  my ($cmd, $server, $window) = @_;

  # We sort the data_level in reverse order because higher numbers
  # mean "more important".  If the data_level is equal between two
  # windows, then we jump to the window that has been upbated least
  # recently.
  #
  # Currently that's the window with the earliest (oldest) last line
  # of text.

  my @windows = sort {
    ($b->{data_level} <=> $a->{data_level}) ||
    ($a->{last_line}  <=> $b->{last_line} )
  }
  grep { $_->{data_level} }  # Must have some activity.
  Irssi::windows();

  # Jump to the first window.  How hard can it be?
  $windows[0]->set_active() if @windows;
}

# Usage: /ack ... probably bind it to Meta-A or something.
Irssi::command_bind("ack", "cmd_ack");