changeset 6598:2f6850c7d980

[gaim-migrate @ 7122] Added the new Perl Scripting HOWTO. committer: Tailor Script <tailor@pidgin.im>
author Christian Hammond <chipx86@chipx86.com>
date Sun, 24 Aug 2003 04:22:06 +0000
parents fe569b675cd2
children cf2cdf3f0abc
files Doxyfile.in doc/PERL-HOWTO.dox plugins/perl/common/Gaim.pm
diffstat 3 files changed, 219 insertions(+), 4 deletions(-) [+]
line wrap: on
line diff
--- a/Doxyfile.in	Sun Aug 24 04:08:35 2003 +0000
+++ b/Doxyfile.in	Sun Aug 24 04:22:06 2003 +0000
@@ -357,7 +357,7 @@
 # directories like "/usr/src/myproject". Separate the files or directories 
 # with spaces.
 
-INPUT                  = src
+INPUT                  = src doc
 
 # If the value of the INPUT tag contains directories, you can use the 
 # FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp 
@@ -366,7 +366,7 @@
 # *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx *.hpp 
 # *.h++ *.idl *.odl *.cs
 
-FILE_PATTERNS          = *.h
+FILE_PATTERNS          = *.h *.dox
 
 # The RECURSIVE tag can be used to turn specify whether or not subdirectories 
 # should be searched for input files as well. Possible values are YES and NO. 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/doc/PERL-HOWTO.dox	Sun Aug 24 04:22:06 2003 +0000
