diff options
| author | Liam Hopkins | 2016-03-19 19:58:23 -0700 | 
|---|---|---|
| committer | Liam Hopkins | 2016-03-19 19:58:23 -0700 | 
| commit | ba6e29dd1fa26fe2e5101adb30b5552fcd28e295 (patch) | |
| tree | c35d9ace6596317ec014dffb67ffef06b5377305 /scripts/betterlist.pl | |
| parent | 4a6175170c71237c66a5e9fba83e5adfd542ad8d (diff) | |
| download | scripts.irssi.org-ba6e29dd1fa26fe2e5101adb30b5552fcd28e295.tar.bz2 | |
new script betterlist.pl
Diffstat (limited to 'scripts/betterlist.pl')
| -rw-r--r-- | scripts/betterlist.pl | 77 | 
1 files changed, 77 insertions, 0 deletions
| diff --git a/scripts/betterlist.pl b/scripts/betterlist.pl new file mode 100644 index 0000000..f8f9cbb --- /dev/null +++ b/scripts/betterlist.pl @@ -0,0 +1,77 @@ +use Irssi; +use strict; +use warnings; +use Text::ParseWords; +use vars qw($VERSION %IRSSI);  +$VERSION = "2.1"; +%IRSSI = ( +  authors     => "Liam Hopkins", +  contact     => "we.hopkins\@gmail.com", +  name        => "betterlist", +  description => "/list <perl-regexp>", +  license     => "GPL", +); + + +my $running = 0; # flag to prevent overlapping requests. +my $match; + +sub call_list_cmd { +  my ($server, $args) = @_; + +  # set a one-time redirect for handling responses of a given command +  $server->redirect_event('list', 1, '', -1, 'redir my_timeout', +    { +      'event 321' => 'redir my_liststart', +      'event 322' => 'redir my_list', +      'event 323' => 'redir my_listend', +      ''          => 'event empty', +    }); + +  # execute the command +  $server->send_raw("LIST"); +} + +sub event_list { +    my ($server, $data) = @_; +    my $channel = ( split / +/, $data)[1]; + +    Irssi::active_win->print("Matched $channel", MSGLEVEL_CLIENTCRAP) if ($channel =~ /$match/) + } + +sub event_liststart { +  Irssi::active_win->print("Looking for $match", MSGLEVEL_CLIENTCRAP); +} + +sub event_listend { +  Irssi::active_win->print("End of /LIST", MSGLEVEL_CLIENTCRAP); +  $running = 0; +} + +sub event_timeout { +  my ($server, $data) = @_; +  Irssi::print("timeout", MSGLEVEL_CLIENTCRAP); +  $running = 0; +} + +sub betterlist { +  my ($data, $server, $witem) = @_; + +  if ($running) { +    Irssi::active_win->print("please try again shortly.", MSGLEVEL_CLIENTCRAP); +    return; +  }  +  $running = 1; +  my (@args)  = "ewords(' ', 1, $data); +  ($match) = "ewords(' ', 0, shift(@args)); +  call_list_cmd($server); +  Irssi::signal_stop(); +} + +Irssi::signal_add_first ({ +    'redir my_liststart'       => 'event_liststart', +    'redir my_list'            => 'event_list', +    'redir my_listend'         => 'event_listend', +}); + +Irssi::command_bind("betterlist", \&betterlist); | 
