1use IPC::Open3; 2use strict; 3use vars qw($VERSION %IRSSI); 4 5use Irssi qw(command_bind active_win); 6$VERSION = "1.14"; 7%IRSSI = ( 8 authors => 'Juerd', 9 contact => 'juerd@juerd.nl', 10 name => 'Figlet', 11 description => 'Safe figlet implementation (with color support!)', 12 license => 'Public Domain', 13 url => 'http://juerd.nl/irssi/', 14 changed => 'Sun 10 Mar 14:46 CET 2002', 15 changes => 'No more zombie processes', 16); 17 18command_bind( 19 figlet => sub { 20 my ($msg) = @_; 21 my @figlet; 22 my $prefix = ''; 23 while ($msg =~ s/ 24 ^( 25 [^\cC\cB\cO\c_]+ 26 | 27 (?: 28 \cC\d*(?:,\d*)? 29 | 30 [\cB\cO\c_] 31 )+ 32 ) 33 //x) { 34 my $part = $1; 35 if ($part =~ /[\cC\cB\cO\c_]/) { 36 if (@figlet) { 37 $_ .= $part for @figlet; 38 } else { 39 $prefix = $part; 40 } 41 } else { 42 my $i = 0; 43 my $pid = open3(undef, *FIG, *FIG, qw(figlet -k), $part); 44 while (<FIG>) { 45 chomp; 46 $figlet[$i++] .= $_; 47 } 48 close FIG; 49 waitpid $pid, 0; 50 } 51 } 52 for (@figlet) { 53 (my $copy = $_) =~ s/\cC\d*(?:,\d*)?|[\cB\cO\c_]//g; 54 next unless $copy =~ /\S/; 55 active_win->command("say $prefix$_"); 56 } 57 } 58); 59