Plugins Dieses Kapitel beschreibt das Plugin-Interface (API) in WeeChat und die Standard-Skriptplugins (Perl, Python, Ruby, Lua), die zu WeeChat gehören.
Plugins in WeeChat Ein Plugin ist ein C-Programm, dass WeeChat-Funktionen aufrufen kann, die in einem Interface definiert sind. Dieses C-Programm braucht nicht den Quellcode von WeeChat (aber die API-Beschreibung) und kann dynamisch mit dem folgenden Kommando in WeeChat geladen werden /plugin. Das Plugin muss in Form einer dynamischen Bibliothek vorliegen, damit es das Betriebssystem dynamisch laden kann. Unter GNU/Linux besitzt die Datei die Endung ".so", unter Windows ".dll".
Ein Plugin schreiben Das Plugin muss die Datei "weechat-plugin.h" einbinden (verfügbar im WeeChat-Quellcode). Diese Datei definiert die Strukturen und Typen um mit WeeChat zu kommunizieren. Das Plugin muss einige Variablen und Funktionen besitzen (nötig, sonst kann das Plugin nicht geladen werden): Variable Beschreibung char plugin_name[] Plugin Name char plugin_version[] Plugin Version char plugin_description[] kurze Beschreibung des Plugins Funktion Beschreibung int weechat_plugin_init (t_weechat_plugin *plugin) Die Funktion wird aufgerufen, wenn das Plugin geladen wird. Sie muss bei Erfolg PLUGIN_RC_OK, bei Fehlschlag PLUGIN_RC_KO zurückgeben. (Bei einem Fehler wird das Plugin nicht geladen) void weechat_plugin_end (t_weechat_plugin *plugin) Funktion wird beim Abschalten aufgerufen &plugin_api.de.xml;
Übersetzen eines Plugins Das Übersetzen braucht keine WeeChat-Quellen, aber die Datei "weechat-plugin.h". Um ein Plugin zu übersetzen, das aus einer Datei "toto.c" besteht (unter GNU/Linux): $ gcc -fPIC -Wall -c toto.c $ gcc -shared -fPIC -o libtoto.so toto.o
Laden des Plugins in WeeChat Kopiere die Datei "libtoto.so" in das Plugin-Verzeichnis der systemweiten Dateien WeeChats (zum Beispiel: "/usr/local/lib/weechat/plugins") oder in das Plugin-Verzeichnis des Users (zum Beispiel: "/home/xxxxx/.weechat/plugins"). In WeeChat: /plugin load toto
Plugin Beispiel Vollständiges Beispiel eines Plugins, welches das Kommando /double implementiert, dass seine Argumente im gegenwärtigen Channel doppelt ausgibt (ok, das ist weniger nützlich, aber auch nur ein Beispiel!): #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 */ }
&plugin_charset.de.xml; &plugin_scripts.de.xml;