__END__ =head1 NAME Guide To Irssi Scripting. =head1 DESCRIPTION =head1 LOADING AND UNLOADING SCRIPTS =head2 File Locations =head2 Testing =head2 Loading Scripts are loaded via C>. A default Irssi configuration also provides the C alias as an alternative to C. =head2 Unloading A script can be unloaded via the C> command. The name is typically the script filename without the F<.pl> extension, so F becomes C. As part of the unloading process, if the script contains a sub UNLOAD { ... } function, it will be run just before the script is unloaded and all variables destroyed. This can be used to clean up any temporary files, shut down any network connections or processes, and restore any Irssi modifications made. =head1 ANATOMY OF A SCRIPT In this section, we develop a very simplistic script and look at the necessary code. =head2 Preamble =head1 COMMONLY SCRIPTED TASKS =head2 Modifying an input line before sending =head2 Responding to a public message =head2 Responding to a private message =head1 USEFUL THINGS =head2 Sharing Code Between Scripts There are 2 main ways for scripts to communicate, either via emitting and handling Irssi signals, or by calling functions from one another directly. =head3 Using Signals =head3 Using Functions =head2 If In Doubt, Dump! C is an extremely good way to inspect Irssi internals if you're looking for an undocumented feature. The C alias by L provides an easy way to check object fields. Dump perl object (e.g. C): /alias DUMP script exec use Data::Dumper\; print Data::Dumper->new([\\$0-])->Dump =head2 Making Scripts Act Native An important part of creating a good script is to make it behave as though it were a part of Irssi. Adhering to some of the standard conventions can make this easier. =head3 Provide Help Scripts commonly store information about how to use them in comments at the top of their file. Whilst better than no documentation at all, a preferable approach is to allow that help to be accessed from within Irssi itself, using the C command. B =head3 Use Tab Completion One of the great features of Irssi is the ability to complete commands, subcommands and even certain arguments. =head3 Use Settings for Customisation B B B =head3 Use Subcommands to Group Script Functionality A common theme in Irssi scripts is to define commands with a prefix, such as C, C, etc. This helps to avoid accidentally clobbering native commands and those defined by other scripts, but is a problem better solved with I. Subcommands allow you to bind commands such as C and C. Completions are automatically handled for both the primary command, and any subcommands contained within it. The following example demonstrates how to use subcommands from within a script: Irssi::command_bind("foo bar", \&subcmd_bar); Irssi::command_bind("foo", \&subcmd_handler); sub subcmd_handler { my ($data, $server, $item) = @_; $data =~ s/\s+$//g; Irssi::command_runsub('foo', $data, $server, $item); } sub subcmd_bar { my ($args) = @_; print "subcommand called with: $args"; } =head1 OTHER RESOURCES The documentation assembled here and elsewhere on this site has been drawn from many different places, and a lot of valuable information is available from the following sites. =over =item L =item L =item L =item L =item L =item L =item L =item L =back