Extensions
Ce chapitre décrit l'API extension de WeeChat et les extensions fournies
par défaut 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 macros obligatoires (pour définir
des variables) et des fonctions (sans quoi l'extension ne peut être
chargée) :
Macro
Description
WEECHAT_PLUGIN_NAME
le nom de l'extension
WEECHAT_PLUGIN_DESCRIPTION
une courte description de l'extension
WEECHAT_PLUGIN_VERSION
la version de l'extension
WEECHAT_PLUGIN_WEECHAT_VERSION
la version de WeeChat pour laquelle l'extension est destinée
(attention: l'extension ne pourra tourner sur aucune autre
version de WeeChat !)
WEECHAT_PLUGIN_LICENSE
la licence de l'extension
Fonction
Description
int weechat_plugin_init (struct t_weechat_plugin *plugin, int argc, char *argv[])
fonction appelée au chargement de l'extension
qui doit renvoyer WEECHAT_RC_OK en cas de succès,
WEECHAT_RC_ERROR en cas d'erreur (si erreur, l'extension
ne sera PAS chargée), argv/argv sont les paramètres pour
l'extension (donnés sur la ligne de commande par l'utilisateur)
int weechat_plugin_end (struct t_weechat_plugin *plugin)
fonction appelée au déchargement de l'extension
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 tampon courant
ou exécutant deux fois une commande (d'accord ce n'est pas très utile
mais ceci est un exemple !) :
#include <stdlib.h>
#include "weechat-plugin.h"
WEECHAT_PLUGIN_NAME("double");
WEECHAT_PLUGIN_DESCRIPTION("Test plugin for WeeChat");
WEECHAT_PLUGIN_AUTHOR("FlashCode <flashcode@flashtux.org>");
WEECHAT_PLUGIN_VERSION("0.1");
WEECHAT_PLUGIN_WEECHAT_VERSION("0.2.7");
WEECHAT_PLUGIN_LICENSE("GPL3");
struct t_weechat_plugin *weechat_plugin = NULL;
/* "/double" command manager */
int
double_cmd (void *data, struct t_gui_buffer *buffer, int argc,
char **argv, char **argv_eol)
{
/* make C compiler happy */
(void) argv;
if (argc > 1)
{
weechat_command (NULL, argv_eol[1]);
weechat_command (NULL, argv_eol[1]);
}
return WEECHAT_RC_OK;
}
int
weechat_plugin_init (struct t_weechat_plugin *plugin,
int argc, char *argv[])
{
weechat_plugin = plugin;
weechat_hook_command ("double",
"Display two times a message",
"msg",
"msg: message to display two times",
NULL,
&double_cmd, NULL);
return WEECHAT_RC_OK;
}
int
weechat_plugin_end (struct t_weechat_plugin *plugin)
{
/* nothing done here */
(void) plugin;
return WEECHAT_RC_OK;
}