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;