Extensions
Ce chapitre décrit l'interface des extensions (API) et les extensions
pour scripts (Perl, Python, Ruby, Lua), fournies avec WeeChat.
Les extensions dans WeeChat
Une extension ("plugin" en anglais) est un programme écrit en C
qui peut appeler des fonctions de WeeChat définies dans une interface.
Ce programme C n'a pas besoin des sources WeeChat pour être
compilé et peut être chargé/déchargé dynamiquement dans
WeeChat via la commande /plugin.
L'extension doit être au format bibliothèque, chargeable
dynamiquement par le système d'exploitation.
Sous GNU/Linux, il s'agit d'un fichier ayant pour extension ".so",
sous Windows ".dll".
Ecrire une extension
L'extension doit inclure le fichier "weechat-plugin.h"
(disponible dans les sources de WeeChat).
Ce fichier définit les structures et types dont l'extension aura
besoin pour communiquer avec WeeChat.
L'extension doit comporter certaines variables et fonctions
obligatoires (sans quoi l'extension ne peut être chargée) :
Variable
Description
char plugin_name[]
le nom de l'extension
char plugin_version[]
la version de l'extension
char plugin_description[]
une courte description de l'extension
Fonction
Description
int weechat_plugin_init (t_weechat_plugin *plugin)
fonction appelée au chargement de l'extension
qui doit renvoyer PLUGIN_RC_OK en cas de succès,
PLUGIN_RC_KO en cas d'erreur (si erreur, l'extension
ne sera PAS chargée)
void weechat_plugin_end (t_weechat_plugin *plugin)
fonction appelée au déchargement de l'extension
&plugin_api.fr.xml;
Compiler l'extension
La compilation ne nécessite pas les sources WeeChat, mais seulement
le fichier "weechat-plugin.h".
Pour compiler une extension composée d'un fichier "toto.c" (sous
GNU/Linux) :
$ gcc -fPIC -Wall -c toto.c
$ gcc -shared -fPIC -o libtoto.so toto.o
Charger l'extension dans WeeChat
Copier le fichier "libtoto.so" dans le répertoire système des
extensions (par exemple
"/usr/local/lib/weechat/plugins)" ou bien dans
celui de l'utilisateur (par exemple
"/home/xxxxx/.weechat/plugins").
Sous WeeChat :
/plugin load toto
Exemple d'extension
Un exemple complet d'extension, qui ajoute une commande /double
affichant deux fois les paramètres passés sur le canal courant
(d'accord ce n'est pas très utile mais ceci est un exemple !) :
#include <stdlib.h>
#include "weechat-plugin.h"
char plugin_name[] = "Double";
char plugin_version[] = "0.1";
char plugin_description[] = "Plugin de test pour WeeChat";
/* gestionnaire de commande "/double" */
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",
"Affiche deux fois un message",
"msg",
"msg: message a afficher deux fois",
NULL,
&double_cmd,
NULL, NULL);
return PLUGIN_RC_OK;
}
void weechat_plugin_end (t_weechat_plugin *plugin)
{
/* on ne fait rien ici */
}
&plugin_charset.fr.xml;
&plugin_scripts.fr.xml;