2 # Perl interface to irssi functions.
9 use vars qw($VERSION $in_irssi @ISA @EXPORT @EXPORT_OK);
14 my ($class, $level, $object, $target) = @_;
15 return bless [ $level, $object, $target ], $class;
19 croak "Cannot syswrite() to an Irssi handle"
23 my ($self, @list) = @_;
24 if (defined $self->[1]) {
25 if (defined $self->[2]) {
26 $self->[1]->print($self->[2], join('', @list), $self->[0]);
28 $self->[1]->print(join('', @list), $self->[0]);
31 Irssi::print(join('', @list), $self->[0]);
36 my ($self, $format, @list) = @_;
37 if (defined $self->[1]) {
38 if (defined $self->[2]) {
39 $self->[1]->print($self->[2], sprintf($format, @list), $self->[0]);
41 $self->[1]->print(sprintf($format, @list), $self->[0]);
44 Irssi::print(sprintf($format, @list), $self->[0]);
49 croak "Cannot [sys]read() from an Irssi handle"
53 croak "Cannot readline() from an Irssi handle"
57 croak "Cannot getc() from an Irssi handle"
64 # End of TIEHANDLE methods
68 sub create_window_handle {
69 my ($object, $level) = @_;
70 $object = eval 'active_win' unless defined $object;
71 $level = eval 'MSGLEVEL_CLIENTCRAP' unless defined $level;
72 croak 'Usage: create_window_handle([$window[, $level]])'
73 if ref $object !~ /::Window$/i;
75 my $symref = 'Irssi::Handles::' . $object . '/' . $level;
77 tie *{$symref}, __PACKAGE__, $level, $object;
81 sub create_server_handle {
82 my ($object, $target, $level) = @_;
83 croak 'Usage: create_server_handle($server, $target[, $level])'
84 if not defined $object
85 or not defined $target
86 or ref $object !~ /::Server$/i;
87 $level = eval 'MSGLEVEL_CLIENTCRAP' unless defined $level;
89 my $symref = 'Irssi::Handles::' . $object . '/' . $target . '/' . $level;
91 tie *{$symref}, __PACKAGE__, $level, $object, $target;
95 # Object interface for create_server_handle
97 sub Irssi::Server::create_handle {
98 goto &Irssi::create_server_handle;
101 # Normal Irssi.pm stuff
105 die "This script requires irssi version $version or later"
106 if ($version > version());
110 my %exports = map { $_ => undef } @EXPORT, @EXPORT_OK;
112 for (keys %Irssi::) {
114 (my $short = $_) =~ s///;
115 next if exists $exports{"*$short"};
116 tie *{ $short }, __PACKAGE__, &$_();
117 push @EXPORT, "*$short";
119 next if exists $exports{$_};
120 push @EXPORT_OK, $_ if /[a-z]/ && defined *{$_}{CODE};
124 tie *DEFAULT, __PACKAGE__, MSGLEVEL_CLIENTCRAP();
137 @ISA = qw(Exporter DynaLoader);
138 @EXPORT = qw(INPUT_READ INPUT_WRITE
139 MSGLEVEL_CRAP MSGLEVEL_MSGS MSGLEVEL_PUBLIC MSGLEVEL_NOTICES
140 MSGLEVEL_SNOTES MSGLEVEL_CTCPS MSGLEVEL_ACTIONS MSGLEVEL_JOINS
141 MSGLEVEL_PARTS MSGLEVEL_QUITS MSGLEVEL_KICKS MSGLEVEL_MODES
142 MSGLEVEL_TOPICS MSGLEVEL_WALLOPS MSGLEVEL_INVITES MSGLEVEL_NICKS
143 MSGLEVEL_DCC MSGLEVEL_DCCMSGS MSGLEVEL_CLIENTNOTICE MSGLEVEL_CLIENTCRAP
144 MSGLEVEL_CLIENTERROR MSGLEVEL_HILIGHT MSGLEVEL_ALL MSGLEVEL_NOHILIGHT
145 MSGLEVEL_NO_ACT MSGLEVEL_NEVER MSGLEVEL_LASTLOG
151 $static = Irssi::Core::is_static();
153 $in_irssi = $@ ? 0 : 1;
156 print "Warning: This script should be run inside irssi\n";
158 bootstrap Irssi $VERSION if (!$static);
160 @Irssi::Channel::ISA = qw(Irssi::Windowitem);
161 @Irssi::Query::ISA = qw(Irssi::Windowitem);