summaryrefslogtreecommitdiffstats
path: root/scripts/betterlist.pl
diff options
context:
space:
mode:
authorLiam Hopkins2016-03-19 19:58:23 -0700
committerLiam Hopkins2016-03-19 19:58:23 -0700
commitba6e29dd1fa26fe2e5101adb30b5552fcd28e295 (patch)
treec35d9ace6596317ec014dffb67ffef06b5377305 /scripts/betterlist.pl
parent4a6175170c71237c66a5e9fba83e5adfd542ad8d (diff)
downloadscripts.irssi.org-ba6e29dd1fa26fe2e5101adb30b5552fcd28e295.tar.bz2
new script betterlist.pl
Diffstat (limited to 'scripts/betterlist.pl')
-rw-r--r--scripts/betterlist.pl77
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) = &quotewords(' ', 1, $data);
+ ($match) = &quotewords(' ', 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);