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;