aboutsummaryrefslogtreecommitdiffstats
path: root/docs/Guide.pod
diff options
context:
space:
mode:
authorTom Feist <shabble@cowu.be>2010-07-16 19:13:02 +0000
committerTom Feist <shabble@cowu.be>2010-07-16 19:13:02 +0000
commitced8aef9e7966a75b43c1d54b7fa06377bad8dff (patch)
treee6d635be017f2d6ddc84bc36d42c7677d3117e9d /docs/Guide.pod
parentsignals maybe finished! (diff)
downloadirssi-scripts-ced8aef9e7966a75b43c1d54b7fa06377bad8dff.tar.gz
irssi-scripts-ced8aef9e7966a75b43c1d54b7fa06377bad8dff.zip
renamed everything to .pod since they are not actually perl modules
Diffstat (limited to 'docs/Guide.pod')
-rw-r--r--docs/Guide.pod158
1 files changed, 158 insertions, 0 deletions
diff --git a/docs/Guide.pod b/docs/Guide.pod
new file mode 100644
index 0000000..4f78fc0
--- /dev/null
+++ b/docs/Guide.pod
@@ -0,0 +1,158 @@
+__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</SCRIPT LOAD I<filename>>. A default Irssi
+configuration also provides the C</RUN> alias as an alternative to C</SCRIPT
+LOAD>.
+
+
+=head2 Unloading
+
+A script can be unloaded via the C</SCRIPT UNLOAD I<name>> command. The name is
+typically the script filename without the F<.pl> extension, so F<nickcolor.pl>
+becomes C</SCRIPT UNLOAD nickcolor>.
+
+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<Data::Dumper> is an extremely good way to inspect Irssi internals if you're
+looking for an undocumented feature.
+
+The C<DUMP> alias by L<Wouter
+Coekaerts|http://wouter.coekaerts.be/site/irssi/aliases> provides an easy way to
+check object fields.
+
+Dump perl object (e.g. C</dump Irssi::active_win>):
+
+ /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</HELP>
+command.
+
+B<TODO: how>
+
+
+=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<TODO: why?>
+
+B<TODO: different types of settings>
+
+B<TODO: register/set/get>
+
+=head3 Use Subcommands to Group Script Functionality
+
+A common theme in Irssi scripts is to define commands with a prefix, such as
+C</myscript_foo>, C<myscript_bar>, etc. This helps to avoid accidentally clobbering
+native commands and those defined by other scripts, but is a problem better solved
+with I<subcommands>.
+
+Subcommands allow you to bind commands such as C</myscript foo> and C</myscript bar>.
+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<http://irssi.org/documentation/perl>
+
+=item L<http://irssi.org/documentation/signals>
+
+=item L<http://irssi.org/documentation/special_vars>
+
+=item L<http://irssi.org/documentation/formats>
+
+=item L<http://irssi.org/documentation/settings>
+
+=item L<http://juerd.nl/site.plp/irssiscripttut>
+
+=item L<http://irchelp.org/irchelp/rfc/rfc.html>
+
+=item L<http://wouter.coekaerts.be/site/irssi/irssi>
+
+=back