<?xml version="1.0" encoding="iso-8859-1"?> <!-- WeeChat documentation (english version) Copyright (c) 2003-2006 by FlashCode <flashcode@flashtux.org> This manual is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This manual is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA --> <!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN" "file:///usr/share/xml/docbook/schema/dtd/4.2/docbookx.dtd" [ <!ENTITY date.xml SYSTEM "date.xml"> <!ENTITY config.xml SYSTEM "config.xml"> <!ENTITY weechat_commands.xml SYSTEM "weechat_commands.xml"> <!ENTITY irc_commands.xml SYSTEM "irc_commands.xml"> <!ENTITY key_functions.xml SYSTEM "key_functions.xml"> ]> <book lang="en"> <bookinfo> <title>WeeChat 0.2.0-cvs - User guide</title> <subtitle>Fast, light and extensible IRC client</subtitle> <author> <firstname>S�bastien</firstname> <surname>Helleu</surname> <email>flashcode AT flashtux.org</email> </author> &date.xml; <copyright> <year>2006</year> <holder>S�bastien Helleu</holder> </copyright> <legalnotice> <para> This manual is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. </para> <para> This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. </para> <para> You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA </para> </legalnotice> <abstract> <para> This manual documents WeeChat IRC client, it is part of WeeChat. </para> <para> Latest version of this document can be found on this page: <ulink url="http://weechat.flashtux.org/doc.php"> http://weechat.flashtux.org/doc.php </ulink> </para> </abstract> </bookinfo> <!-- =========================== Introduction =========================== --> <chapter id="chapIntroduction"> <title>Introduction</title> <para> This chapter describes WeeChat and pre-requisites for its installation. </para> <section id="secDescription"> <title>Description</title> <para> WeeChat (Wee Enhanced Environment for Chat) is a free <acronym>IRC</acronym> client, fast and light, designed for many operating systems. </para> <para> Main features are: <itemizedlist> <listitem> <para> multi-servers connection (with SSL, IPv6, proxy) </para> </listitem> <listitem> <para> many GUI: Curses, wxWidgets, Gtk and Qt </para> </listitem> <listitem> <para> small, fast and light </para> </listitem> <listitem> <para> customizable and extensible with plugins and scripts </para> </listitem> <listitem> <para> compliant with <acronym>RFC</acronym>s <ulink url="http://www.ietf.org/rfc/rfc1459.txt">1459</ulink>, <ulink url="http://www.ietf.org/rfc/rfc2810.txt">2810</ulink>, <ulink url="http://www.ietf.org/rfc/rfc2811.txt">2811</ulink>, <ulink url="http://www.ietf.org/rfc/rfc2812.txt">2812</ulink> and <ulink url="http://www.ietf.org/rfc/rfc2813.txt">2813</ulink> </para> </listitem> <listitem> <para> multi-platform (GNU/Linux, *BSD, MacOS X, Windows and other) </para> </listitem> <listitem> <para> 100% GPL, free software </para> </listitem> </itemizedlist> </para> <para> WeeChat homepage is here: <ulink url="http://weechat.flashtux.org"> http://weechat.flashtux.org </ulink> </para> </section> <section id="secPreRequis"> <title>Pre-requisites</title> <para> In order to install WeeChat, you <emphasis>need</emphasis>: <itemizedlist> <listitem> <para> a running GNU/Linux system (with compiler tools for source package) </para> </listitem> <listitem> <para> "root" privileges (to install WeeChat) </para> </listitem> <listitem> <para> according to GUI, one of the following libraries: <itemizedlist> <listitem> <para> Curses: ncurses library </para> </listitem> <listitem> <para> Gtk: <emphasis>*** GUI not developed ***</emphasis> </para> </listitem> <listitem> <para> WxWidgets: <emphasis>*** GUI not developed ***</emphasis> </para> </listitem> <listitem> <para> Qt: <emphasis>*** GUI not developed ***</emphasis> </para> </listitem> </itemizedlist> </para> </listitem> </itemizedlist> </para> </section> </chapter> <!-- =========================== Installation =========================== --> <chapter id="chapInstallation"> <title>Installation</title> <para> This chapter explains how to install WeeChat. </para> <section id="secBinaryPackages"> <title>Binary packages</title> <para> Binary packages are available for these distributions: <itemizedlist> <listitem> <para> Debian (or any Debian compatible distribution): <userinput>apt-get install weechat</userinput> </para> </listitem> <listitem> <para> Mandriva/RedHat (or any RPM compatible distribution): <userinput> rpm -i /chemin/weechat-x.y.z-1.i386.rpm </userinput> </para> </listitem> <listitem> <para> Gentoo : <userinput>emerge weechat</userinput> </para> </listitem> </itemizedlist> For other distributions, please look at your manual for installation instructions. </para> </section> <section id="secSourcePackage"> <title>Source package</title> <para> All you have to do is to run in a console or a terminal: <screen><prompt>$ </prompt><userinput>./configure</userinput> <prompt>$ </prompt><userinput>make</userinput></screen> </para> <para> Then get root privileges and install WeeChat: <screen><prompt>$ </prompt><userinput>su</userinput> (enter root password) <prompt># </prompt><userinput>make install</userinput></screen> </para> </section> <section id="secCVSSources"> <title>CVS sources</title> <para> Warning: CVS sources are for advanced users: it may not compile or not be stable. You're warned! </para> <para> To get CVS sources, issue this command: <screen><prompt>$ </prompt><userinput>cvs -z3 -d:pserver:anonymous@cvs.savannah.nongnu.org:/sources/weechat co weechat</userinput></screen> </para> <para> Execute this script: <userinput>./autogen.sh</userinput> </para> <para> Then follow instructions for source package (see <xref linkend="secSourcePackage" />) </para> </section> </chapter> <!-- ============================== Usage =============================== --> <chapter id="chapUsage"> <title>Usage</title> <para> This chapter explains how to run WeeChat, the default key bindings used, internal and IRC commands, setup file, and FIFO pipe use. </para> <section id="secRunningWeeChat"> <title>Running WeeChat</title> <para> Command line arguments: <informaltable colsep="0" frame="none"> <tgroup cols="2"> <thead> <row> <entry>Parameter</entry> <entry>Description</entry> </row> </thead> <tbody> <row> <entry><literal>-a, --no-connect</literal></entry> <entry> Disable auto-connect to servers at startup </entry> </row> <row> <entry><literal>-c, --config</literal></entry> <entry> Display config help (list of options) </entry> </row> <row> <entry><literal>-d, --dir <path></literal></entry> <entry> Set path as home for WeeChat (used for configuration files, logs, user plugins and scripts). Default value is "<literal>~/.weechat</literal>". Please note that directory is created if not found by WeeChat. </entry> </row> <row> <entry><literal>-f, --key-functions</literal></entry> <entry> Display WeeChat internal functions for keys </entry> </row> <row> <entry><literal>-h, --help</literal></entry> <entry> Display help </entry> </row> <row> <entry><literal>-i, --irc-commands</literal></entry> <entry> Display IRC commands list </entry> </row> <row> <entry><literal>-k, --keys</literal></entry> <entry> Display WeeChat default keys </entry> </row> <row> <entry><literal>-l, --license</literal></entry> <entry> Display WeeChat license </entry> </row> <row> <entry><literal>-p, --no-plugin</literal></entry> <entry> Disable plugins auto-load </entry> </row> <row> <entry><literal>-v, --version</literal></entry> <entry> Display WeeChat version </entry> </row> <row> <entry><literal>-w, --weechat-commands</literal></entry> <entry> Display WeeChat commands list </entry> </row> </tbody> </tgroup> </informaltable> </para> <para> It is also possible to give URL for one or many IRC servers, as follow: <screen>irc[6][s]://[pseudo[:mot_passe]@]irc.example.org[:port][/channel][,channel[...]</screen> Example to join #weechat and #toto on "<literal>irc.freenode.net</literal>" server, default port (6667), with "nono" nick: <screen><prompt>$ </prompt><userinput>weechat-curses irc://nono@irc.freenode.net/#weechat,#toto</userinput></screen> </para> <para> To start WeeChat, issue this command: <itemizedlist> <listitem> <para> for Curses GUI: <userinput>weechat-curses</userinput> </para> </listitem> <listitem> <para> for Gtk GUI: <userinput>weechat-gtk</userinput> </para> </listitem> <listitem> <para> for wxWidgets GUI: <userinput>weechat-wxwidgets</userinput> </para> </listitem> <listitem> <para> for Qt GUI: <userinput>weechat-qt</userinput> </para> </listitem> </itemizedlist> </para> <para> When you run WeeChat for the first time, a default configuration file is created, with default options. The default configuration file is: "<literal>~/.weechat/weechat.rc</literal>" </para> <para> You can edit this file at your convenience to configure WeeChat (ONLY if WeeChat is not running), or you can set parameters with "<literal>/set</literal>" command in WeeChat (see <xref linkend="secWeeChatCommands" />) </para> </section> <section id="secKeyboardShortcuts"> <title>Key bindings</title> <para> <informaltable colsep="0" frame="none"> <tgroup cols="2"> <thead> <row> <entry>Key</entry> <entry>Action</entry> </row> </thead> <tbody> <row> <entry>Left arrow</entry> <entry> Go to previous char in command line </entry> </row> <row> <entry>Right arrow</entry> <entry> Go to next char in command line </entry> </row> <row> <entry>Ctrl + left arrow</entry> <entry> Go to previous word in command line </entry> </row> <row> <entry>Ctrl + right arrow</entry> <entry> Go to next word in command line </entry> </row> <row> <entry>Home / Ctrl + A</entry> <entry> Go to the beginning of command line </entry> </row> <row> <entry>End / Ctrl + E</entry> <entry> Go to the end of command line </entry> </row> <row> <entry>Ctrl + K</entry> <entry> Delete from cursor until end of command line </entry> </row> <row> <entry>Ctrl + L</entry> <entry> Redraw whole window </entry> </row> <row> <entry>Ctrl + U</entry> <entry> Delete from cursor until beginning of command line </entry> </row> <row> <entry>Ctrl + W</entry> <entry> Delete previous word of command line </entry> </row> <row> <entry>Backspace</entry> <entry> Delete previous char in command line </entry> </row> <row> <entry>Delete</entry> <entry> Delete next char in command line </entry> </row> <row> <entry>Tab</entry> <entry> Complete command or nick (Tab again: find next completion) </entry> </row> <row> <entry>Any char</entry> <entry> Insert char at cursor position in command line </entry> </row> <row> <entry>Enter</entry> <entry> Execute command or send message </entry> </row> <row> <entry>Up arrow / Down arrow</entry> <entry> Call again last commands/messages </entry> </row> <row> <entry>Ctrl + up arrow / Ctrl + down arrow</entry> <entry> Call again last commands/messages in global history (common for all buffers) </entry> </row> <row> <entry>PageUp / PageDown</entry> <entry> Scroll up / down one page in buffer history </entry> </row> <row> <entry>Alt + PageUp / Alt + PageDown</entry> <entry> Scroll up / down a few lines in buffer history </entry> </row> <row> <entry>Alt + Home / Alt + End</entry> <entry> Scroll to top / bottom of buffer </entry> </row> <row> <entry>F5 / Alt + left arrow</entry> <entry> Switch to previous buffer </entry> </row> <row> <entry>F6 / Alt + right arrow</entry> <entry> Switch to next buffer </entry> </row> <row> <entry>F7</entry> <entry> Switch to previous window </entry> </row> <row> <entry>F8</entry> <entry> Switch to next window </entry> </row> <row> <entry>F10</entry> <entry> Remove last infobar message </entry> </row> <row> <entry>F11 / F12</entry> <entry> Scroll nicklist </entry> </row> <row> <entry>Alt + F11 / Alt + F12</entry> <entry> Go to the beginning / the end of nicklist </entry> </row> <row> <entry>Alt + A</entry> <entry> Switch to next buffer with activity (with priority: highlight, message, other) </entry> </row> <row> <entry>Alt + B</entry> <entry> Go to previous word in command line </entry> </row> <row> <entry>Alt + D</entry> <entry> Delete next word in command line </entry> </row> <row> <entry>Alt + F</entry> <entry> Go to next word in command line </entry> </row> <row> <entry>Alt + H</entry> <entry> Clear hotlist (activity notification on other buffers) </entry> </row> <row> <entry>Alt + J then Alt + D</entry> <entry> Display DCC buffer </entry> </row> <row> <entry>Alt + J then Alt + L</entry> <entry> Switch to last buffer </entry> </row> <row> <entry>Alt + J then Alt + R</entry> <entry> Switch to raw IRC data buffer </entry> </row> <row> <entry>Alt + J then Alt + S</entry> <entry> Switch to server buffer </entry> </row> <row> <entry>Alt + J then Alt + X</entry> <entry> Switch to first channel of next buffer (or server buffer if no channel is opened) </entry> </row> <row> <entry>Alt + digit (0-9)</entry> <entry> Switch to buffer by number (0 = 10) </entry> </row> <row> <entry>Alt + J then number (01-99)</entry> <entry> Switch to buffer by number </entry> </row> <row> <entry>Alt + K</entry> <entry> Grab a key and insert its code in command line </entry> </row> <row> <entry>Alt + N</entry> <entry> Scroll to next highlight </entry> </row> <row> <entry>Alt + P</entry> <entry> Scroll to previous highlight </entry> </row> <row> <entry>Alt + R</entry> <entry> Delete entire command line </entry> </row> <row> <entry>Alt + S</entry> <entry> Switch servers on servers buffer (if option "look_one_server_buffer" is enabled) </entry> </row> <row> <entry>Alt + U</entry> <entry> Scroll to first unread line in buffer </entry> </row> <row> <entry>Alt + W then Alt + arrow</entry> <entry> Switch to window with direction </entry> </row> </tbody> </tgroup> </informaltable> </para> </section> <section id="secCommandLine"> <title>Command line</title> <para> WeeChat command line (at the bottom of window) lets you send text on channels and execute WeeChat or IRC commands (see <xref linkend="secWeeChatIRCCommands" />). </para> <para> Commands begin with "/" char, followed by name of command. For example, to initiate a private chat with "<literal>toto</literal>": <screen><userinput>/query toto</userinput></screen> </para> <para> Text sent to a channel is any text that does not begin with "/" char. For example, to send text "<literal>hello</literal>" on current channel: <screen><userinput>hello</userinput></screen> </para> <para> However, it is possible to start with "/" char, by adding another. For example, to send text "<literal>/query toto</literal>" on current channel: <screen><userinput>//query toto</userinput></screen> </para> <para> If option for sending IRC colors ("<literal>irc_colors_send</literal>") is enabled, you can use color codes and attributes, as follow: <informaltable colsep="0" frame="none"> <tgroup cols="2"> <thead> <row> <entry>Code</entry> <entry>Description</entry> </row> </thead> <tbody> <row> <entry>%B</entry> <entry> bold text </entry> </row> <row> <entry>%Cxx</entry> <entry> text color "<literal>xx</literal>" (see colors table below) </entry> </row> <row> <entry>%Cxx,yy</entry> <entry> text color "<literal>xx</literal>" and background "<literal>yy</literal>" (see colors table below) </entry> </row> <row> <entry>%O</entry> <entry> disable color and attributes </entry> </row> <row> <entry>%R</entry> <entry> reverse video (revert text color with background) </entry> </row> <row> <entry>%U</entry> <entry> underlined text </entry> </row> <row> <entry>%%</entry> <entry> display one "<literal>%</literal>" </entry> </row> </tbody> </tgroup> </informaltable> Note: the same code (without number for %C) may be used to stop the attribute. </para> <para> Color codes for %C are: <informaltable colsep="0" frame="none"> <tgroup cols="2"> <thead> <row> <entry>Code</entry> <entry>Color</entry> </row> </thead> <tbody> <row> <entry>00</entry> <entry>white</entry> </row> <row> <entry>01</entry> <entry>black</entry> </row> <row> <entry>02</entry> <entry>dark blue</entry> </row> <row> <entry>03</entry> <entry>dark green</entry> </row> <row> <entry>04</entry> <entry>light red</entry> </row> <row> <entry>05</entry> <entry>dark red</entry> </row> <row> <entry>06</entry> <entry>magenta</entry> </row> <row> <entry>07</entry> <entry>orange</entry> </row> <row> <entry>08</entry> <entry>yellow</entry> </row> <row> <entry>09</entry> <entry>light green</entry> </row> <row> <entry>10</entry> <entry>cyan</entry> </row> <row> <entry>11</entry> <entry>light cyan</entry> </row> <row> <entry>12</entry> <entry>light blue</entry> </row> <row> <entry>13</entry> <entry>light magenta</entry> </row> <row> <entry>14</entry> <entry>gray</entry> </row> <row> <entry>15</entry> <entry>light gray (white)</entry> </row> </tbody> </tgroup> </informaltable> </para> <para> Example: display of "<literal>hello everybody!</literal>" with "<literal>hello</literal>" in light blue bold, and "<literal>everybody</literal>" in light red underlined: <screen><userinput>%C12%Bhello%B%C04%U everybody%U%C!</userinput></screen> </para> </section> <section id="secWeeChatIRCCommands"> <title>WeeChat / IRC commands</title> <para> This chapter lists all WeeChat and IRC commands. </para> <section id="secWeeChatCommands"> <title>WeeChat commands</title> <para> &weechat_commands.xml; </para> </section> <section id="secKeyFunctions"> <title>Key functions</title> <para> <informaltable colsep="0" frame="none"> <tgroup cols="2"> <thead> <row> <entry>Function</entry> <entry>Description</entry> </row> </thead> <tbody> &key_functions.xml; </tbody> </tgroup> </informaltable> </para> </section> <section id="secIRCCommands"> <title>IRC commands</title> <para> &irc_commands.xml; </para> </section> </section> <section id="secConfigurationFile"> <title>Configuration file</title> <para> List of options for config file: <informaltable colsep="0" frame="none"> <tgroup cols="2"> <thead> <row> <entry>Option</entry> <entry>Type</entry> <entry>Values</entry> <entry>Default</entry> <entry>Description</entry> </row> </thead> <tbody> &config.xml; </tbody> </tgroup> </informaltable> </para> <para> Colors for Curses GUI are: <informaltable colsep="0" frame="none"> <tgroup cols="2"> <thead> <row> <entry>Keyword</entry> <entry>Color</entry> </row> </thead> <tbody> <row> <entry><literal>default</literal></entry> <entry>default color (transparent for background)</entry> </row> <row> <entry><literal>black</literal></entry> <entry>black</entry> </row> <row> <entry><literal>red</literal></entry> <entry>dark red</entry> </row> <row> <entry><literal>lightred</literal></entry> <entry>light red</entry> </row> <row> <entry><literal>green</literal></entry> <entry>dark green</entry> </row> <row> <entry><literal>lightgreen</literal></entry> <entry>light green</entry> </row> <row> <entry><literal>brown</literal></entry> <entry>brown</entry> </row> <row> <entry><literal>yellow</literal></entry> <entry>yellow</entry> </row> <row> <entry><literal>blue</literal></entry> <entry>dark blue</entry> </row> <row> <entry><literal>lightblue</literal></entry> <entry>light blue</entry> </row> <row> <entry><literal>magenta</literal></entry> <entry>dark magenta</entry> </row> <row> <entry><literal>lightmagenta</literal></entry> <entry>light magenta</entry> </row> <row> <entry><literal>cyan</literal></entry> <entry>dark cyan</entry> </row> <row> <entry><literal>lightcyan</literal></entry> <entry>light cyan</entry> </row> <row> <entry><literal>white</literal></entry> <entry>white</entry> </row> </tbody> </tgroup> </informaltable> </para> </section> <section id="secFIFOpipe"> <title>FIFO pipe</title> <para> You can remote control WeeChat, by sending commands or text to a FIFO pipe (you have to enable option "irc_fifo_pipe", it is disabled by default). </para> <para> The FIFO pipe is located in "<literal>~/.weechat/</literal>" and is called "weechat_fifo_xxxxx" (where xxxxx is the process ID (PID) of running WeeChat). So if many WeeChat are running, you have many FIFO pipes, one for each session. </para> <para> The syntax for the FIFO pipe commands/text is: <screen>server,channel *text or command here</screen> where server and channel are optional, but if channel is here, server should be too. </para> <para> Some examples: <itemizedlist> <listitem> <para> nick change on freenode to "mynick|out" : <screen><prompt>$ </prompt><userinput>echo "freenode */nick mynick|out" >~/.weechat/weechat_fifo_12345</userinput></screen> </para> </listitem> <listitem> <para> display text on #weechat channel: <screen><prompt>$ </prompt><userinput>echo "freenode,#weechat *hello everybody!" >~/.weechat/weechat_fifo_12345</userinput></screen> </para> </listitem> <listitem> <para> display text on current channel (buffer displayed by WeeChat): <screen><prompt>$ </prompt><userinput>echo "*hello!" >~/.weechat/weechat_fifo_12345</userinput></screen> <emphasis>Warning:</emphasis> this is dangerous and you should not do that except if you know what you do! </para> </listitem> <listitem> <para> send two commands to unload/reload Perl scripts (you have to separate them with "\n"): <screen><prompt>$ </prompt><userinput>echo -e "freenode */perl unload\nfreenode */perl autoload" >~/.weechat/weechat_fifo_12345</userinput></screen> </para> </listitem> </itemizedlist> </para> <para> You can write a script to send command to all running WeeChat at same time, for example: <screen> #!/bin/sh if [ $# -eq 1 ]; then for fifo in $(/bin/ls ~/.weechat/weechat_fifo_* 2>/dev/null); do echo -e "$1" >$fifo done fi </screen> If the script is called "auto_weechat_command", you can run it with: <screen><prompt>$ </prompt><userinput>./auto_weechat_command "freenode,#weechat *hello"</userinput></screen> </para> </section> </chapter> <!-- ============================== Plugins ============================= --> <chapter id="chapPlugins"> <title>Plugins</title> <para> This chapter describes WeeChat plugins interface (API) and the default scripts plugins (Perl, Python, Ruby, Lua), provided with WeeChat. </para> <section id="secPluginsInWeeChat"> <title>Plugins in WeeChat</title> <para> A plugin is a C program which can call WeeChat functions defined in an interface. </para> <para> This C program does not need WeeChat sources to compile and can be dynamically loaded into WeeChat with command <command>/plugin</command>. </para> <para> The plugin has to be a dynamic library, for dynamic loading by operating system. Under GNU/Linux, the file has ".so" extension, ".dll" under Windows. </para> </section> <section id="secWriteAPlugin"> <title>Write a plugin</title> <para> The plugin has to include "weechat-plugin.h" file (available in WeeChat source code). This file defines structures and types used to communicate with WeeChat. </para> <para> The plugin must have some variables and functions (mandatory, without them the plugin can't load): <informaltable colsep="0" frame="none"> <tgroup cols="2"> <thead> <row> <entry>Variable</entry> <entry>Description</entry> </row> </thead> <tbody> <row> <entry><literal>char plugin_name[]</literal></entry> <entry>plugin name</entry> </row> <row> <entry><literal>char plugin_version[]</literal></entry> <entry>plugin version</entry> </row> <row> <entry><literal>char plugin_description[]</literal></entry> <entry>short description of plugin</entry> </row> </tbody> </tgroup> </informaltable> <informaltable colsep="0" frame="none"> <tgroup cols="2"> <thead> <row> <entry>Function</entry> <entry>Description</entry> </row> </thead> <tbody> <row> <entry><literal>int weechat_plugin_init (t_weechat_plugin *plugin)</literal></entry> <entry> function called when plugin is loaded, must return PLUGIN_RC_OK if successful, PLUGIN_RC_KO if error (if error, plugin will NOT be loaded) </entry> </row> <row> <entry><literal>void weechat_plugin_end (t_weechat_plugin *plugin)</literal></entry> <entry>function called when plugin is unloaded</entry> </row> </tbody> </tgroup> </informaltable> </para> <section id="secAPIFunctions"> <title>API functions</title> <section id="secAPI_ascii_strcasecmp"> <title>ascii_strcasecmp</title> <para> Prototype: <command> int ascii_strcasecmp (t_weechat_plugin *plugin, char *string1, char *string2) </command> </para> <para> Locale and case independent string comparison. </para> <para> Arguments: <itemizedlist> <listitem> <para> <option>plugin</option>: pointer to plugin structure </para> </listitem> <listitem> <para> <option>string1</option>: first string for comparison </para> </listitem> <listitem> <para> <option>string2</option>: second string for comparison </para> </listitem> </itemizedlist> </para> <para> Return value: difference between two strings: negative if string1 < string2, zero if string1 == string2, positive if string1 > string2 </para> <para> Example: <screen>if (plugin->ascii_strcasecmp (plugin, "abc", "def") != 0) ...</screen> </para> </section> <section id="secAPI_ascii_strncasecmp"> <title>ascii_strncasecmp</title> <para> Prototype: <command> int ascii_strncasecmp (t_weechat_plugin *plugin, char *string1, char *string2, int max) </command> </para> <para> Locale and case independent string comparison, for "max" chars. </para> <para> Arguments: <itemizedlist> <listitem> <para> <option>plugin</option>: pointer to plugin struct </para> </listitem> <listitem> <para> <option>string1</option>: first string for comparison </para> </listitem> <listitem> <para> <option>string2</option>: second string for comparison </para> </listitem> <listitem> <para> <option>max</option>: max number of chars for comparison </para> </listitem> </itemizedlist> </para> <para> Return value: difference between two strings: negative if string1 < string2, zero if string1 == string2, positive if string1 > string2 </para> <para> Example: <screen>if (plugin->ascii_strncasecmp (plugin, "abc", "def", 2) != 0) ...</screen> </para> </section> <section id="secAPI_explode_string"> <title>explode_string</title> <para> Prototype: <command> char **explode_string (t_weechat_plugin *plugin, char *string, char *separators, int num_items_max, int *num_items) </command> </para> <para> Explode a string according to one or more delimiter(s). </para> <para> Arguments: <itemizedlist> <listitem> <para> <option>plugin</option>: pointer to plugin struct </para> </listitem> <listitem> <para> <option>string</option>: string to explode </para> </listitem> <listitem> <para> <option>separators</option>: delimiters used for explosion </para> </listitem> <listitem> <para> <option>num_items_max</option>: maximum number of items created (0 = no limit) </para> </listitem> <listitem> <para> <option>num_items</option>: pointer to int which will contain number of items created </para> </listitem> </itemizedlist> </para> <para> Return value: array of strings, NULL if problem. </para> <para> Note: result has to be free by a call to "free_exloded_string" after use. </para> <para> Example: <screen> char **argv; int argc; argv = plugin->explode_string (plugin, string, " ", 0, &argc); ... if (argv != NULL) plugin->free_exploded_string (plugin, argv); </screen> </para> </section> <section id="secAPI_free_exploded_string"> <title>free_exploded_string</title> <para> Prototype: <command> char **free_exploded_string (t_weechat_plugin *plugin, char **string) </command> </para> <para> Free memory used by a string explosion. </para> <para> Arguments: <itemizedlist> <listitem> <para> <option>plugin</option>: pointer to plugin structure </para> </listitem> <listitem> <para> <option>string</option>: string exploded by "explode_string" function </para> </listitem> </itemizedlist> </para> <para> Return value: none. </para> <para> Example: <screen> char *argv; int argc; argv = plugin->explode_string (plugin, string, " ", 0, &argc); ... if (argv != NULL) plugin->free_exploded_string (plugin, argv); </screen> </para> </section> <section id="secAPI_exec_on_files"> <title>exec_on_files</title> <para> Prototype: <command> void exec_on_files (t_weechat_plugin *plugin, char *repertoire, int (*callback)(t_weechat_plugin *, char *)) </command> </para> <para> Execute a function on all files of a directory. </para> <para> Arguments: <itemizedlist> <listitem> <para> <option>plugin</option>: pointer to plugin structure </para> </listitem> <listitem> <para> <option>directory</option>: directory for searching files </para> </listitem> <listitem> <para> <option>callback</option>: function called for each file found </para> </listitem> </itemizedlist> </para> <para> Return value: none. </para> <para> Example: <screen> int callback (t_weechat_plugin *plugin, char *file) { plugin->print_server (plugin, "file: %s", file); return 1; } ... plugin->exec_on_files (plugin, "/tmp", &callback); </screen> </para> </section> <section id="secAPI_print"> <title>print</title> <para> Prototype: <command> void print (t_weechat_plugin *plugin, char *server, char *channel, char *message, ...) </command> </para> <para> Display a message on a WeeChat buffer, identified by server and channel (both may be NULL for current buffer). </para> <para> Arguments: <itemizedlist> <listitem> <para> <option>plugin</option>: pointer to plugin structure </para> </listitem> <listitem> <para> <option>server</option>: internal name of server to find buffer for message display (may be NULL) </para> </listitem> <listitem> <para> <option>channel</option>: name of channel to find buffer for message display (may be NULL) </para> </listitem> <listitem> <para> <option>message</option>: message </para> </listitem> </itemizedlist> </para> <para> Return value: none. </para> <para> Examples: <screen> plugin->print (plugin, NULL, NULL, "hello"); plugin->print (plugin, NULL, "#weechat", "hello"); plugin->print (plugin, "freenode", "#weechat", "hello"); </screen> </para> </section> <section id="secAPI_print_server"> <title>print_server</title> <para> Prototype: <command> void print_server (t_weechat_plugin *plugin, char *message, ...) </command> </para> <para> Display a message on current server buffer. </para> <para> Arguments: <itemizedlist> <listitem> <para> <option>plugin</option>: pointer to plugin structure </para> </listitem> <listitem> <para> <option>message</option>: message </para> </listitem> </itemizedlist> </para> <para> Return value: none. </para> <para> Example: <screen>plugin->print_server (plugin, "hello");</screen> </para> </section> <section id="secAPI_print_infobar"> <title>print_infobar</title> <para> Prototype: <command> void print_infobar (t_weechat_plugin *plugin, int time, char *message, ...) </command> </para> <para> Display a message in infobar for a specified time. </para> <para> Arguments: <itemizedlist> <listitem> <para> <option>plugin</option>: pointer to plugin structure </para> </listitem> <listitem> <para> <option>time</option>: time (in seconds) for displaying message (0 = never erased) </para> </listitem> </itemizedlist> </para> <para> Return value: none. </para> <para> Example: <screen> plugin->print_infobar (plugin, 5, "hello"); </screen> </para> </section> <section id="secAPI_infobar_remove"> <title>infobar_remove</title> <para> Prototype: <command> void infobar_remove (t_weechat_plugin *plugin, int count) </command> </para> <para> Remove one or more messages in infobar stack. </para> <para> Arguments: <itemizedlist> <listitem> <para> <option>plugin</option>: pointer to plugin structure </para> </listitem> <listitem> <para> <option>count</option>: number of messages to remove (if argument is <= 0, then all messages are removed) </para> </listitem> </itemizedlist> </para> <para> Return value: none. </para> <para> Example: <screen>plugin->infobar_remove (1);</screen> </para> </section> <section id="secAPI_log"> <title>log</title> <para> Prototype: <command> void log (t_weechat_plugin *plugin, char *server, char *channel, char *message, ...) </command> </para> <para> Write a message in log file for a server or a channel. </para> <para> Arguments: <itemizedlist> <listitem> <para> <option>plugin</option>: pointer to plugin structure </para> </listitem> <listitem> <para> <option>server</option>: internal name of server to find buffer for log (may be NULL) </para> </listitem> <listitem> <para> <option>channel</option>: name of channel to find buffer for log (may be NULL) </para> </listitem> <listitem> <para> <option>message</option>: message </para> </listitem> </itemizedlist> </para> <para> Return value: none. </para> <para> Example: <screen> plugin->log (plugin, "freenode", "#weechat", "test"); </screen> </para> </section> <section id="secAPI_msg_handler_add"> <title>msg_handler_add</title> <para> Prototype: <command> t_plugin_handler *msg_handler_add (t_weechat_plugin *plugin, char *message, t_plugin_handler_func *function, char *handler_args, void *handler_pointer) </command> </para> <para> Add an IRC message handler, called when an IRC message is received. </para> <para> Arguments: <itemizedlist> <listitem> <para> <option>plugin</option>: pointer to plugin structure </para> </listitem> <listitem> <para> <option>message</option>: name of IRC message. To know list of IRC messages, please consult <acronym>RFC</acronym>s <ulink url="http://www.ietf.org/rfc/rfc1459.txt">1459</ulink> and <ulink url="http://www.ietf.org/rfc/rfc2812.txt">2812</ulink>. Moreover you can use a special name, prefixed by "weechat_" to catch special events, as written in table below: <informaltable colsep="0" frame="none"> <tgroup cols="2"> <thead> <row> <entry>Name</entry> <entry>Description</entry> </row> </thead> <tbody> <row> <entry><literal>weechat_pv</literal></entry> <entry>private message received</entry> </row> <row> <entry><literal>weechat_highlight</literal></entry> <entry> message with highlight (on a channel or pv) </entry> </row> <row> <entry><literal>weechat_ctcp</literal></entry> <entry> CTCP message received (VERSION, PING, ..) </entry> </row> <row> <entry><literal>weechat_dcc</literal></entry> <entry> DCC message received (chat or file) </entry> </row> </tbody> </tgroup> </informaltable> </para> </listitem> <listitem> <para> <option>function</option>: function called when message is received </para> <para> It uses following prototype: <command> int my_function (t_weechat_plugin *plugin, int argc, char **argv, char *handler_args, void *handler_pointer) </command> </para> <para> Argument argc is set to 3, following values are set in argv array: <itemizedlist> <listitem> <para>argv[0] = server name</para> </listitem> <listitem> <para>argv[1] = IRC message</para> </listitem> <listitem> <para>argv[2] = command arguments</para> </listitem> </itemizedlist> </para> </listitem> <listitem> <para> <option>handler_args</option>: arguments given to function when called </para> </listitem> <listitem> <para> <option>handler_pointer</option>: pointer given to function when called </para> </listitem> </itemizedlist> </para> <para> Return value: pointer to new message handler. </para> <para> Note: function called when message is received has to return one of following values: <itemizedlist> <listitem> <para> <literal>PLUGIN_RC_KO</literal>: function failed </para> </listitem> <listitem> <para> <literal>PLUGIN_RC_OK</literal>: function successfully completed </para> </listitem> <listitem> <para> <literal>PLUGIN_RC_OK_IGNORE_WEECHAT</literal>: message will not be sent to WeeChat </para> </listitem> <listitem> <para> <literal>PLUGIN_RC_OK_IGNORE_PLUGINS</literal>: message will not be sent to other plugins </para> </listitem> <listitem> <para> <literal>PLUGIN_RC_OK_IGNORE_ALL</literal>: message will not be sent to WeeChat neither other plugins </para> </listitem> </itemizedlist> </para> <para> Example: <screen> int msg_kick (t_weechat_plugin *plugin, int argc, char **argv, char *handler_args, void *handler_pointer) { plugin->print (plugin, argv[0], NULL, "KICK received"); return PLUGIN_RC_OK; } ... plugin->msg_handler_add (plugin, "KICK", &msg_kick, NULL, NULL); </screen> </para> </section> <section id="secAPI_cmd_handler_add"> <title>cmd_handler_add</title> <para> Prototype: <command> t_plugin_handler *cmd_handler_add (t_weechat_plugin *plugin, char *command, char *description, char *arguments, char *arguments_description, char *completion_template, t_plugin_handler_func *fonction, char *handler_args, void *handler_pointer) </command> </para> <para> Add a WeeChat command handler, called when user uses command (for example /command). </para> <para> Arguments: <itemizedlist> <listitem> <para> <option>plugin</option>: pointer to plugin structure </para> </listitem> <listitem> <para> <option>command</option>: the new command name, which may be an existing command (be careful, replaced command will not be available until plugin is unloaded) </para> </listitem> <listitem> <para> <option>description</option>: short command description (displayed by /help command) </para> </listitem> <listitem> <para> <option>arguments</option>: short description of command arguments (displayed by /help command) </para> </listitem> <listitem> <para> <option>arguments_description</option>: long description of command arguments (displayed by /help command) </para> </listitem> <listitem> <para> <option>completion_template</option>: template for completion, like "<literal>abc|%w def|%i</literal>" which means "abc" or a WeeChat command for first argument, "def" or IRC command for second. An empty string lets WeeChat complete any argument with a nick from current channel, NULL disable completion for all command arguments. </para> <para> Following codes can be used: <informaltable colsep="0" frame="none"> <tgroup cols="2"> <thead> <row> <entry>Code</entry> <entry>Description</entry> </row> </thead> <tbody> <row> <entry><literal>%-</literal></entry> <entry>no completion for argument</entry> </row> <row> <entry><literal>%a</literal></entry> <entry>alias</entry> </row> <row> <entry><literal>%A</literal></entry> <entry> alias and commands (WeeChat, IRC and plugins) </entry> </row> <row> <entry><literal>%c</literal></entry> <entry>current channel</entry> </row> <row> <entry><literal>%C</literal></entry> <entry>channels of current server</entry> </row> <!-- <row> <entry><literal>%f</literal></entry> <entry>file name</entry> </row> --> <row> <entry><literal>%h</literal></entry> <entry>plugins commands</entry> </row> <row> <entry><literal>%i</literal></entry> <entry>IRC commands (sent)</entry> </row> <row> <entry><literal>%I</literal></entry> <entry>IRC commands (received)</entry> </row> <row> <entry><literal>%k</literal></entry> <entry>key functions</entry> </row> <row> <entry><literal>%n</literal></entry> <entry>nicks of current channel</entry> </row> <row> <entry><literal>%N</literal></entry> <entry>nicks and hostnames of current channel</entry> </row> <row> <entry><literal>%o</literal></entry> <entry>setup options</entry> </row> <row> <entry><literal>%O</literal></entry> <entry>plugin options</entry> </row> <row> <entry><literal>%p</literal></entry> <entry>default "part" message</entry> </row> <row> <entry><literal>%q</literal></entry> <entry>default "quit" message</entry> </row> <row> <entry><literal>%s</literal></entry> <entry>current server name</entry> </row> <row> <entry><literal>%S</literal></entry> <entry>all servers names</entry> </row> <row> <entry><literal>%t</literal></entry> <entry>topic of current channel</entry> </row> <row> <entry><literal>%v</literal></entry> <entry>setup option value</entry> </row> <row> <entry><literal>%V</literal></entry> <entry>plugin option value</entry> </row> <row> <entry><literal>%w</literal></entry> <entry>WeeChat commands</entry> </row> </tbody> </tgroup> </informaltable> </para> </listitem> <listitem> <para> <option>function</option>: function called when command is executed </para> <para> It uses following prototype: <command> int my_function (t_weechat_plugin *plugin, int argc, char **argv, char *handler_args, void *handler_pointer) </command> </para> <para> Argument argc is set to 3, following values are set in argc array: <itemizedlist> <listitem> <para>argv[0] = server name</para> </listitem> <listitem> <para>argv[1] = command</para> </listitem> <listitem> <para>argv[2] = command arguments</para> </listitem> </itemizedlist> </para> </listitem> <listitem> <para> <option>handler_args</option>: arguments given to function when called </para> </listitem> <listitem> <para> <option>handler_pointer</option>: pointer given to function when called </para> </listitem> </itemizedlist> </para> <para> Return value: pointer to new command handler. </para> <para> Note: function called when command is executed has to return one of following values: <itemizedlist> <listitem> <para> <literal>PLUGIN_RC_KO</literal>: function failed </para> </listitem> <listitem> <para> <literal>PLUGIN_RC_OK</literal>: function successfully completed </para> </listitem> </itemizedlist> </para> <para> Example: <screen> int cmd_test (t_weechat_plugin *plugin, int argc, char **argv, char *handler_args, void *handler_pointer) { plugin->print (plugin, argv[0], NULL, "test command, nick: %s", (argv[2]) ? argv[2] : "none"); return PLUGIN_RC_OK; } ... plugin->cmd_handler_add (plugin, "test", "Test command", "[nick]", "nick: nick of channel", "%n", &cmd_test, NULL, NULL); </screen> </para> </section> <section id="secAPI_timer_handler_add"> <title>timer_handler_add</title> <para> Prototype: <command> t_plugin_handler *timer_handler_add (t_weechat_plugin *plugin, int interval, t_plugin_handler_func *function, char *handler_args, void *handler_pointer) </command> </para> <para> Add a timer handler which periodically calls a function. </para> <para> Arguments: <itemizedlist> <listitem> <para> <option>plugin</option>: pointer to plugin structure </para> </listitem> <listitem> <para> <option>interval</option>: interval (in seconds) between two calls of function. </para> </listitem> <listitem> <para> <option>function</option>: function called </para> <para> It uses following prototype: <command> int my_function (t_weechat_plugin *plugin, int argc, char **argv, char *handler_args, void *handler_pointer) </command> </para> <para> Argument argc is set to 0, and argv is set to NULL. </para> </listitem> <listitem> <para> <option>handler_args</option>: arguments given to function when called </para> </listitem> <listitem> <para> <option>handler_pointer</option>: pointer given to function when called </para> </listitem> </itemizedlist> </para> <para> Return value: pointer to new timer handler. </para> <para> Note: function called has to return one of following values: <itemizedlist> <listitem> <para> <literal>PLUGIN_RC_KO</literal>: function failed </para> </listitem> <listitem> <para> <literal>PLUGIN_RC_OK</literal>: function successfully completed </para> </listitem> </itemizedlist> </para> <para> Example: <screen> int my_timer (t_weechat_plugin *plugin, int argc, char **argv, char *handler_args, void *handler_pointer) { plugin->print (plugin, NULL, NULL, "my timer"); return PLUGIN_RC_OK; } ... plugin->timer_handler_add (plugin, 60, &my_timer); </screen> </para> </section> <section id="secAPI_keyboard_handler_add"> <title>keyboard_handler_add</title> <para> Prototype: <command> t_plugin_handler *keyboard_handler_add (t_weechat_plugin *plugin, t_plugin_handler_func *function, char *handler_args, void *handler_pointer) </command> </para> <para> Add a keyboard handler, called for any key pressed. </para> <para> Arguments: <itemizedlist> <listitem> <para> <option>plugin</option>: pointer to plugin structure </para> </listitem> <listitem> <para> <option>function</option>: function called </para> <para> It uses following prototype: <command> int my_function (t_weechat_plugin *plugin, int argc, char **argv, char *handler_args, void *handler_pointer) </command> </para> <para> Argument argc is set to 3, following values are set in argc array: <itemizedlist> <listitem> <para> argv[0] = key pressed (name of internal function or '*' followed by a key code) </para> </listitem> <listitem> <para> argv[1] = command line before key action </para> </listitem> <listitem> <para> argv[2] = command line after key action </para> </listitem> </itemizedlist> </para> </listitem> <listitem> <para> <option>handler_args</option>: arguments given to function when called </para> </listitem> <listitem> <para> <option>handler_pointer</option>: pointer given to function when called </para> </listitem> </itemizedlist> </para> <para> Return value: pointer to new message handler. </para> <para> Note: function called has to return one of following values: <itemizedlist> <listitem> <para> <literal>PLUGIN_RC_KO</literal>: function failed </para> </listitem> <listitem> <para> <literal>PLUGIN_RC_OK</literal>: function successfully completed </para> </listitem> </itemizedlist> </para> <para> Example: <screen> int keyb_handler (t_weechat_plugin *plugin, int argc, char **argv, char *handler_args, void *handler_pointer) { if (argc == 2) { plugin->print (plugin, NULL, NULL, "key pressed: %s", argv[0]); if (argv[1] && (argv[1][0] == '1')) plugin->print (plugin, NULL, NULL, "input text changed"); else plugin->print (plugin, NULL, NULL, "input text not changed"); } return PLUGIN_RC_OK; } ... plugin->keyboard_handler_add (plugin, &keyb_handler); </screen> </para> </section> <section id="secAPI_handler_remove"> <title>handler_remove</title> <para> Prototype: <command> void handler_remove (t_weechat_plugin *plugin, t_plugin_handler *handler) </command> </para> <para> Remove a command or message handler. </para> <para> Arguments: <itemizedlist> <listitem> <para> <option>plugin</option>: pointer to plugin structure </para> </listitem> <listitem> <para> <option>handler</option>: handler to remove </para> </listitem> </itemizedlist> </para> <para> Return value: none. </para> <para> Example: <screen>plugin->handler_remove (plugin, my_handler);</screen> </para> </section> <section id="secAPI_handler_remove_all"> <title>handler_remove_all</title> <para> Prototype: <command> void handler_remove_all (t_weechat_plugin *plugin) </command> </para> <para> Remove all handlers for a plugin. </para> <para> Arguments: <itemizedlist> <listitem> <para> <option>plugin</option>: pointer to plugin structure </para> </listitem> </itemizedlist> </para> <para> Return value: none. </para> <para> Example: <screen>plugin->handler_remove_all (plugin);</screen> </para> </section> <section id="secAPI_exec_command"> <title>exec_command</title> <para> Prototype: <command> void exec_command (t_weechat_plugin *plugin, char *server, char *channel, char *command) </command> </para> <para> Execute a WeeChat command (or send a message to a channel). </para> <para> Arguments: <itemizedlist> <listitem> <para> <option>plugin</option>: pointer to plugin structure </para> </listitem> <listitem> <para> <option>server</option>: internal name of server for executing command (may be NULL) </para> </listitem> <listitem> <para> <option>channel</option>: name of channel for executing command (may be NULL) </para> </listitem> <listitem> <para> <option>command</option>: command </para> </listitem> </itemizedlist> </para> <para> Return value: none. </para> <para> Examples: <screen> plugin->exec_command (plugin, NULL, NULL, "/help nick"); plugin->exec_command (plugin, "freenode", "#weechat", "hello"); </screen> </para> </section> <section id="secAPI_get_info"> <title>get_info</title> <para> Prototype: <command> char *get_info (t_weechat_plugin *plugin, char *info, char *server) </command> </para> <para> Return an info about WeeChat or a channel. </para> <para> Arguments: <itemizedlist> <listitem> <para> <option>plugin</option>: pointer to plugin structure </para> </listitem> <listitem> <para> <option>info</option> : name of info to read: <informaltable colsep="0" frame="none"> <tgroup cols="2"> <thead> <row> <entry>Info</entry> <entry>Description</entry> </row> </thead> <tbody> <row> <entry><literal>version</literal></entry> <entry>WeeChat's version</entry> </row> <row> <entry><literal>nick</literal></entry> <entry>nick</entry> </row> <row> <entry><literal>channel</literal></entry> <entry> name of channel (NULL for a server or private) </entry> </row> <row> <entry><literal>server</literal></entry> <entry>name of server</entry> </row> <row> <entry><literal>away</literal></entry> <entry>"away" flag</entry> </row> <row> <entry><literal>inactivity</literal></entry> <entry> number of seconds since last key was pressed </entry> </row> <row> <entry><literal>input</literal></entry> <entry> content of command line for current window </entry> </row> <row> <entry><literal>input_mask</literal></entry> <entry> content of color mask for command line </entry> </row> <row> <entry><literal>input_pos</literal></entry> <entry> cursor position in command line </entry> </row> <row> <entry><literal>weechat_dir</literal></entry> <entry> WeeChat home directory (by default: ~/.weechat/) </entry> </row> <row> <entry><literal>weechat_libdir</literal></entry> <entry>WeeChat system lib directory</entry> </row> <row> <entry><literal>weechat_sharedir</literal></entry> <entry>WeeChat system share directory</entry> </row> </tbody> </tgroup> </informaltable> </para> </listitem> <listitem> <para> <option>server</option>: internal name of server for reading info (if needed) </para> </listitem> </itemizedlist> </para> <para> Return value: information asked, NULL if not found. </para> <para> Note: result has to be free by a call to "free" function after use. </para> <para> Examples: <screen> char *version = plugin->get_info (plugin, "version", NULL); char *nick = plugin->get_info (plugin, "nick", "freenode"); char *inactivity = plugin->get_info (plugin, "inactivity", NULL); plugin->print (plugin, NULL, NULL, "WeeChat version %s, you are %s on freenode " "(inactive for %s seconds)", version, nick, inactivity); if (version) free (version); if (nick) free (nick); if (inactivity) free (inactivity); </screen> </para> </section> <section id="secAPI_get_dcc_info"> <title>get_dcc_info</title> <para> Prototype: <command> t_plugin_info_dcc *get_dcc_info (t_weechat_plugin *plugin) </command> </para> <para> Return list of DCC currently active or finished. </para> <para> Arguments: <itemizedlist> <listitem> <para> <option>plugin</option>: pointer to plugin structure </para> </listitem> </itemizedlist> </para> <para> Return value: linked list of DCC. <informaltable colsep="0" frame="none"> <tgroup cols="2"> <thead> <row> <entry>Type</entry> <entry>Field</entry> <entry>Description</entry> </row> </thead> <tbody> <row> <entry>char *</entry> <entry><literal>server</literal></entry> <entry>IRC server</entry> </row> <row> <entry>char *</entry> <entry><literal>channel</literal></entry> <entry>IRC channel</entry> </row> <row> <entry>int</entry> <entry><literal>type</literal></entry> <entry> DCC type: 0 = chat received, 1 = chat sent, 2 = file received, 3 = file sent </entry> </row> <row> <entry>int*</entry> <entry><literal>status</literal></entry> <entry> DCC status: 0 = waiting, 1 = connecting, 2 = active, 3 = finished, 4 = failed, 5 = interrupted by user </entry> </row> <row> <entry>time_t</entry> <entry><literal>start_time</literal></entry> <entry>date/time of DCC creation</entry> </row> <row> <entry>time_t</entry> <entry><literal>start_transfer</literal></entry> <entry>date/time of DCC transfer start</entry> </row> <row> <entry>unsigned long</entry> <entry><literal>addr</literal></entry> <entry>IP address of remote user</entry> </row> <row> <entry>int</entry> <entry><literal>port</literal></entry> <entry>port used for DCC</entry> </row> <row> <entry>char *</entry> <entry><literal>nick</literal></entry> <entry>remote nick</entry> </row> <row> <entry>char *</entry> <entry><literal>filename</literal></entry> <entry>file name</entry> </row> <row> <entry>char *</entry> <entry><literal>local_filename</literal></entry> <entry>local file name</entry> </row> <row> <entry>int</entry> <entry><literal>filename_suffix</literal></entry> <entry>suffix if renaming file</entry> </row> <row> <entry>unsigned long</entry> <entry><literal>size</literal></entry> <entry>file size</entry> </row> <row> <entry>unsigned long</entry> <entry><literal>pos</literal></entry> <entry>position in file</entry> </row> <row> <entry>unsigned long</entry> <entry><literal>start_resume</literal></entry> <entry>start position after interruption</entry> </row> <row> <entry>unsigned long</entry> <entry><literal>bytes_per_sec</literal></entry> <entry> number of bytes per second since transfer start </entry> </row> <row> <entry>t_plugin_dcc_info *</entry> <entry><literal>prev_dcc</literal></entry> <entry> pointer to previous DCC info </entry> </row> <row> <entry>t_plugin_dcc_info *</entry> <entry><literal>next_dcc</literal></entry> <entry> pointer to next DCC info </entry> </row> </tbody> </tgroup> </informaltable> </para> <para> Note: result has to be free by a call to "free_dcc_info" function after use. </para> <para> Examples: <screen> t_plugin_dcc_info *dcc_info = plugin->get_dcc_info (plugin); for (ptr_dcc = dcc_info; ptr_dcc; ptr_dcc = ptr_dcc->next_dcc) { plugin->print_server (plugin, "DCC type=%d, with: %s", ptr_dcc->type, ptr_dcc->nick); } if (dcc_info) plugin->free_dcc_info (plugin, dcc_info); </screen> </para> </section> <section id="secAPI_free_dcc_info"> <title>free_dcc_info</title> <para> Prototype: <command> void free_dcc_info (t_weechat_plugin *plugin, t_plugin_dcc_info *dcc_info) </command> </para> <para> Free memory used by a DCC list. </para> <para> Arguments: <itemizedlist> <listitem> <para> <option>plugin</option>: pointer to plugin structure </para> </listitem> <listitem> <para> <option>dcc_info</option>: pointer to DCC list returned by "get_dcc_info" function </para> </listitem> </itemizedlist> </para> <para> Return value: none. </para> <para> Example: <screen>plugin->free_dcc_info (plugin, dcc_info);</screen> </para> </section> <section id="secAPI_get_server_info"> <title>get_server_info</title> <para> Prototype: <command> t_plugin_server_info *get_server_info (t_weechat_plugin *plugin) </command> </para> <para> Return list of IRC servers (connected or not). </para> <para> Arguments: <itemizedlist> <listitem> <para> <option>plugin</option>: pointer to plugin structure </para> </listitem> </itemizedlist> </para> <para> Return value: linked list of IRC servers. <informaltable colsep="0" frame="none"> <tgroup cols="2"> <thead> <row> <entry>Type</entry> <entry>Field</entry> <entry>Description</entry> </row> </thead> <tbody> <row> <entry>char *</entry> <entry><literal>name</literal></entry> <entry>server internal name</entry> </row> <row> <entry>int</entry> <entry><literal>autoconnect</literal></entry> <entry>1 if autoconnect at start-up, 0 otherwise</entry> </row> <row> <entry>int</entry> <entry><literal>autoreconnect</literal></entry> <entry> 1 if autoreconnect when disconnected, 0 otherwise </entry> </row> <row> <entry>int</entry> <entry><literal>autoreconnect_delay</literal></entry> <entry>delay before trying again connection</entry> </row> <row> <entry>int</entry> <entry><literal>command_line</literal></entry> <entry> 1 if server was on command line (so it is temporary), 0 otherwise </entry> </row> <row> <entry>char *</entry> <entry><literal>address</literal></entry> <entry>server address (host or IP)</entry> </row> <row> <entry>int</entry> <entry><literal>port</literal></entry> <entry>port</entry> </row> <row> <entry>int</entry> <entry><literal>ipv6</literal></entry> <entry>IPv6 connection</entry> </row> <row> <entry>int</entry> <entry><literal>ssl</literal></entry> <entry>SSL connection</entry> </row> <row> <entry>char *</entry> <entry><literal>password</literal></entry> <entry>server password</entry> </row> <row> <entry>char *</entry> <entry><literal>nick1</literal></entry> <entry>first nickname</entry> </row> <row> <entry>char *</entry> <entry><literal>nick2</literal></entry> <entry>alternate nickname</entry> </row> <row> <entry>char *</entry> <entry><literal>nick3</literal></entry> <entry>second alternate nickname</entry> </row> <row> <entry>char *</entry> <entry><literal>username</literal></entry> <entry>user name</entry> </row> <row> <entry>char *</entry> <entry><literal>real name</literal></entry> <entry>real name</entry> </row> <row> <entry>char *</entry> <entry><literal>command</literal></entry> <entry>command run once connected</entry> </row> <row> <entry>int</entry> <entry><literal>command_delay</literal></entry> <entry>delay after execution of command</entry> </row> <row> <entry>char *</entry> <entry><literal>autojoin</literal></entry> <entry>channels joined automatically</entry> </row> <row> <entry>int</entry> <entry><literal>autorejoin</literal></entry> <entry> 1 if channels are rejoined when kicked, 0 otherwise </entry> </row> <row> <entry>char *</entry> <entry><literal>notify_levels</literal></entry> <entry>channels notify levels</entry> </row> <row> <entry>char *</entry> <entry><literal>charset_decode_iso</literal></entry> <entry>channels charsets for decoding ISO</entry> </row> <row> <entry>char *</entry> <entry><literal>charset_decode_utf</literal></entry> <entry>channels charsets for decoding UTF</entry> </row> <row> <entry>char *</entry> <entry><literal>charset_encode</literal></entry> <entry>channels charsets for encoding messages</entry> </row> <row> <entry>int</entry> <entry><literal>is_connected</literal></entry> <entry>1 if connected to server, 0 otherwise</entry> </row> <row> <entry>int</entry> <entry><literal>ssl_connected</literal></entry> <entry>1 if connected with SSL, 0 otherwise</entry> </row> <row> <entry>char *</entry> <entry><literal>nick</literal></entry> <entry>current nickname</entry> </row> <row> <entry>int</entry> <entry><literal>is_away</literal></entry> <entry>1 if away, 0 otherwise</entry> </row> <row> <entry>time_t</entry> <entry><literal>away_time</literal></entry> <entry>time when user is marking as away</entry> </row> <row> <entry>int</entry> <entry><literal>lag</literal></entry> <entry>lag (in milliseconds)</entry> </row> <row> <entry>t_plugin_server_info *</entry> <entry><literal>prev_server</literal></entry> <entry>pointer to previous server info</entry> </row> <row> <entry>t_plugin_server_info *</entry> <entry><literal>next_server</literal></entry> <entry>pointer to next server info</entry> </row> </tbody> </tgroup> </informaltable> </para> <para> Note: result has to be free by a call to "free_server_info" function after use. </para> <para> Example: <screen> t_plugin_server_info *server_info, *ptr_server_info; server_info = plugin->get_server_info (plugin); if (server_info) { for (ptr_server_info = server_info; ptr_server_info; ptr_server_info = ptr_server_info->next_server) { plugin->print (plugin, NULL, NULL, "server: %s, address: %s, port: %d %s", ptr_server_info->name, ptr_server_info->address, ptr_server_info->port, (ptr_server_info->is_connected) ? "(connected)" : ""); } plugin->free_server_info (plugin, server_info); } </screen> </para> </section> <section id="secAPI_free_server_info"> <title>free_server_info</title> <para> Prototype: <command> void free_server_info (t_weechat_plugin *plugin, t_plugin_server_info *server_info) </command> </para> <para> Free memory used by server info list. </para> <para> Arguments: <itemizedlist> <listitem> <para> <option>plugin</option>: pointer to plugin structure </para> </listitem> <listitem> <para> <option>server_info</option>: pointer to server list returned by "get_server_info" function </para> </listitem> </itemizedlist> </para> <para> Return value: none. </para> <para> Example: <screen>plugin->free_server_info (plugin, server_info);</screen> </para> </section> <section id="secAPI_get_channel_info"> <title>get_channel_info</title> <para> Prototype: <command> t_plugin_channel_info *get_channel_info (t_weechat_plugin *plugin, char *server) </command> </para> <para> Return list of IRC channels for a server. </para> <para> Arguments: <itemizedlist> <listitem> <para> <option>plugin</option>: pointer to plugin structure </para> </listitem> <listitem> <para> <option>server</option>: internal server name </para> </listitem> </itemizedlist> </para> <para> Return value: linked list of IRC channels for server. <informaltable colsep="0" frame="none"> <tgroup cols="2"> <thead> <row> <entry>Type</entry> <entry>Field</entry> <entry>Description</entry> </row> </thead> <tbody> <row> <entry>int</entry> <entry><literal>type</literal></entry> <entry>0 for a channel, 1 for a private</entry> </row> <row> <entry>char *</entry> <entry><literal>name</literal></entry> <entry>name of channel</entry> </row> <row> <entry>char *</entry> <entry><literal>topic</literal></entry> <entry>topic of channel</entry> </row> <row> <entry>char *</entry> <entry><literal>modes</literal></entry> <entry>channel modes</entry> </row> <row> <entry>int</entry> <entry><literal>limit</literal></entry> <entry>user limit</entry> </row> <row> <entry>char *</entry> <entry><literal>key</literal></entry> <entry>channel key</entry> </row> <row> <entry>int</entry> <entry><literal>nicks_count</literal></entry> <entry>number of nicks on channel</entry> </row> <row> <entry>t_plugin_channel_info *</entry> <entry><literal>prev_channel</literal></entry> <entry>pointer to previous channel info</entry> </row> <row> <entry>t_plugin_channel_info *</entry> <entry><literal>next_channel</literal></entry> <entry>pointer to next channel info</entry> </row> </tbody> </tgroup> </informaltable> </para> <para> Note: result has to be free by a call to "free_channel_info" function after use. </para> <para> Example: <screen> t_plugin_channel_info *channel_info, *ptr_chan_info; channel_info = plugin->get_channel_info (plugin, "freenode"); if (channel_info) { for (ptr_chan_info = channel_info; ptr_chan_info; ptr_chan_info = ptr_chan_info->next_channel) { plugin->print (plugin, NULL, NULL, " %s (type %d)", ptr_chan_info->name, ptr_chan_info->type); } plugin->free_channel_info (plugin, channel_info); } </screen> </para> </section> <section id="secAPI_free_channel_info"> <title>free_channel_info</title> <para> Prototype: <command> void free_channel_info (t_weechat_plugin *plugin, t_plugin_channel_info *channel_info) </command> </para> <para> Free memory used by channel info list. </para> <para> Arguments: <itemizedlist> <listitem> <para> <option>plugin</option>: pointer to plugin structure </para> </listitem> <listitem> <para> <option>channel_info</option>: pointer to channel info list returned by "get_channel_info" function </para> </listitem> </itemizedlist> </para> <para> Return value: none. </para> <para> Example: <screen>plugin->free_channel_info (plugin, channel_info);</screen> </para> </section> <section id="secAPI_get_nick_info"> <title>get_nick_info</title> <para> Prototype: <command> t_plugin_nick_info *get_nick_info (t_weechat_plugin *plugin, char *server, char *channel) </command> </para> <para> Return list of nicks for a channel. </para> <para> Arguments: <itemizedlist> <listitem> <para> <option>plugin</option>: pointer to plugin structure </para> </listitem> <listitem> <para> <option>server</option>: internal server name </para> </listitem> <listitem> <para> <option>channel</option>: channel name </para> </listitem> </itemizedlist> </para> <para> Return value: linked list of nicks on channel. <informaltable colsep="0" frame="none"> <tgroup cols="2"> <thead> <row> <entry>Type</entry> <entry>Field</entry> <entry>Description</entry> </row> </thead> <tbody> <row> <entry>char *</entry> <entry><literal>nick</literal></entry> <entry>nick name</entry> </row> <row> <entry>char *</entry> <entry><literal>host</literal></entry> <entry>hostname</entry> </row> <row> <entry>int</entry> <entry><literal>flags</literal></entry> <entry> nick flags, binary "or" between values (1 = channel owner, 2 = channel admin, 4 = op, 8 = halfop, 16 = voice, 32 = away) </entry> </row> <row> <entry>t_plugin_nick_info *</entry> <entry><literal>prev_nick</literal></entry> <entry>pointer to previous nick info</entry> </row> <row> <entry>t_plugin_nick_info *</entry> <entry><literal>next_nick</literal></entry> <entry>pointer to next nick info</entry> </row> </tbody> </tgroup> </informaltable> </para> <para> Note: result has to be free by a call to "free_nick_info" function after use. </para> <para> Example: <screen> t_plugin_nick_info *nick_info, *ptr_nick_info; nick_info = plugin->get_nick_info (plugin, "freenode", "#weechat"); if (nick_info) { for (ptr_nick_info = nick_info; ptr_nick_info; ptr_nick_info = ptr_nick_info->next_nick) { plugin->print (plugin, NULL, NULL, " %s (flags: %d)", ptr_nick_info->nick, ptr_nick_info->flags); } plugin->free_nick_info (plugin, nick_info); } </screen> </para> </section> <section id="secAPI_free_nick_info"> <title>free_nick_info</title> <para> Prototype: <command> void free_nick_info (t_weechat_plugin *plugin, t_plugin_nick_info *nick_info) </command> </para> <para> Free memory used by nick info list. </para> <para> Arguments: <itemizedlist> <listitem> <para> <option>plugin</option>: pointer to plugin structure </para> </listitem> <listitem> <para> <option>nick_info</option>: pointer to nick info list returned by "get_nick_info" function </para> </listitem> </itemizedlist> </para> <para> Return value: none. </para> <para> Example: <screen>plugin->free_nick_info (plugin, nick_info);</screen> </para> </section> <section id="secAPI_get_config"> <title>get_config</title> <para> Prototype: <command> char *get_config (t_weechat_plugin *plugin, char *option) </command> </para> <para> Return value of a WeeChat config option. </para> <para> Arguments: <itemizedlist> <listitem> <para> <option>plugin</option>: pointer to plugin structure </para> </listitem> <listitem> <para> <option>option</option>: name of option to read </para> </listitem> </itemizedlist> </para> <para> Return value: option value, NULL if not found. </para> <para> Note: result has to be free by a call to "free" function after use. </para> <para> Examples: <screen> char *value1 = plugin->get_config (plugin, "look_set_title"); char *value2 = plugin->get_config (plugin, "freenode.server_autojoin"); </screen> </para> </section> <section id="secAPI_set_config"> <title>set_config</title> <para> Prototype: <command> int set_config (t_weechat_plugin *plugin, char *option, char *value) </command> </para> <para> Update value of a WeeChat config option. </para> <para> Arguments: <itemizedlist> <listitem> <para> <option>plugin</option>: pointer to plugin structure </para> </listitem> <listitem> <para> <option>option</option>: name of option to update </para> </listitem> <listitem> <para> <option>value</option>: new value for option </para> </listitem> </itemizedlist> </para> <para> Return value: 1 if option was successfully updated, 0 if an error occurred. </para> <para> Example: <screen> plugin->set_config (plugin, "look_nicklist", "off"); </screen> </para> </section> <section id="secAPI_get_plugin_config"> <title>get_plugin_config</title> <para> Prototype: <command> char *get_plugin_config (t_weechat_plugin *plugin, char *option) </command> </para> <para> Return value of a plugin option. Option is read from file "<literal>~/.weechat/plugins.rc</literal>" and is like: "<literal>plugin.option=value</literal>" (note: plugin name is automatically added). </para> <para> Arguments: <itemizedlist> <listitem> <para> <option>plugin</option>: pointer to plugin structure </para> </listitem> <listitem> <para> <option>option</option>: name of option to read </para> </listitem> </itemizedlist> </para> <para> Return value: option value, NULL if not found. </para> <para> Note: result has to be free by a call to "free" function after use. </para> <para> Example: <screen> char *value = plugin->get_plugin_config (plugin, "my_var"); </screen> </para> </section> <section id="secAPI_set_plugin_config"> <title>set_plugin_config</title> <para> Prototype: <command> int set_plugin_config (t_weechat_plugin *plugin, char *option, char *value) </command> </para> <para> Update value of a plugin option. Option is written in file "<literal>~/.weechat/plugins.rc</literal>" and is like: "<literal>plugin.option=value</literal>" (note: plugin name is automatically added). </para> <para> Arguments: <itemizedlist> <listitem> <para> <option>plugin</option>: pointer to plugin structure </para> </listitem> <listitem> <para> <option>option</option>: name of option to update </para> </listitem> <listitem> <para> <option>value</option>: new value for option </para> </listitem> </itemizedlist> </para> <para> Return value: 1 if option was successfully updated, 0 if an error occurred. </para> <para> Example : <screen> plugin->set_plugin_config (plugin, "my_var", "value"); </screen> </para> </section> </section> <section id="secCompilePlugin"> <title>Compile plugin</title> <para> Compile does not need WeeChat sources, only file "<literal>weechat-plugin.h</literal>". </para> <para> To compile a plugin which has one file "toto.c" (under GNU/Linux): <screen> <prompt>$ </prompt><userinput>gcc -fPIC -Wall -c toto.c</userinput> <prompt>$ </prompt><userinput>gcc -shared -fPIC -o libtoto.so toto.o</userinput> </screen> </para> </section> <section id="secLoadPlugin"> <title>Load plugin into WeeChat</title> <para> Copy "libtoto.so" file into system plugins directory (for example "<literal>/usr/local/lib/weechat/plugins</literal>") or into user's plugins directory (for example "<literal>/home/xxxxx/.weechat/plugins</literal>"). </para> <para> Under WeeChat: <screen><userinput>/plugin load toto</userinput></screen> </para> </section> <section id="secPluginExample"> <title>Plugin example</title> <para> Full example of plugin, which adds a /double command, which displays two times arguments on current channel (ok that's not very useful, but that's just an example!): <screen> #include <stdlib.h> #include "weechat-plugin.h" char plugin_name[] = "Double"; char plugin_version[] = "0.1"; char plugin_description[] = "Test plugin for WeeChat"; /* "/double" command manager */ int double_cmd (t_weechat_plugin *plugin, int argc, char **argv, char *handler_args, void *handler_pointer) { if (argv[2] && (argv[2][0] != '/')) { plugin->exec_command (plugin, NULL, NULL, argv[2]); plugin->exec_command (plugin, NULL, NULL, argv[2]); } return PLUGIN_RC_OK; } int weechat_plugin_init (t_weechat_plugin *plugin) { plugin->cmd_handler_add (plugin, "double", "Display two times a message", "msg", "msg: message to display two times", NULL, &double_cmd, NULL, NULL); return PLUGIN_RC_OK; } void weechat_plugin_end (t_weechat_plugin *plugin) { /* nothing done here */ } </screen> </para> </section> </section> <section id="secScriptsPlugins"> <title>Scripts plugins</title> <para> Four plugins are provided with WeeChat to use script languages: Perl, Python, Ruby and Lua. </para> <section id="secLoadUnloadScripts"> <title>Load / unload scripts</title> <para> Scripts are loaded and unloaded with <command>/perl</command>, <command>/python</command>, <command>/ruby</command> and <command>/lua</command> commands (type <command>/help</command> in WeeChat for help about commands). </para> <para> Examples: <itemizedlist> <listitem> <para> Load a Perl script: <command><userinput>/perl load /tmp/test.pl</userinput></command> </para> </listitem> <listitem> <para> List all loaded Perl scripts: <command><userinput>/perl</userinput></command> </para> </listitem> <listitem> <para> Load a Python script: <command><userinput>/python load /tmp/test.py</userinput></command> </para> </listitem> <listitem> <para> List all loaded Python scripts: <command><userinput>/python</userinput></command> </para> </listitem> <listitem> <para> Load a Ruby script: <command><userinput>/ruby load /tmp/test.rb</userinput></command> </para> </listitem> <listitem> <para> List all loaded Ruby scripts: <command><userinput>/ruby</userinput></command> </para> </listitem> <listitem> <para> Load a Lua script: <command><userinput>/lua load /tmp/test.lua</userinput></command> </para> </listitem> <listitem> <para> List all loaded Lua scripts: <command><userinput>/lua</userinput></command> </para> </listitem> </itemizedlist> </para> </section> <section id="secSyntaxByLanguage"> <title>Syntax by language</title> <section> <title>Perl</title> <para> In a WeeChat Perl script, all API functions and variables are prefixed by "<literal>weechat::</literal>". Example: <screen>weechat::register("test", "1.0", "end_test", "WeeChat perl script");</screen> </para> </section> <section> <title>Python</title> <para> A WeeChat Python script has to start by importing weechat: <screen>import weechat</screen> </para> <para> All API functions and variables are prefixed by "<literal>weechat.</literal>". Example: <screen>weechat.register("test", "1.0", "end_test", "WeeChat python script")</screen> </para> </section> <section> <title>Ruby</title> <para> In a WeeChat Ruby script, all code has to be in functions. So for main code, you have to define a "<literal>weechat_init</literal>" function, which is automatically called when script is loaded by WeeChat. Example: <screen> def weechat_init Weechat.register("test", "1.0", "end_test", "WeeChat ruby script") Weechat.add_command_handler("command", "my_command") return Weechat::PLUGIN_RC_OK end def my_command(server, args) Weechat.print("my command") return Weechat::PLUGIN_RC_OK end </screen> </para> <para> All API functions are prefixed by "<literal>Weechat.</literal>" and variables by "<literal>Weechat::</literal>". </para> </section> <section> <title>Lua</title> <para> In a WeeChat Lua script, all API functions are prefixed by "<literal>weechat.</literal>". Variables are prefixed by "<literal>weechat.</literal>" and suffixed by "<literal>()</literal>". Example: <screen> function message_handler(server, args) weechat.print("I am a message handler") return weechat.PLUGIN_RC_OK() end </screen> </para> </section> </section> <section id="secWeeChatScriptsAPI"> <title>WeeChat / scripts API</title> <section> <title>register</title> <para> Perl prototype: <command> weechat::register(name, version, end_function, description); </command> </para> <para> Python prototype: <command> weechat.register(name, version, end_function, description) </command> </para> <para> Ruby prototype: <command> Weechat.register(name, version, end_function, description) </command> </para> <para> Lua prototype: <command> weechat.register(name, version, end_function, description) </command> </para> <para> This is first function to call in script. All WeeChat scripts have to call this function. </para> <para> Arguments: <itemizedlist> <listitem> <para> <option>name</option>: unique name to identify script (each script must have unique name) </para> </listitem> <listitem> <para> <option>version</option>: script version </para> </listitem> <listitem> <para> <option>end_function</option>: function called when script is unloaded (optional parameter, empty string means nothing is called at the end) </para> </listitem> <listitem> <para> <option>description</option>: short description of script </para> </listitem> </itemizedlist> </para> <para> Return value: 1 if script was registered, 0 if an error occured. </para> <para> Examples: <screen> # perl weechat::register("test", "1.0", "end_test", "Test script!"); # python weechat.register("test", "1.0", "end_test", "Test script!") # ruby Weechat.register("test", "1.0", "end_test", "Test script!") -- lua weechat.register("test", "1.0", "end_test", "Test script!") </screen> </para> </section> <section> <title>print</title> <para> Perl prototype: <command> weechat::print(message, [channel, [server]]) </command> </para> <para> Python prototype: <command> weechat.prnt(message, [channel, [server]]) </command> </para> <para> Ruby prototype: <command> Weechat.print(message, [channel, [server]]) </command> </para> <para> Lua prototype: <command> weechat.print(message, [channel, [server]]) </command> </para> <para> Display a message on a WeeChat buffer, identified by server and channel. </para> <para> Arguments: <itemizedlist> <listitem> <para> <option>message</option>: message </para> </listitem> <listitem> <para> <option>channel</option>: name of channel to find buffer for message display </para> </listitem> <listitem> <para> <option>server</option>: internal name of server to find buffer for message display </para> </listitem> </itemizedlist> </para> <para> Return value: 1 if success, 0 if an error occurred. </para> <para> Examples: <screen> # perl weechat::print("message"); weechat::print("message", "#weechat"); weechat::print("message", "#weechat", "freenode"); # python weechat.prnt("message") weechat.prnt("message", "#weechat") weechat.prnt("message", "#weechat", "freenode") # ruby Weechat.print("message") Weechat.print("message", "#weechat") Weechat.print("message", "#weechat", "freenode") -- lua weechat.print("message") weechat.print("message", "#weechat") weechat.print("message", "#weechat", "freenode") </screen> </para> </section> <section> <title>print_infobar</title> <para> Perl prototype: <command> weechat::print_infobar(time, message); </command> </para> <para> Python prototype: <command> weechat.print_infobar(time, message) </command> </para> <para> Ruby prototype: <command> Weechat.print_infobar(time, message) </command> </para> <para> Lua prototype: <command> weechat.print_infobar(time, message) </command> </para> <para> Display a message in infobar for a specified time. </para> <para> Arguments: <itemizedlist> <listitem> <para> <option>time</option>: time (in seconds) for displaying message (0 = never erased) </para> </listitem> <listitem> <para> <option>message</option>: message </para> </listitem> </itemizedlist> </para> <para> Return value: 1 if success, 0 if an error occurred. </para> <para> Examples: <screen> # perl weechat::print_infobar(5, "message"); # python weechat.print_infobar(5, "message") # ruby Weechat.print_infobar(5, "message") -- lua weechat.print_infobar(5, "message") </screen> </para> </section> <section> <title>remove_infobar</title> <para> Perl prototype: <command> weechat::remove_infobar([count]); </command> </para> <para> Python prototype: <command> weechat.remove_infobar([count]) </command> </para> <para> Ruby prototype: <command> Weechat.remove_infobar([count]) </command> </para> <para> Lua prototype: <command> weechat.remove_infobar([count]) </command> </para> <para> Remove one or more messages in infobar stack. </para> <para> Arguments: <itemizedlist> <listitem> <para> <option>count</option>: number of messages to remove (if argument not given or <= 0, then all messages are removed) </para> </listitem> </itemizedlist> </para> <para> Return value: 1 if success, 0 if an error occurred. </para> <para> Examples: <screen> # perl weechat::remove_infobar(1); # python weechat.remove_infobar(1) # ruby Weechat.remove_infobar(1) -- lua weechat.remove_infobar(1) </screen> </para> </section> <section> <title>log</title> <para> Perl prototype: <command> weechat::log(message, [channel, [server]]); </command> </para> <para> Python prototype: <command> weechat.log(message, [channel, [server]]) </command> </para> <para> Ruby prototype: <command> Weechat.log(message, [channel, [server]]) </command> </para> <para> Lua prototype: <command> weechat.log(message, [channel, [server]]) </command> </para> <para> Write a message in log file for a server or a channel. </para> <para> Arguments: <itemizedlist> <listitem> <para> <option>message</option>: message </para> </listitem> <listitem> <para> <option>channel</option>: name of channel to find buffer for log </para> </listitem> <listitem> <para> <option>server</option>: internal name of server to find buffer for log </para> </listitem> </itemizedlist> </para> <para> Return value: 1 if success, 0 if an error occurred. </para> <para> Examples: <screen> # perl weechat::log("message", "#weechat", "freenode"); # python weechat.log("message", "#weechat", "freenode") # ruby Weechat.log("message", "#weechat", "freenode") -- lua weechat.log("message", "#weechat", "freenode") </screen> </para> </section> <section> <title>add_message_handler</title> <para> Perl prototype: <command> weechat::add_message_handler(message, function); </command> </para> <para> Python prototype: <command> weechat.add_message_handler(message, function) </command> </para> <para> Ruby prototype: <command> Weechat.add_message_handler(message, function) </command> </para> <para> Lua prototype: <command> weechat.add_message_handler(message, function) </command> </para> <para> Add an IRC message handler, called when an IRC message is received. </para> <para> Arguments: <itemizedlist> <listitem> <para> <option>message</option>: name of IRC message. To know list of IRC messages, please consult <acronym>RFC</acronym>s <ulink url="http://www.ietf.org/rfc/rfc1459.txt">1459</ulink> and <ulink url="http://www.ietf.org/rfc/rfc2812.txt">2812</ulink>. Moreover you can use a special name, prefixed by "weechat_" to catch special events (see <xref linkend="secAPI_msg_handler_add" />). </para> </listitem> <listitem> <para> <option>function</option>: function called when message is received </para> </listitem> </itemizedlist> </para> <para> Return value: 1 if success, 0 if an error occurred. </para> <para> Examples: <screen> # perl weechat::add_message_handler ("privmsg", "my_function"); sub my_function { weechat::print("server=$_[0]"); ($null, $channel, $message) = split ":",$_[1],3; ($mask, $null, $channel) = split " ", $channel; weechat::print("mask=$mask, channel=$channel, msg=$message"); return weechat::PLUGIN_RC_OK; } # python weechat.add_message_handler ("privmsg", "my_function") def my_function(server, args): weechat.prnt("server="+server) null, channel, message = string.split(args, ":", 2) mask, null, channel = string.split(string.strip(channel), " ", 2) weechat.prnt("mask="+mask+", canal="+channel+", message="+message) return weechat.PLUGIN_RC_OK # ruby Weechat.add_message_handler("privmsg", "my_function") def my_function(server, args) Weechat.print("server=#{server}, args=#{args}") return Weechat::PLUGIN_RC_OK end -- lua weechat.add_message_handler ("privmsg", "my_function") function my_function(server, args) weechat.print("server=" .. server .. ", args=" .. args) return weechat.PLUGIN_RC_OK() end </screen> </para> <para> Note: function called when message is received has to return one of following values: <itemizedlist> <listitem> <para> <literal>PLUGIN_RC_KO</literal>: function failed </para> </listitem> <listitem> <para> <literal>PLUGIN_RC_OK</literal>: function successfully completed </para> </listitem> <listitem> <para> <literal>PLUGIN_RC_OK_IGNORE_WEECHAT</literal>: message will not be sent to WeeChat </para> </listitem> <listitem> <para> <literal>PLUGIN_RC_OK_IGNORE_PLUGINS</literal>: message will not be sent to other plugins </para> </listitem> <listitem> <para> <literal>PLUGIN_RC_OK_IGNORE_ALL</literal>: message will not be sent to WeeChat neither other plugins </para> </listitem> </itemizedlist> </para> </section> <section> <title>add_command_handler</title> <para> Perl prototype: <command> weechat::add_command_handler(command, function, [description, arguments, arguments_description, completion_template]); </command> </para> <para> Python prototype: <command> weechat.add_command_handler(command, function, [description, arguments, arguments_description, completion_template]) </command> </para> <para> Ruby prototype: <command> Weechat.add_command_handler(command, function, [description, arguments, arguments_description, completion_template]) </command> </para> <para> Lua prototype: <command> weechat.add_command_handler(command, function, [description, arguments, arguments_description, completion_template]) </command> </para> <para> Add a WeeChat command handler, called when user uses command (for example /command). </para> <para> Arguments: <itemizedlist> <listitem> <para> <option>command</option>: the new command name, which may be an existing command (be careful, replaced command will not be available until script is unloaded) </para> </listitem> <listitem> <para> <option>function</option>: function called when command is executed </para> </listitem> <listitem> <para> <option>arguments</option>: short description of command arguments (displayed by /help command) </para> </listitem> <listitem> <para> <option>arguments_description</option>: long description of command arguments (displayed by /help command) </para> </listitem> <listitem> <para> <option>completion_template</option>: template for completion, like "<literal>abc|%w def|%i</literal>" which means "abc" or a WeeChat command for first argument, "def" or IRC command for second. (see <xref linkend="secAPI_cmd_handler_add" />) </para> </listitem> </itemizedlist> </para> <para> Return value: 1 if success, 0 if an error occurred. </para> <para> Examples: <screen> # perl weechat::add_command_handler("command", "my_command"); sub my_command { weechat::print("server= $_[0], args: $_[1]"); return weechat::PLUGIN_RC_OK; } # python weechat.add_command_handler("command", "my_command") def my_command(server, args): weechat.prnt("server="+server+", args="+args) return weechat.PLUGIN_RC_OK # ruby Weechat.add_command_handler("command", "my_command") def my_command(server, args) Weechat.print("server=#{server}, args=#{args}") return Weechat::PLUGIN_RC_OK end -- lua weechat.add_command_handler("command", "my_command") def my_command(server, args) weechat.print("server="..server..", args="..args) return weechat.PLUGIN_RC_OK() end </screen> </para> <para> Notes: function called when command is executed has to return one of following values: <itemizedlist> <listitem> <para> <literal>PLUGIN_RC_KO</literal> : function failed </para> </listitem> <listitem> <para> <literal>PLUGIN_RC_OK</literal> : function successfully completed </para> </listitem> </itemizedlist> </para> </section> <section> <title>add_timer_handler</title> <para> Perl prototype: <command> weechat::add_timer_handler(message, function); </command> </para> <para> Python prototype: <command> weechat.add_timer_handler(message, function) </command> </para> <para> Ruby prototype: <command> Weechat.add_timer_handler(message, function) </command> </para> <para> Lua prototype: <command> weechat.add_timer_handler(message, function) </command> </para> <para> Add a timer handler which periodically calls a function. </para> <para> Arguments: <itemizedlist> <listitem> <para> <option>interval</option>: interval (in seconds) between two calls of function. </para> </listitem> <listitem> <para> <option>function</option>: function called </para> </listitem> </itemizedlist> </para> <para> Return value: 1 if success, 0 if an error occurred. </para> <para> Examples: <screen> # perl weechat::add_timer_handler(60, "my_timer"); sub my_timer { weechat::print("this is timer handler"); return weechat::PLUGIN_RC_OK; } # python weechat.add_timer_handler(60, "my_timer") def my_timer(): weechat.prnt("this is timer handler") return weechat.PLUGIN_RC_OK # ruby Weechat.add_timer_handler(60, "my_timer") def my_timer() Weechat.print("this is timer handler") return Weechat::PLUGIN_RC_OK end -- lua weechat.add_timer_handler(60, "my_timer") function my_timer() weechat.print("this is timer handler) return weechat.PLUGIN_RC_OK() end </screen> </para> <para> Note: function called has to return one of following values: <itemizedlist> <listitem> <para> <literal>PLUGIN_RC_KO</literal>: function failed </para> </listitem> <listitem> <para> <literal>PLUGIN_RC_OK</literal>: function successfully completed </para> </listitem> </itemizedlist> </para> </section> <section> <title>add_keyboard_handler</title> <para> Perl prototype: <command> weechat::add_keyboard_handler(message, function); </command> </para> <para> Python prototype: <command> weechat.add_keyboard_handler(message, function) </command> </para> <para> Ruby prototype: <command> Weechat.add_keyboard_handler(message, function) </command> </para> <para> Lua prototype: <command> weechat.add_keyboard_handler(message, function) </command> </para> <para> Add a keyboard handler, called for any key pressed. </para> <para> Arguments: <itemizedlist> <listitem> <para> <option>function</option>: function called </para> </listitem> </itemizedlist> </para> <para> Return value: 1 if success, 0 if an error occurred. </para> <para> Examples: <screen> # perl weechat::add_keyboard_handler("my_keyboard"); sub my_keyboard { my $key = shift; my $input_before = shift; my $input_after = shift; weechat::print("keyboard handler: key = '$key', " ."input before = '$input_before' " ."after = '$input_after'"); return weechat::PLUGIN_RC_OK; } # python weechat.add_keyboard_handler("my_keyboard") def my_keyboard(key, input_before, input_after): weechat.prnt("keyboard handler: key = '%s', " \ "input before = '%s' after = '%s'" %(key, input_before, input_after)) return weechat.PLUGIN_RC_OK # ruby Weechat.add_keyboard_handler("my_keyboard") def my_keyboard(server, input_before, input_after) Weechat.print("keyboard handler: key = '#{key}', " \ "input before = '#{input_before}' " \ "after = '#{input_after}'") return Weechat::PLUGIN_RC_OK end -- lua weechat.add_keyboard_handler("my_keyboard") function my_keyboard(server, input_before, input_after) weechat.print("keyboard handler: key = '"..key.. "', input before = '"..input_before.. "' after = '"..input_after.."'") return weechat.PLUGIN_RC_OK() end </screen> </para> <para> Note: function called has to return one of following values: <itemizedlist> <listitem> <para> <literal>PLUGIN_RC_KO</literal>: function failed </para> </listitem> <listitem> <para> <literal>PLUGIN_RC_OK</literal>: function successfully completed </para> </listitem> </itemizedlist> </para> </section> <section> <title>remove_handler</title> <para> Perl prototype: <command> weechat::remove_handler(name, function); </command> </para> <para> Python prototype: <command> weechat.remove_handler(name, function) </command> </para> <para> Ruby prototype: <command> Weechat.remove_handler(name, function) </command> </para> <para> Lua prototype: <command> weechat.remove_handler(name, function) </command> </para> <para> Remove a message or command handler. </para> <para> Arguments: <itemizedlist> <listitem> <para> <option>name</option>: name of IRC message or command </para> </listitem> <listitem> <para> <option>function</option>: function </para> </listitem> </itemizedlist> </para> <para> Return value: 1 if success, 0 if an error occurred. </para> <para> Examples: <screen> # perl weechat::remove_handler("command", "my_command"); # python weechat.remove_handler("command", "my_command") # ruby Weechat.remove_handler("command", "my_command") -- lua weechat.remove_handler("command", "my_command") </screen> </para> </section> <section> <title>remove_timer_handler</title> <para> Perl prototype: <command> weechat::remove_timer_handler(function); </command> </para> <para> Python prototype: <command> weechat.remove_timer_handler(function) </command> </para> <para> Ruby prototype: <command> Weechat.remove_timer_handler(function) </command> </para> <para> Lua prototype: <command> weechat.remove_timer_handler(function) </command> </para> <para> Remove a timer handler. </para> <para> Arguments: <itemizedlist> <listitem> <para> <option>function</option>: function </para> </listitem> </itemizedlist> </para> <para> Return value: 1 if success, 0 if an error occurred. </para> <para> Examples: <screen> # perl weechat::remove_timer_handler("my_timer"); # python weechat.remove_timer_handler("my_timer") # ruby Weechat.remove_timer_handler("my_timer") -- lua weechat.remove_timer_handler("my_timer") </screen> </para> </section> <section> <title>remove_keyboard_handler</title> <para> Perl prototype: <command> weechat::remove_keyboard_handler(function); </command> </para> <para> Python prototype: <command> weechat.remove_keyboard_handler(function) </command> </para> <para> Ruby prototype: <command> Weechat.remove_keyboard_handler(function) </command> </para> <para> Lua prototype: <command> weechat.remove_keyboard_handler(function) </command> </para> <para> Remove a keyboard handler. </para> <para> Arguments: <itemizedlist> <listitem> <para> <option>function</option>: function </para> </listitem> </itemizedlist> </para> <para> Return value: 1 if success, 0 if an error occurred. </para> <para> Examples: <screen> # perl weechat::remove_keyboard_handler("my_keyboard"); # python weechat.remove_keyboard_handler("my_keyboard") # ruby Weechat.remove_keyboard_handler("my_keyboard") -- lua weechat.remove_keyboard_handler("my_keyboard") </screen> </para> </section> <section> <title>command</title> <para> Perl prototype: <command> weechat::command(command, [channel, [server]]); </command> </para> <para> Python prototype: <command> weechat.command(command, [channel, [server]]) </command> </para> <para> Ruby prototype: <command> Weechat.command(command, [channel, [server]]) </command> </para> <para> Lua prototype: <command> weechat.command(command, [channel, [server]]) </command> </para> <para> Execute a WeeChat command (or send a message to a channel). </para> <para> Arguments: <itemizedlist> <listitem> <para> <option>command</option>: command </para> </listitem> <listitem> <para> <option>channel</option>: name of channel for executing command </para> </listitem> <listitem> <para> <option>server</option>: internal name of server for executing command </para> </listitem> </itemizedlist> </para> <para> Return value: 1 if success, 0 if an error occurred. </para> <para> Examples: <screen> # perl weechat::command("hello everybody!"); weechat::command("/kick toto please leave this channel", "#weechat"); weechat::command("/nick newnick", "", "freenode"); # python weechat.command("hello everybody!") weechat.command("/kick toto please leave this channel", "#weechat") weechat.command("/nick newnick", "", "freenode") # ruby Weechat.command("hello everybody!") Weechat.command("/kick toto please leave this channel", "#weechat") Weechat.command("/nick newnick", "", "freenode") -- lua weechat.command("hello everybody!") weechat.command("/kick toto please leave this channel", "#weechat") weechat.command("/nick newnick", "", "freenode") </screen> </para> </section> <section> <title>get_info</title> <para> Perl prototype: <command> weechat::get_info(name, [server]); </command> </para> <para> Python prototype: <command> weechat.get_info(name, [server]) </command> </para> <para> Ruby prototype: <command> Weechat.get_info(name, [server]) </command> </para> <para> Lua prototype: <command> weechat.get_info(name, [server]) </command> </para> <para> Return an info about WeeChat or a channel. </para> <para> Arguments: <itemizedlist> <listitem> <para> <option>name</option>: name of info to read (see <xref linkend="secAPI_get_info" />) </para> </listitem> <listitem> <para> <option>server</option>: internal name of server for reading info (if needed) </para> </listitem> </itemizedlist> </para> <para> Return value: information asked, empty string if an error occurred. </para> <para> Examples: <screen> # perl $version = get_info("version"); $nick = get_info("nick", "freenode"); # python version = weechat.get_info("version") nick = weechat.get_info("nick", "freenode") # ruby version = Weechat.get_info("version") nick = Weechat.get_info("nick", "freenode") -- lua version = weechat.get_info("version") nick = weechat.get_info("nick", "freenode") </screen> </para> </section> <section> <title>get_dcc_info</title> <para> Perl prototype: <command> weechat::get_dcc_info(); </command> </para> <para> Python prototype: <command> weechat.get_dcc_info() </command> </para> <para> Ruby prototype: <command> Weechat.get_dcc_info() </command> </para> <para> Lua prototype: <command> weechat.get_dcc_info() </command> </para> <para> Return list of DCC currently active or finished. </para> <para> Return value: list of DCC (see <xref linkend="secAPI_get_dcc_info" />). </para> <para> Examples: <screen> # perl my @dccs = weechat::get_dcc_info(); if (@dccs) { foreach my $dcc (@dccs) { while (my ($key, $value) = each %$dcc) { weechat::print("$key = '$value'"); } } } else { weechat::print("no DCC"); } # python dccs = weechat.get_dcc_info() if dccs != None: if dccs == []: weechat.prnt("no DCC") else: for d in dccs: for b in d.keys(): weechat.prnt("%s = '%s'" %(b, d[b])) else: weechat.prnt("error while getting DCC") # ruby dccs = Weechat.get_dcc_info() if dccs != nil if dccs == [] Weechat.print("no DCC") else dccs.each do |m| m.each do |key, value| Weechat.print("#{key} = '#{value}'") end end end else Weechat.print("error while getting DCC") end -- lua dccs = weechat.get_dcc_info() if dccs ~= nil then if dccs then dcc, dccinfos = next (dccs, nil) while (dcc) do key, value = next (dccinfos, nil) while (key) do weechat.print(key.." = '"..value.."'") key, value = next (dccinfos, key) end dcc, dccinfos = next (dccs, dcc) end else weechat.print("no DCC") end else weechat.print("error while getting DCC") end </screen> </para> </section> <section> <title>get_server_info</title> <para> Perl prototype: <command> weechat::get_server_info(); </command> </para> <para> Python prototype: <command> weechat.get_server_info() </command> </para> <para> Ruby prototype: <command> Weechat.get_server_info() </command> </para> <para> Lua prototype: <command> weechat.get_server_info() </command> </para> <para> Return list of IRC servers (connected or not). </para> <para> Return value: list of servers (see <xref linkend="secAPI_get_server_info" />). </para> <para> Examples: <screen> # perl my $servers = weechat::get_server_info(); if ($servers) { while (my ($srvname, $srvinfos) = each %$servers) { while ( my ($key, $value) = each %$srvinfos) { weechat::print("$srvname -> $key = '$value'"); } } } else { weechat::print("no server"); } # python servers = weechat.get_server_info() if servers != None: if servers == {}: weechat.prnt("no server") else: for s in servers: for i in servers[s]: weechat.prnt("%s -> %s = '%s'" % (s, i, str(servers[s][i]))) else: weechat.prnt("error while getting servers") # ruby servers = Weechat.get_server_info() if servers != nil if servers == [] Weechat.print("no server") else servers.each do |n, s| s.each do |key, value| Weechat.print("#{n} -> #{key} = '#{value}'") end end end else Weechat.print("error while getting servers") end -- lua servers = weechat.get_server_info() if servers ~= nil then if servers then srv, srvinfos = next (servers, nil) while (srv) do key, value = next (srvinfos, nil) while (key) do weechat.print(srv.." -> "..key.." = '"..value.."'") key, value = next (srvinfos, key) end srv, srvinfos = next (servers, srv) end else weechat.print("no server") end else weechat.print("error while getting servers") end </screen> </para> </section> <section> <title>get_channel_info</title> <para> Perl prototype: <command> weechat::get_channel_info(server); </command> </para> <para> Python prototype: <command> weechat.get_channel_info(server) </command> </para> <para> Ruby prototype: <command> Weechat.get_channel_info(server) </command> </para> <para> Lua prototype: <command> weechat.get_channel_info(server) </command> </para> <para> Return list of IRC channels for a server. </para> <para> Return value: list of IRC channels for server (see <xref linkend="secAPI_get_channel_info" />). </para> <para> Examples: <screen> # perl my $channels = weechat::get_channel_info(weechat::get_info("server")); if ($channels) { while (my ($channame, $chaninfos) = each %$channels) { while (my ($key, $value) = each %$chaninfos) { weechat::print("$channame -> $key = '$value'"); } } } else { weechat::print("no channel"); } # python chans = weechat.get_channel_info(weechat.get_info("server")) if chans != None: if chans == {}: weechat.prnt("no channel") else: for s in chans: for i in chans[s]: weechat.prnt("%s -> %s = '%s'" % (s, i, str(chans[s][i]))) else: weechat.prnt("error while getting channels") # ruby channels = Weechat.get_channel_info(Weechat.get_info("server")) if channels != nil if channels == {} Weechat.print("no channel") else channels.each do |n, c| c.each do |key, value| Weechat.print("#{n} -> #{key} = '#{value}'") end end end else Weechat.print("error while getting channels") end -- lua chans = weechat.get_channel_info(weechat.get_info("server")) if chans ~= nil then if chans then chan, chaninfos = next (chans, nil) while (chan) do key, value = next (chaninfos, nil) while (key) do weechat.print(chan.." -> "..key.." = '"..value.."'") key, value = next (chaninfos, key) end chan, chaninfos = next (chans, chan) end else weechat.print("no channel") end else weechat.print("error while getting channels") end </screen> </para> </section> <section> <title>get_nick_info</title> <para> Perl prototype: <command> weechat::get_nick_info(server, channel); </command> </para> <para> Python prototype: <command> weechat.get_nick_info(server, channel) </command> </para> <para> Ruby prototype: <command> Weechat.get_nick_info(server, channel) </command> </para> <para> Lua prototype: <command> weechat.get_nick_info(server, channel) </command> </para> <para> Return list of nicks for a channel. </para> <para> Return value: list of nicks on channel (see <xref linkend="secAPI_get_nick_info" />). </para> <para> Examples: <screen> # perl my $nicks = weechat::get_nick_info("freenode", "#weechat"); if ($nicks) { while (my ($nickname, $nickinfos) = each %$nicks) { while ( my ($key, $value) = each %$nickinfos) { weechat::print("$nickname -> $key = '$value'"); } } } else { weechat::print("no nick"); } # python nicks = weechat.get_nick_info("freenode", "#weechat") if nicks != None: if nicks == {}: weechat.prnt("no nick") else: for n in nicks: for f in nicks[n]: weechat.prnt("%s -> %s = '%s'" % (n, f, str(nicks[n][f]))) else: weechat.prnt("error while getting nicks") # ruby nicks = Weechat.get_nick_info("freenode", "#weechat") if nicks != nil if nicks == {} Weechat.print("no nick") else nicks.each do |nk, nattr| nattr.each do |key, value| Weechat.print("#{nk} -> #{key} = '#{value}'") end end end else Weechat.print("error while getting nicks") end -- lua nicks = weechat.get_nick_info("freenode", "#weechat") if nicks ~= nil then if nicks then nick, nickinfos = next (nicks, nil) while (nick) do key, value = next (nickinfos, nil) while (key) do weechat.print(nick.." -> "..key.." = '"..value.."'") key, value = next (nickinfos, key) end nick, nickinfos = next (nicks, nick) end else weechat.print("no nick") end else weechat.print("error while getting nicks") end </screen> </para> </section> <section> <title>get_config</title> <para> Perl prototype: <command> weechat::get_config(option); </command> </para> <para> Python prototype: <command> weechat.get_config(option) </command> </para> <para> Ruby prototype: <command> Weechat.get_config(option) </command> </para> <para> Lua prototype: <command> weechat.get_config(option) </command> </para> <para> Return value of a WeeChat config option. </para> <para> Arguments: <itemizedlist> <listitem> <para> <option>option</option>: name of option to read </para> </listitem> </itemizedlist> </para> <para> Return value: option value, empty string if not found. </para> <para> Examples: <screen> # perl $value1 = weechat::get_config("look_nicklist"); $value2 = weechat::get_config("freenode.server_autojoin"); # python value1 = weechat.get_config("look_nicklist") value2 = weechat.get_config("freenode.server_autojoin") # ruby value1 = Weechat.get_config("look_nicklist") value2 = Weechat.get_config("freenode.server_autojoin") -- lua value1 = weechat.get_config("look_nicklist") value2 = weechat.get_config("freenode.server_autojoin") </screen> </para> </section> <section> <title>set_config</title> <para> Perl prototype: <command> weechat::set_config(option, value); </command> </para> <para> Python prototype: <command> weechat.set_config(option, value) </command> </para> <para> Ruby prototype: <command> Weechat.set_config(option, value) </command> </para> <para> Lua prototype: <command> weechat.set_config(option, value) </command> </para> <para> Update value of a WeeChat config option. </para> <para> Arguments: <itemizedlist> <listitem> <para> <option>option</option>: name of option to update </para> </listitem> <listitem> <para> <option>value</option>: new value for option </para> </listitem> </itemizedlist> </para> <para> Return value: 1 if option was successfully updated, 0 if an error occurred. </para> <para> Examples: <screen> # perl weechat::set_config("look_nicklist", "off"); weechat::set_config("freenode.server_autojoin, "#weechat"); # python weechat.set_config("look_nicklist", "off") weechat.set_config("freenode.server_autojoin, "#weechat") # ruby Weechat.set_config("look_nicklist", "off") Weechat.set_config("freenode.server_autojoin, "#weechat") -- lua weechat.set_config("look_nicklist", "off") weechat.set_config("freenode.server_autojoin, "#weechat") </screen> </para> </section> <section> <title>get_plugin_config</title> <para> Perl prototype: <command> weechat::get_plugin_config(option); </command> </para> <para> Python prototype: <command> weechat.get_plugin_config(option) </command> </para> <para> Ruby prototype: <command> Weechat.get_plugin_config(option) </command> </para> <para> Lua prototype: <command> weechat.get_plugin_config(option) </command> </para> <para> Return value of a plugin option. Option is read from file "<literal>~/.weechat/plugins.rc</literal>" and is like: "<literal>plugin.option=value</literal>" (note: plugin name is automatically added). </para> <para> Arguments: <itemizedlist> <listitem> <para> <option>option</option>: name of option to read </para> </listitem> </itemizedlist> </para> <para> Return value: value of option, empty string if not found. </para> <para> Examples : <screen> # perl $value = weechat::get_plugin_config("my_var"); # python value = weechat.get_plugin_config("my_var") # ruby value = Weechat.get_plugin_config("my_var") -- lua value = weechat.get_plugin_config("my_var") </screen> </para> </section> <section> <title>set_plugin_config</title> <para> Perl prototype: <command> weechat::set_plugin_config(option, value); </command> </para> <para> Python prototype: <command> weechat.set_plugin_config(option, value) </command> </para> <para> Ruby prototype: <command> Weechat.set_plugin_config(option, value) </command> </para> <para> Lua prototype: <command> weechat.set_plugin_config(option, value) </command> </para> <para> Update value of a plugin option. Option is written in file "<literal>~/.weechat/plugins.rc</literal>" and is like: "<literal>plugin.option=value</literal>" (note: plugin name is automatically added). </para> <para> Arguments: <itemizedlist> <listitem> <para> <option>option</option>: name of option to update </para> </listitem> <listitem> <para> <option>value</option>: new value for option </para> </listitem> </itemizedlist> </para> <para> Return value: 1 if option was successfully updated, 0 if an error occurred. </para> <para> Examples: <screen> # perl weechat::set_plugin_config("my_var", "value"); # python weechat.set_plugin_config("my_var", "value") # ruby Weechat.set_plugin_config("my_var", "value") -- lua weechat.set_plugin_config("my_var", "value") </screen> </para> </section> </section> </section> </chapter> <!-- ======================== Auteurs / Support ========================= --> <chapter id="chapAuthorsSupport"> <title>Authors / Support</title> <para> This chapter lists authors and contributors for WeeChat, and shows ways to get support. </para> <section id="secAuthors"> <title>Authors</title> <para> WeeChat is developed by: <itemizedlist> <listitem> <para> <emphasis>FlashCode (S�bastien Helleu)</emphasis> <email>flashcode AT flashtux.org</email> - main developer </para> </listitem> <listitem> <para> <emphasis>Kolter</emphasis> <email>kolter AT free.fr</email> - developer </para> </listitem> <listitem> <para> <emphasis>Ptitlouis</emphasis> <email>ptitlouis AT sysif.net</email> - Debian packager </para> </listitem> </itemizedlist> </para> </section> <section id="secContributors"> <title>Contributors</title> <para> Following people contributed to WeeChat: <itemizedlist> <listitem> <para> <emphasis>Jiri Golembiovsky</emphasis> - czech translation, patches </para> </listitem> <listitem> <para> <emphasis>Rudolf Polzer</emphasis> - patches </para> </listitem> <listitem> <para> <emphasis>Jim Ramsay</emphasis> - patches </para> </listitem> <listitem> <para> <emphasis>Odin</emphasis> - SuSE RPM </para> </listitem> <listitem> <para> <emphasis>Pistos</emphasis> - patches </para> </listitem> <listitem> <para> <emphasis>Gwenn</emphasis> - patches </para> </listitem> <listitem> <para> <emphasis>voroskoi</emphasis> - hungarian translation </para> </listitem> <listitem> <para> <emphasis>Frank Zacharias</emphasis> - german translation </para> </listitem> <listitem> <para> <emphasis>Pavel Shevchuk</emphasis> - russian translation </para> </listitem> </itemizedlist> </para> </section> <section id="secSupport"> <title>Get support</title> <para> Before asking for support, be sure you've read documentation and FAQ provided with WeeChat (documentation is this document, if you don't read all lines until this sentence, you can start again!) </para> <para> <itemizedlist> <listitem> <para> IRC: server "<literal>irc.freenode.net</literal>", channel "<literal>#weechat</literal>" </para> </listitem> <listitem> <para> WeeChat forum: <ulink url="http://forums.flashtux.org"> http://forums.flashtux.org </ulink> </para> </listitem> <listitem> <para> Mailing list: <itemizedlist> <listitem> <para> To subscribe: <ulink url="http://mail.nongnu.org/mailman/listinfo/weechat-support"> http://mail.nongnu.org/mailman/listinfo/weechat-support </ulink> </para> </listitem> <listitem> <para> To send a mail on mailing list: <email>weechat-support@nongnu.org</email> </para> </listitem> </itemizedlist> Mailing list archives are available here: <ulink url="http://mail.nongnu.org/archive/html/weechat-support"> http://mail.nongnu.org/archive/html/weechat-support </ulink> </para> </listitem> </itemizedlist> </para> </section> </chapter> </book>