@@ -0,0 +1,185 @@
+/** @page perl-howto Perl Scripting HOWTO
+
+<h2>Perl Scripting HOWTO</h2>
+
+
+<h3>Introduction</h3>
+
+ Perl is the first scripting language compatible with Gaim, and has been a
+ valuable aid to developers wishing to write scripts to modify the behavior
+ of their favorite instant messenger. A perl script acts like a normal
+ plugin, and appears in the list of plugins in Gaim's preferences pane.
+ Until now, they have been very basic, and consisted of only a few
+ functions. However, with the latest changes to Gaim's perl API, a much
+ larger part of Gaim is now open. In time, even such things as Gtk+
+ preference panes for perl scripts will be possible.
+
+<h3>Writing your first perl script</h3>
+
+ Enough of that. You want to know how to write a perl script, right?
+
+ First off, we're going to assume here that you are familiar with perl. Perl
+ scripts in Gaim are just normal perl scripts, which happen to use Gaim's
+ loadable perl module.
+
+ Now, you're going to want to place your script in $HOME/.gaim/plugins/.
+ That's the place where all plugins and scripts go, regardless of language.
+
+ The first thing you're going to write in your script is the necessary code
+ to actually register and initialize your script, which looks something like
+ this:
+
+
+ @code
+ use Gaim;
+
+ %PLUGIN_INFO = (
+     perl_api_version => 2,
+     name             => "Your Plugin's Name",
+     version          => "0.1",
+     summary          => "Brief summary of your plugin.",
+     description      => "Detailed description of what your plugin does.",
+     author           => "Your Name <email@address>",
+     url              => "http://yoursite.com/",
+
+     load             => "plugin_load",
+     unload           => "plugin_unload"
+ )
+
+ sub plugin_init {
+     return %PLUGIN_INFO;
+ }
+
+ sub plugin_load {
+     my $plugin = shift;
+ }
+
+ sub plugin_unload {
+     my $plugin = shift;
+ }
+ @endcode
+
+
+ The first thing you see is a hash called @c @%PLUGIN_INFO. It contains
+ the basic information on your plugin. In the future, additional fields
+ may be allowed, such as ones to setup a Gtk+ preferences pane.
+
+ The @c plugin_init function is required in all perl scripts. Its job
+ is to return the @c @%PLUGIN_INFO hash, which Gaim will use to register
+ and initialize your plugin.
+
+ The @c plugin_load function is called when the user loads your plugin
+ from the preferences, or on startup. It is passed one variable, which
+ is a handle to the plugin. This must be used when registering signal
+ handlers or timers.
+
+ The @c plugin_unload function is called when the user is unloading your
+ plugin. Its job is to clean up anything that must be dealt with before
+ unloading, such as removing temporary files or saving configuration
+ information. It does @em not have to unregister signal handlers or timers,
+ as Gaim will do that for you.
+
+ @warning Do @b NOT put any executable code outside of these functions
+          or your own user-defined functions. Variable declarations are
+          okay, as long as they're set to be local. Bad Things (TM) can
+          happen if you don't follow this simple instruction.
+
+
+ <h3>Timeouts</h3>
+
+ One feature useful to many perl plugin writers are timeouts. Timeouts allow
+ code to be ran after a specified number of seconds, and are rather
+ simple to setup. Here's one way of registering a timeout.
+
+
+ @code
+ sub timeout_cb {
+     my $data = shift;
+
+     Gaim::debug_info("my perl plugin",
+                      "Timeout callback called! data says: $data\n");
+ }
+
+ sub plugin_load {
+     my $plugin = shift;
+
+     # Start a timeout for 5 seconds.
+     Gaim::timeout_add($plugin, 5, \&timeout_cb, "Hello!");
+ }
+ @endcode
+
+
+ Here's another way of calling a timeout:
+
+
+ @code
+ sub plugin_load {
+     my $plugin = shift;
+
+     # Start a timeout for 5 seconds.
+     Gaim::timeout_add($plugin, 5,
+         sub {
+             my $data = shift;
+
+             Gaim::debug_info("my perl plugin",
+                              "Timeout callback called! data says: $data\n");
+         }, "Hello!");
+  }
+  @endcode
+
+
+  A timeout automatically unregisters when it reaches 0 (which is also
+  when the callback is called). If you want a timeout to call a function
+  every specified number of seconds, just re-register the timeout
+  at the end of the callback.
+
+  The data parameter is optional. If you don't have data to pass to the
+  callback, simply omit the parameter.
+
+
+  <h3>Signals</h3>
+
+  Signals are how gaim plugins get events. There are a number of
+  @ref Signals signals available.
+
+  A signal is registered by connecting a signal name owned by an
+  instance handle to a callback on the plugin handle. This is best
+  illustrated with an example.
+
+
+  @code
+  sub connection_signed_on_cb {
+      my ($gc, $data) = @_;
+      my $account = $gc->get_account();
+
+      Gaim::debug_info("my perl plugin",
+                       "Account " . $account->get_username() . " signed on.\n");
+  }
+
+  sub plugin_load {
+      my $plugin = shift;
+      my $data = "";
+
+      Gaim::signal_connect(Gaim::Connections::handle, "signed-on",
+                           $plugin, \&signed_on_cb, $data);
+  }
+  @endcode
+
+
+  Like timeouts, the callback can be an embedded subroutine, and also
+  like timeouts, the data parameter can be omitted.
+
+
+  <h3>Notes</h3>
+
+  The API in perl is very similar to Gaim's C API. The functions have been
+  gathered into packages, but most are the same, and the documentation can
+  be a big help at times.
+
+
+  <h3>Resources</h3>
+
+  @see Signals
+  @see Perl API Reference
+*/
+// vim: syntax=c tw=75 et
--- a/plugins/perl/common/Gaim.pm	Sun Aug 24 04:08:35 2003 +0000
+++ b/plugins/perl/common/Gaim.pm	Sun Aug 24 04:22:06 2003 +0000
@@ -65,8 +65,8 @@
 
 =head1 ABSTRACT
 
-This module provides the interface for using perl scripts as plugins
-in Gaim.
+  This module provides the interface for using perl scripts as plugins
+  in Gaim.
 
 =head1 DESCRIPTION
 
@@ -79,6 +79,36 @@
 API, which can be viewed at http://gaim.sourceforge.net/api/ or in
 the header files in the Gaim source tree.
 
+=head1 FUNCTIONS
+
+=over
+
+=item @accounts = Gaim::accounts
+
+Returns a list of all accounts, online or offline.
+
+=item @chats = Gaim::chats
+
+Returns a list of all chats currently open.
+
+=item @connections = Gaim:connections
+
+Returns a list of all active connections.
+
+=item @conversations = Gaim::conversations
+
+Returns a list of all conversations, both IM and chat, currently open.
+
+=item @conv_windows = Gaim::conv_windows
+
+Returns a list of all conversation windows currently open.
+
+=item @ims = Gaim::ims
+
+Returns a list of all instant messages currently open.
+
+=back
+
 =head1 SEE ALSO
 
 Gaim C API documentation - http//gaim.sourceforge.net/api/