]> git.vpit.fr Git - perl/scripts/xchat.git/blobdiff - tools.pl
Just say no to indirect object notation
[perl/scripts/xchat.git] / tools.pl
index bd98aa396028bcda91a20ed7c8f9726419cdd7ca..b554d4a7fc16ab636beb86b5563e76b1caac0017 100755 (executable)
--- a/tools.pl
+++ b/tools.pl
@@ -11,7 +11,9 @@ use Xchat qw/:all/;
 use lib get_info 'xchatdir';
 use Xchat::XPI;
 
-our $VERSION = '0.04';
+use constant MAX_MATCHES => 10;
+
+our $VERSION = '0.05';
 
 my $ph;
 
@@ -113,11 +115,38 @@ hook_command 'WIDE', sub {
  help_text => 'WIDE <text>, say text in wide unicode characters'
 };
 
-$ph = new Xchat::XPI name   => 'Misc tools',
-                     tag    => 'Tools',
-                     desc   => 'Perl interpretor, URI escaper',
-                     author => 'Vincent Pit (VPIT)',
-                     email  => 'perl@profvince.com',
-                     url    => 'http://www.profvince.com';
+hook_command 'HGREP', sub {
+ my $txt = $_[1][1];
+ return EAT_ALL unless defined $txt;
+ $txt = qr/$txt/i;
+ my @matches;
+ for (get_list 'users') {
+  my $host = $_->{host};
+  next unless $host =~ /$txt/;
+  push @matches, [ $_->{nick}, $host ];
+ }
+ my $nbr = @matches;
+ print $ph ($nbr == 0 ? 'No' : $nbr)
+           . ' match' . ('es' x ($nbr > 1))
+           . ' to ' . $txt;
+ if (@matches < MAX_MATCHES) {
+  print $ph +(':' x ($nbr > 0)) . "\n";
+  print $ph "\002$_->[0]\002 ($_->[1])\n" for @matches;
+ } else {
+  print $ph " (too many of them, omitted)\n";
+ }
+ return EAT_ALL;
+}, {
+ help_text => 'HGREP <text>, print users in the current context whose hostname matches text'
+};
+
+$ph = Xchat::XPI->new(
+ name   => 'Misc tools',
+ tag    => 'Tools',
+ desc   => 'Perl interpretor, URI escaper',
+ author => 'Vincent Pit (VPIT)',
+ email  => 'perl@profvince.com',
+ url    => 'http://www.profvince.com',
+);
 
 1;