2010-08-05 14:01:00 +02:00
|
|
|
WeeChat Scripting Guide
|
|
|
|
=======================
|
|
|
|
Sébastien Helleu <flashcode@flashtux.org>
|
|
|
|
|
|
|
|
|
|
|
|
Diese Anleitung beschreibt den WeeChat Chat Client und ist Teil von WeeChat.
|
|
|
|
|
|
|
|
Die aktuelle Version dieser Anleitung finden Sie auf:
|
|
|
|
http://www.weechat.org/doc
|
|
|
|
|
|
|
|
|
|
|
|
[[introduction]]
|
|
|
|
Einleitung
|
|
|
|
----------
|
|
|
|
|
|
|
|
WeeChat (Wee Enhanced Environment for Chat) ist ein freier, schneller und
|
|
|
|
schlanker Chat-Client der für viele Betriebssysteme entwickelt wird.
|
|
|
|
|
2011-12-25 21:35:38 +01:00
|
|
|
Dieses Handbuch beschreibt wie man Skripten für WeeChat schreiben kann. Dabei
|
|
|
|
werden folgende Programmiersprachen unterstützt:
|
2011-10-26 19:25:51 +02:00
|
|
|
|
|
|
|
* python
|
|
|
|
* perl
|
|
|
|
* ruby
|
|
|
|
* lua
|
|
|
|
* tcl
|
|
|
|
* guile (scheme)
|
2010-08-05 14:01:00 +02:00
|
|
|
|
|
|
|
[NOTE]
|
|
|
|
Beinahe alle Beispiele in dieser Dokumentation beziehen sich auf Python.
|
2010-08-05 17:25:31 +02:00
|
|
|
Allerdings ist die API für alle Skriptsprachen nahezu identisch.
|
2010-08-05 14:01:00 +02:00
|
|
|
|
|
|
|
[[scripts_in_weechat]]
|
2010-08-05 17:25:31 +02:00
|
|
|
Skripten in WeeChat
|
2010-08-05 14:03:35 +02:00
|
|
|
-------------------
|
2010-08-05 14:01:00 +02:00
|
|
|
|
|
|
|
[[languages_specifities]]
|
|
|
|
Besonderheiten der einzelnen Skriptsprachen
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
|
2011-10-26 19:25:51 +02:00
|
|
|
Python
|
|
|
|
^^^^^^
|
2010-08-05 14:01:00 +02:00
|
|
|
|
2011-10-26 19:25:51 +02:00
|
|
|
* WeeChat muss als Modul eingebunden werden: `import weechat`
|
|
|
|
* Um die WeeChat Funktion `print*` nutzen zu können muss `prnt*` genutzt
|
|
|
|
werden ('print' ist ein reservierter Befehl von Python!)
|
|
|
|
* Funktionen werden im Format `weechat.xxx(arg1, arg2, ...)` ausgeführt
|
|
|
|
|
|
|
|
Perl
|
|
|
|
^^^^
|
|
|
|
|
|
|
|
* Funktionen werden im Format `weechat::xxx(arg1, arg2, ...);` ausgeführt
|
|
|
|
|
|
|
|
Ruby
|
|
|
|
^^^^
|
|
|
|
|
|
|
|
* Es muss 'weechat_init' definiert und darin die Funktion 'register' ausgeführt werden
|
|
|
|
* Funktionen werden im Format `Weechat.xxx(arg1, arg2, ...)` ausgeführt
|
|
|
|
|
|
|
|
Lua
|
|
|
|
^^^
|
|
|
|
|
|
|
|
* Funktionen werden im Format `weechat.xxx(arg1, arg2, ...)` ausgeführt
|
|
|
|
|
|
|
|
Tcl
|
|
|
|
^^^
|
|
|
|
|
|
|
|
* Funktionen werden im Format `weechat::xxx arg1 arg2 ...` ausgeführt
|
|
|
|
|
|
|
|
Guile (scheme)
|
|
|
|
^^^^^^^^^^^^^^
|
|
|
|
|
2011-12-25 21:35:38 +01:00
|
|
|
* Funktionen werden im Format `(weechat:xxx arg1 arg2 ...)` ausgeführt
|
|
|
|
* folgende Funktionen nutzen eine Liste von Argumente (anstelle von vielen
|
|
|
|
Argumenten für andere Funktionen), dies liegt daran das Guile die Anzahl
|
|
|
|
der Argumente eingeschränkt ist:
|
2011-10-26 19:25:51 +02:00
|
|
|
** config_new_section
|
|
|
|
** config_new_option
|
|
|
|
** bar_new
|
2010-08-05 14:01:00 +02:00
|
|
|
|
|
|
|
[[register_function]]
|
|
|
|
Die "Register" Funktion
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
|
|
|
|
Jedes WeeChat Skript muss sich bei WeeChat "registrieren". Die "register" Funktion
|
|
|
|
muss deshalb der erste WeeChat Befehl sein der durch das Skript genutzt wird.
|
|
|
|
|
2010-08-05 17:25:31 +02:00
|
|
|
Prototyp:
|
2010-08-05 14:01:00 +02:00
|
|
|
|
|
|
|
[source,python]
|
|
|
|
----------------------------------------
|
|
|
|
weechat.register(Name, Author, Version, Lizenz, Beschreibung, Shutdown_Funktion, Zeichensatz)
|
|
|
|
----------------------------------------
|
|
|
|
|
|
|
|
Argumente:
|
|
|
|
|
|
|
|
* 'name': interner Name des Skripts (String)
|
|
|
|
* 'author': Name des Authors (String)
|
|
|
|
* 'version': Version des Skripts (String)
|
|
|
|
* 'license': Lizenz für das Skripts (String)
|
2010-08-05 17:25:31 +02:00
|
|
|
* 'description': kurze Beschreibung des Skripts (String)
|
2012-11-05 22:04:49 +01:00
|
|
|
* 'shutdown_function': Name der Funktion die beim Beenden des Skripts aufgerufen werden soll
|
2013-01-01 13:44:23 +01:00
|
|
|
(String, kann auch eine leere Zeichenkette sein)
|
|
|
|
* 'charset': Skript Zeichensatz (optional, liegt das Skript im UTF-8 Format vor kann dieser Wert
|
2010-08-05 14:01:00 +02:00
|
|
|
leer bleiben. UTF-8 ist der Standardzeichensatz) (String)
|
|
|
|
|
|
|
|
Beispielskripten, für jede Sprache:
|
|
|
|
|
|
|
|
* python:
|
|
|
|
|
|
|
|
[source,python]
|
|
|
|
----------------------------------------
|
|
|
|
import weechat
|
|
|
|
|
|
|
|
weechat.register("test_python", "FlashCode", "1.0", "GPL3", "Test Skript", "", "")
|
|
|
|
weechat.prnt("", "Hallo, von einem python Skript!")
|
|
|
|
----------------------------------------
|
|
|
|
|
2011-10-26 19:25:51 +02:00
|
|
|
* perl:
|
|
|
|
|
|
|
|
[source,perl]
|
|
|
|
----------------------------------------
|
|
|
|
weechat::register("test_perl", "FlashCode", "1.0", "GPL3", "Test Skript", "", "");
|
|
|
|
weechat::print("", "Hallo, von einem perl Skript!");
|
|
|
|
----------------------------------------
|
|
|
|
|
2010-08-05 14:01:00 +02:00
|
|
|
* ruby:
|
|
|
|
|
|
|
|
[source,ruby]
|
|
|
|
----------------------------------------
|
|
|
|
def weechat_init
|
|
|
|
Weechat.register("test_ruby", "FlashCode", "1.0", "GPL3", "Test Skript", "", "")
|
|
|
|
Weechat.print("", "Hallo, von einem ruby Skript!")
|
|
|
|
return Weechat::WEECHAT_RC_OK
|
|
|
|
end
|
|
|
|
----------------------------------------
|
|
|
|
|
|
|
|
* lua:
|
|
|
|
|
|
|
|
[source,lua]
|
|
|
|
----------------------------------------
|
|
|
|
weechat.register("test_lua", "FlashCode", "1.0", "GPL3", "Test Skript", "", "")
|
|
|
|
weechat.print("", "Hallo, von einem lua Skript!")
|
|
|
|
----------------------------------------
|
|
|
|
|
|
|
|
* tcl:
|
|
|
|
|
2011-10-26 19:25:51 +02:00
|
|
|
[source,tcl]
|
2010-08-05 14:01:00 +02:00
|
|
|
----------------------------------------
|
|
|
|
weechat::register "test_tcl" "FlashCode" "1.0" "GPL3" "Test Skript" "" ""
|
|
|
|
weechat::print "" "Hallo, von einem tcl Skript!"
|
|
|
|
----------------------------------------
|
|
|
|
|
2011-10-26 19:25:51 +02:00
|
|
|
* guile (scheme):
|
|
|
|
|
|
|
|
[source,lisp]
|
|
|
|
----------------------------------------
|
|
|
|
(weechat:register "test_scheme" "FlashCode" "1.0" "GPL3" "Test script" "" "")
|
|
|
|
(weechat:print "" "Hello, from scheme script!")
|
|
|
|
----------------------------------------
|
|
|
|
|
2010-08-05 14:01:00 +02:00
|
|
|
[[load_script]]
|
|
|
|
Laden von Skripten
|
|
|
|
~~~~~~~~~~~~~~~~~~
|
|
|
|
|
2013-02-04 08:35:25 +01:00
|
|
|
Es wird empfohlen die "script" Erweiterung zum Laden von Skripten zu
|
|
|
|
nutzen, zum Beispiel:
|
2013-01-26 07:48:20 +01:00
|
|
|
|
|
|
|
----------------------------------------
|
|
|
|
/script load script.py
|
|
|
|
/script load script.pl
|
|
|
|
/script load script.rb
|
|
|
|
/script load script.lua
|
|
|
|
/script load script.tcl
|
|
|
|
/script load script.scm
|
|
|
|
----------------------------------------
|
|
|
|
|
2013-02-04 08:35:25 +01:00
|
|
|
Es besteht natürlich weiterhin die Möglichkeit, individuell für jede
|
|
|
|
Skriptsprache, den entsprechenden Befehl zu nutzen:
|
2010-08-05 14:01:00 +02:00
|
|
|
|
|
|
|
----------------------------------------
|
|
|
|
/python load python/skript.py
|
2011-10-26 19:25:51 +02:00
|
|
|
/perl load perl/skript.pl
|
2010-08-05 14:01:00 +02:00
|
|
|
/ruby load ruby/skript.rb
|
|
|
|
/lua load lua/skript.lua
|
|
|
|
/tcl load tcl/skript.tcl
|
2011-10-26 19:25:51 +02:00
|
|
|
/guile load guile/skript.scm
|
2010-08-05 14:01:00 +02:00
|
|
|
----------------------------------------
|
|
|
|
|
2013-02-04 08:35:25 +01:00
|
|
|
Um Skripten automatisch beim Start von WeeChat zu laden sollte man einen Link
|
|
|
|
anlegen, der in das Verzeichnis 'Skriptsprache/autoload' zeigt.
|
2010-08-05 14:01:00 +02:00
|
|
|
|
|
|
|
Ein Beispiel für ein Python-Skript:
|
|
|
|
|
|
|
|
----------------------------------------
|
|
|
|
$ cd ~/.weechat/python/autoload
|
|
|
|
$ ln -s ../script.py
|
|
|
|
----------------------------------------
|
|
|
|
|
2013-01-26 07:48:20 +01:00
|
|
|
[NOTE]
|
2013-02-04 08:35:25 +01:00
|
|
|
Installiert man mittels `/script install` ein Skript, dann wird automatisch
|
|
|
|
ein Link in das entsprechende 'autoload' Verzeichnis erzeugt.
|
2013-01-26 07:48:20 +01:00
|
|
|
|
2010-08-05 14:01:00 +02:00
|
|
|
[[differences_with_c_api]]
|
|
|
|
Unterschiede zur C API
|
|
|
|
----------------------
|
|
|
|
|
2010-08-05 17:25:31 +02:00
|
|
|
Die Skripten API ist nahezu identisch mit der API der C Erweiterung.
|
2010-08-05 14:01:00 +02:00
|
|
|
Um einen Überblick über alle API Funktionen (Prototyp, Argumente,
|
|
|
|
Rückgabe werte, Beispiele) zu erhalten werfen Sie einen Blick in
|
|
|
|
die 'WeeChat Plugin API Reference'.
|
|
|
|
Es ist wichtig dass man zwischen einer 'Erweiterung' und einem 'Skript'
|
|
|
|
unterscheidet: Eine 'Erweiterung' ist eine Binärdatei die kompiliert wurde
|
|
|
|
und mittels `/plugin` geladen wird. Ein 'Skript' ist eine Textdatei welche
|
|
|
|
durch eine Erweiterung z.B. 'python' mittels dem Befehl `/python` geladen
|
|
|
|
wird.
|
|
|
|
Falls Ihr Skript 'test.py' eine WeeChat API Funktion aufruft wird der Aufruf
|
|
|
|
wie folgt abgearbeitet:
|
|
|
|
|
|
|
|
........................................
|
2013-01-26 11:42:02 +01:00
|
|
|
┌──────────────────────┐ ╔══════════════════╗
|
|
|
|
│ python Erweiterung │ ║ WeeChat "core" ║
|
|
|
|
├────────────┬─────────┤ ╟─────────┐ ║
|
|
|
|
test.py ─────► │ Skript API │ C API │ ─────► ║ C API │ ║
|
|
|
|
└────────────┴─────────┘ ╚═════════╧════════╝
|
2010-08-05 14:01:00 +02:00
|
|
|
........................................
|
|
|
|
|
|
|
|
Gibt WeeChat einen Rückgabewert an Ihr Skript 'test.py' zurück wird der
|
|
|
|
Aufruf in umgekehrter Reihenfolge abgearbeitet:
|
|
|
|
|
|
|
|
........................................
|
2013-01-26 11:42:02 +01:00
|
|
|
╔══════════════════╗ ┌──────────────────────┐
|
|
|
|
║ WeeChat "core" ║ │ python Erweiterung │
|
|
|
|
║ ┌─────────╢ ├─────────┬────────────┤
|
|
|
|
║ │ C API ║ ─────► │ C API │ Skript API │ ─────► test.py
|
|
|
|
╚════════╧═════════╝ └─────────┴────────────┘
|
2010-08-05 14:01:00 +02:00
|
|
|
........................................
|
|
|
|
|
|
|
|
[[pointers]]
|
|
|
|
Pointer
|
|
|
|
~~~~~~~
|
|
|
|
|
2010-08-05 17:25:31 +02:00
|
|
|
Wie Sie vermutlich wissen existieren in Skripten keine "Pointer". Sendet nun
|
|
|
|
die API Funktion einen Pointer als Rückgabewert an das Skript, dann wird der
|
|
|
|
Pointer in einen String konvertiert.
|
2010-08-05 14:01:00 +02:00
|
|
|
|
2010-08-05 17:25:31 +02:00
|
|
|
Beispiel: Falls eine Funktion den Pointer 0x1234ab56 zurück gibt erhält das
|
2010-08-05 14:01:00 +02:00
|
|
|
Skript einen String in der Form "0x1234ab56".
|
|
|
|
|
2010-08-05 17:25:31 +02:00
|
|
|
Erwartet die API Funktion als Argument einen Pointer, dann muss das Skript diesen
|
2010-08-05 14:01:00 +02:00
|
|
|
Pointer als String übergeben. Die C Erweiterung konvertiert den String in einen
|
|
|
|
echten Pointer bevor die C API Funktion ausgeführt wird.
|
|
|
|
|
2010-08-05 17:25:31 +02:00
|
|
|
Ein leerer String oder "0x0" sind hierbei erlaubt. Beides wird in C als NULL interpretiert.
|
|
|
|
Im folgenden ein Beispiel um Daten im Core Buffer (WeeChat Hauptbuffer) auszugeben:
|
2010-08-05 14:01:00 +02:00
|
|
|
|
|
|
|
[source,python]
|
|
|
|
----------------------------------------
|
|
|
|
weechat.prnt("", "Hi!")
|
|
|
|
----------------------------------------
|
|
|
|
|
|
|
|
[WARNING]
|
|
|
|
Aus Gründen der Geschwindigkeit wird in vielen Funktionen darauf verzichtet
|
2010-08-05 17:25:31 +02:00
|
|
|
die Pointer auf ihre Korrektheit zu überprüfen. Es obliegt Ihrer Verantwortung
|
|
|
|
einen gültigen Pointer zu übergeben. Sollten Sie dies nicht beachten dann werden
|
2010-08-05 14:01:00 +02:00
|
|
|
Sie mit einem netten Crash-Report belohnt ;)
|
|
|
|
|
|
|
|
[[callbacks]]
|
|
|
|
Callbacks
|
|
|
|
~~~~~~~~~
|
|
|
|
|
2010-08-05 17:25:31 +02:00
|
|
|
Beinahe alle WeeChat Callbacks müssen entweder WEECHAT_RC_OK oder WEECHAT_RC_ERROR als
|
|
|
|
Ergebnis zurück liefern. Eine Ausnahme bildet das modifier Callback, hier wird ein
|
2010-08-05 14:01:00 +02:00
|
|
|
String als Rückgabewert erwartet.
|
|
|
|
|
|
|
|
C Callbacks nutzen ein "Data" Argument welches ein Pointer ist. In der
|
|
|
|
Skript API ist "Data" ein String der jeden Wert haben darf (es handelt sich
|
|
|
|
nicht um einen Pointer).
|
|
|
|
|
2013-02-04 08:35:25 +01:00
|
|
|
callback Beispiele, für jede Skriptsprache:
|
2013-01-26 08:22:04 +01:00
|
|
|
|
|
|
|
* python:
|
2010-08-05 14:01:00 +02:00
|
|
|
|
|
|
|
[source,python]
|
|
|
|
----------------------------------------
|
2013-01-26 08:22:04 +01:00
|
|
|
def timer_cb(data, remaining_calls):
|
|
|
|
weechat.prnt("", "timer! data=%s" % data)
|
|
|
|
return weechat.WEECHAT_RC_OK
|
|
|
|
|
|
|
|
weechat.hook_timer(1000, 0, 1, "timer_cb", "test")
|
|
|
|
----------------------------------------
|
|
|
|
|
|
|
|
* perl:
|
|
|
|
|
|
|
|
[source,perl]
|
|
|
|
----------------------------------------
|
|
|
|
sub timer_cb {
|
|
|
|
my ($data, $remaining_calls) = @_;
|
|
|
|
weechat::print("", "timer! data=$data");
|
|
|
|
return weechat::WEECHAT_RC_OK;
|
|
|
|
}
|
|
|
|
|
|
|
|
weechat::hook_timer(1000, 0, 1, "timer_cb", "test");
|
|
|
|
----------------------------------------
|
|
|
|
|
|
|
|
* ruby:
|
|
|
|
|
|
|
|
[source,ruby]
|
|
|
|
----------------------------------------
|
|
|
|
def timer_cb(data, remaining_calls)
|
|
|
|
Weechat.print("", "timer! data=#{data}");
|
|
|
|
return Weechat::WEECHAT_RC_OK
|
|
|
|
end
|
|
|
|
|
|
|
|
Weechat.hook_timer(1000, 0, 1, "timer_cb", "test");
|
|
|
|
----------------------------------------
|
|
|
|
|
|
|
|
* lua:
|
2010-08-05 14:01:00 +02:00
|
|
|
|
2013-01-26 08:22:04 +01:00
|
|
|
[source,lua]
|
|
|
|
----------------------------------------
|
|
|
|
function timer_cb(data, remaining_calls)
|
|
|
|
weechat.print("", "timer! data="..data)
|
2010-08-05 14:01:00 +02:00
|
|
|
return weechat.WEECHAT_RC_OK
|
2013-01-26 08:22:04 +01:00
|
|
|
end
|
|
|
|
|
|
|
|
weechat.hook_timer(1000, 0, 1, "timer_cb", "test")
|
|
|
|
----------------------------------------
|
|
|
|
|
|
|
|
* tcl:
|
|
|
|
|
|
|
|
[source,tcl]
|
|
|
|
----------------------------------------
|
|
|
|
proc timer_cb { data remaining_calls } {
|
|
|
|
weechat::print {} "timer! data=$data"
|
|
|
|
return $::weechat::WEECHAT_RC_OK
|
|
|
|
}
|
|
|
|
|
|
|
|
weechat::hook_timer 1000 0 1 timer_cb test
|
|
|
|
----------------------------------------
|
|
|
|
|
|
|
|
* guile (scheme):
|
|
|
|
|
|
|
|
[source,lisp]
|
|
|
|
----------------------------------------
|
2013-02-19 22:49:59 +01:00
|
|
|
(define (timer_cb data remaining_calls)
|
|
|
|
(weechat:print "" (string-append "timer! data=" data))
|
2013-01-26 08:22:04 +01:00
|
|
|
weechat:WEECHAT_RC_OK
|
|
|
|
)
|
|
|
|
|
|
|
|
(weechat:hook_timer 1000 0 1 "timer_cb" "test")
|
2010-08-05 14:01:00 +02:00
|
|
|
----------------------------------------
|
|
|
|
|
|
|
|
[[script_api]]
|
|
|
|
Skript API
|
|
|
|
----------
|
|
|
|
|
|
|
|
Um weiterführende Informationen zu den API Funktionen zu erhalten
|
|
|
|
lesen Sie bitte 'WeeChat Plugin API Reference'.
|
|
|
|
|
|
|
|
[[script_api_functions]]
|
|
|
|
Funktionen
|
|
|
|
~~~~~~~~~~
|
|
|
|
|
|
|
|
Liste der Skript API Funktionen:
|
|
|
|
|
|
|
|
[width="100%",cols="^1,10",options="header"]
|
|
|
|
|========================================
|
|
|
|
| Kategorie | Funktionen
|
|
|
|
| Allgemein |
|
|
|
|
register
|
|
|
|
| Erweiterungen |
|
|
|
|
plugin_get_name
|
|
|
|
| Strings |
|
|
|
|
charset_set, iconv_to_internal, iconv_from_internal, gettext, ngettext, +
|
2011-08-01 19:25:01 +02:00
|
|
|
string_match, string_has_highlight, string_has_highlight_regex,
|
|
|
|
string_mask_to_regex, string_remove_color, string_is_command_char,
|
|
|
|
string_input_for_buffer
|
2010-08-05 14:01:00 +02:00
|
|
|
| Verzeichnisse |
|
|
|
|
mkdir_home, mkdir, mkdir_parents
|
|
|
|
| sortierte Listen |
|
2011-08-01 19:25:01 +02:00
|
|
|
list_new, list_add, list_search, list_search_pos, list_casesearch,
|
|
|
|
list_casesearch_pos, list_get, list_set, list_next, list_prev, list_string,
|
|
|
|
list_size, list_remove, list_remove_all, list_free
|
2010-08-05 14:01:00 +02:00
|
|
|
| Konfigurationsdatei |
|
|
|
|
config_new, config_new_section, config_search_section, config_new_option,
|
|
|
|
config_search_option, +
|
|
|
|
config_string_to_boolean, config_option_reset, config_option_set,
|
|
|
|
config_option_set_null, config_option_unset, config_option_rename,
|
|
|
|
config_option_is_null, config_option_default_is_null, +
|
|
|
|
config_boolean, config_boolean_default, config_integer, config_integer_default,
|
|
|
|
config_string, config_string_default, config_color, config_color_default, +
|
|
|
|
config_write_option, config_write_line, config_write, config_read,
|
|
|
|
config_reload, +
|
|
|
|
config_option_free, config_section_free_options, config_section_free,
|
|
|
|
config_free, +
|
|
|
|
config_get, config_get_plugin, config_is_set_plugin, config_set_plugin,
|
2011-08-01 19:25:01 +02:00
|
|
|
config_set_desc_plugin, config_unset_plugin
|
2011-12-25 21:35:38 +01:00
|
|
|
| Tastenbelegung |
|
2011-08-20 10:52:27 +02:00
|
|
|
key_bind, key_unbind
|
2010-08-05 14:01:00 +02:00
|
|
|
| Ausgabe |
|
|
|
|
prefix, color, print (für Python: prnt), print_date_tags (für Python:
|
|
|
|
prnt_date_tags), print_y (für Python: prnt_y), log_print
|
|
|
|
| Hooks |
|
|
|
|
hook_command, hook_command_run, hook_timer, hook_fd, hook_process,
|
2012-01-19 11:25:38 +01:00
|
|
|
hook_process_hashtable, hook_connect, hook_print, hook_signal,
|
|
|
|
hook_signal_send, hook_hsignal, hook_hsignal_send, hook_config,
|
|
|
|
hook_completion, hook_completion_list_add, hook_modifier, hook_modifier_exec,
|
|
|
|
hook_info, hook_info_hashtable, hook_infolist, hook_focus, unhook, unhook_all
|
2010-08-05 14:01:00 +02:00
|
|
|
| Buffer |
|
|
|
|
buffer_new, current_buffer, buffer_search, buffer_search_main, buffer_clear,
|
|
|
|
buffer_close, buffer_merge, buffer_unmerge, buffer_get_integer,
|
|
|
|
buffer_get_string, buffer_get_pointer, buffer_set,
|
2011-08-01 19:25:01 +02:00
|
|
|
buffer_string_replace_local_var, buffer_match_list
|
2010-08-05 14:01:00 +02:00
|
|
|
| Fenster |
|
2011-08-01 19:25:01 +02:00
|
|
|
current_window, window_search_with_buffer, window_get_integer,
|
|
|
|
window_get_string, window_get_pointer, window_set_title
|
2010-08-05 14:01:00 +02:00
|
|
|
| Nickliste |
|
|
|
|
nicklist_add_group, nicklist_search_group, nicklist_add_nick,
|
|
|
|
nicklist_search_nick, nicklist_remove_group, nicklist_remove_nick,
|
2010-10-29 18:40:25 +02:00
|
|
|
nicklist_remove_all, nicklist_group_get_integer, nicklist_group_get_string,
|
|
|
|
nicklist_group_get_pointer, nicklist_group_set, nicklist_nick_get_integer,
|
|
|
|
nicklist_nick_get_string, nicklist_nick_get_pointer, nicklist_nick_set
|
2010-08-05 14:01:00 +02:00
|
|
|
| Bars |
|
|
|
|
bar_item_search, bar_item_new, bar_item_update, bar_item_remove, bar_search,
|
|
|
|
bar_new, bar_set, bar_update, bar_remove
|
|
|
|
| Befehle |
|
|
|
|
command
|
|
|
|
| Informationen |
|
2010-08-27 15:59:06 +02:00
|
|
|
info_get, info_get_hashtable
|
2010-08-05 14:01:00 +02:00
|
|
|
| Infolisten |
|
|
|
|
infolist_new, infolist_new_item, infolist_new_var_integer,
|
|
|
|
infolist_new_var_string, infolist_new_var_pointer, infolist_new_var_time, +
|
2010-10-20 13:11:24 +02:00
|
|
|
infolist_get, infolist_next, infolist_prev, infolist_reset_item_cursor, +
|
|
|
|
infolist_fields, infolist_integer, infolist_string, infolist_pointer, +
|
|
|
|
infolist_time, infolist_free
|
2011-08-01 19:25:01 +02:00
|
|
|
| hdata |
|
|
|
|
hdata_get, hdata_get_var_offset, hdata_get_var_type_string,
|
2011-12-17 17:03:39 +01:00
|
|
|
hdata_get_var_hdata, hdata_get_list, hdata_check_pointer, hdata_move,
|
|
|
|
hdata_char, hdata_integer, hdata_long, hdata_string, hdata_pointer,
|
2012-01-19 11:25:38 +01:00
|
|
|
hdata_time, hdata_hashtable, hdata_get_string
|
2010-08-05 14:01:00 +02:00
|
|
|
| Upgrade |
|
|
|
|
upgrade_new, upgrade_write_object, upgrade_read, upgrade_close
|
|
|
|
|========================================
|
|
|
|
|
|
|
|
[[script_api_constants]]
|
|
|
|
Konstanten
|
|
|
|
~~~~~~~~~~
|
|
|
|
|
|
|
|
Liste der Konstanten in Skript API:
|
|
|
|
|
|
|
|
[width="100%",cols="^1,10",options="header"]
|
|
|
|
|========================================
|
|
|
|
| Kategorie | Konstanten
|
|
|
|
| return codes |
|
|
|
|
WEECHAT_RC_OK, WEECHAT_RC_OK_EAT, WEECHAT_RC_ERROR
|
|
|
|
| Konfigurationsdatei |
|
|
|
|
WEECHAT_CONFIG_READ_OK, WEECHAT_CONFIG_READ_MEMORY_ERROR,
|
|
|
|
WEECHAT_CONFIG_READ_FILE_NOT_FOUND, WEECHAT_CONFIG_WRITE_OK,
|
|
|
|
WEECHAT_CONFIG_WRITE_ERROR, WEECHAT_CONFIG_WRITE_MEMORY_ERROR, +
|
|
|
|
WEECHAT_CONFIG_OPTION_SET_OK_CHANGED, WEECHAT_CONFIG_OPTION_SET_OK_SAME_VALUE,
|
|
|
|
WEECHAT_CONFIG_OPTION_SET_ERROR, WEECHAT_CONFIG_OPTION_SET_OPTION_NOT_FOUND,
|
|
|
|
WEECHAT_CONFIG_OPTION_UNSET_OK_NO_RESET, WEECHAT_CONFIG_OPTION_UNSET_OK_RESET,
|
|
|
|
WEECHAT_CONFIG_OPTION_UNSET_OK_REMOVED, WEECHAT_CONFIG_OPTION_UNSET_ERROR
|
|
|
|
| sortierte Listen |
|
|
|
|
WEECHAT_LIST_POS_SORT, WEECHAT_LIST_POS_BEGINNING, WEECHAT_LIST_POS_END
|
|
|
|
| Hotlist |
|
|
|
|
WEECHAT_HOTLIST_LOW, WEECHAT_HOTLIST_MESSAGE, WEECHAT_HOTLIST_PRIVATE,
|
|
|
|
WEECHAT_HOTLIST_HIGHLIGHT
|
|
|
|
| hook Prozesse |
|
|
|
|
WEECHAT_HOOK_PROCESS_RUNNING, WEECHAT_HOOK_PROCESS_ERROR
|
|
|
|
| hook Connect |
|
|
|
|
WEECHAT_HOOK_CONNECT_OK, WEECHAT_HOOK_CONNECT_ADDRESS_NOT_FOUND,
|
|
|
|
WEECHAT_HOOK_CONNECT_IP_ADDRESS_NOT_FOUND, WEECHAT_HOOK_CONNECT_CONNECTION_REFUSED,
|
|
|
|
WEECHAT_HOOK_CONNECT_PROXY_ERROR, WEECHAT_HOOK_CONNECT_LOCAL_HOSTNAME_ERROR,
|
|
|
|
WEECHAT_HOOK_CONNECT_GNUTLS_INIT_ERROR, WEECHAT_HOOK_CONNECT_GNUTLS_HANDSHAKE_ERROR,
|
2012-10-14 10:59:00 +02:00
|
|
|
WEECHAT_HOOK_CONNECT_MEMORY_ERROR, WEECHAT_HOOK_CONNECT_TIMEOUT,
|
|
|
|
WEECHAT_HOOK_CONNECT_SOCKET_ERROR
|
2010-08-05 14:01:00 +02:00
|
|
|
| hook Signal |
|
|
|
|
WEECHAT_HOOK_SIGNAL_STRING, WEECHAT_HOOK_SIGNAL_INT, WEECHAT_HOOK_SIGNAL_POINTER
|
|
|
|
|========================================
|
|
|
|
|
|
|
|
[[common_tasks]]
|
|
|
|
Gemeinschaftsaufgabe
|
|
|
|
--------------------
|
|
|
|
|
|
|
|
Dieses Kapitel beinhaltet einige Aufgaben mit Lösungsbeispielen.
|
|
|
|
Die Skript API wird dabei nur sehr oberflächlich besprochen.Um eine vollständige
|
|
|
|
Übersicht aller Befehle zu erhalten nutzen Sie bitte die 'WeeChat Plugin API Reference'.
|
|
|
|
|
|
|
|
[[buffers]]
|
|
|
|
Buffer
|
|
|
|
~~~~~~
|
|
|
|
|
|
|
|
[[buffers_display_messages]]
|
|
|
|
Nachrichten anzeigen
|
|
|
|
^^^^^^^^^^^^^^^^^^^^
|
|
|
|
|
|
|
|
Eine leere Zeichenkette wird häufig verwendet um den WeeChat Core Buffer zu nutzen.
|
2010-08-05 17:25:31 +02:00
|
|
|
Möchten Sie einen anderen Buffer nutzen dann muss der Pointer dieses Buffers verwendet
|
|
|
|
werden (Übergabe als String, siehe <<pointers,Pointer>>).
|
2010-08-05 14:01:00 +02:00
|
|
|
|
|
|
|
Beispiele:
|
|
|
|
|
|
|
|
[source,python]
|
|
|
|
----------------------------------------
|
|
|
|
# Gibt den Text "Hallo" im Core Buffer aus
|
|
|
|
weechat.prnt("", "Hallo")
|
|
|
|
|
2010-08-05 17:25:31 +02:00
|
|
|
# Gibt den Text "Hallo" im Core Buffer aus, schreibt diesen aber nicht in die Protokolldatei
|
2010-08-05 14:01:00 +02:00
|
|
|
# (nur Version >= 0.3.3)
|
|
|
|
weechat.prnt_date_tags("", 0, "no_log", "hello")
|
|
|
|
|
|
|
|
# Gibt den Präfix "==>" gefolgt von dem Text "Hallo" im aktuellen Buffer aus
|
|
|
|
# (Präfix und Text müssen durch ein Tab getrennt werden)
|
|
|
|
weechat.prnt(weechat.current_buffer(), "==>\tHallo")
|
|
|
|
|
|
|
|
# Gibt eine Fehlermeldung im Core Buffer aus (mit Präfix für Fehler)
|
|
|
|
weechat.prnt("", "%sfalsche Anzahl an Argumenten" % weechat.prefix("error"))
|
|
|
|
|
|
|
|
# Gibt eine farbige Nachricht im Core Buffer aus
|
|
|
|
weechat.prnt("", "Text %sGeld auf Blau" % weechat.color("yellow,blue"))
|
|
|
|
|
|
|
|
# sucht einen bestimmten Buffer und gibt dort einen Text aus
|
|
|
|
# (der Name des Buffers muss folgendes Format besitzen Erweiterung.Name, Beispiel: "irc.freenode.#weechat")
|
|
|
|
buffer = weechat.buffer_search("irc", "freenode.#weechat")
|
|
|
|
weechat.prnt(buffer, "Nachricht im #weechat Channel")
|
|
|
|
|
2010-08-05 17:25:31 +02:00
|
|
|
# die zweite Möglichkeit einen Buffer zu suchen (empfohlen!)
|
|
|
|
# (bitte beachten Sie dass der Server- und Channelname durch ein Komma zu trennen sind)
|
2010-08-05 14:01:00 +02:00
|
|
|
buffer = weechat.info_get("irc_buffer", "freenode,#weechat")
|
|
|
|
weechat.prnt(buffer, "Nachricht im #weechat Channel")
|
|
|
|
----------------------------------------
|
|
|
|
|
|
|
|
[NOTE]
|
|
|
|
Die print Funktion heißt in Perl/Ruby/Lua/Tcl `print`. In Python lautet die Funktion `prnt`.
|
|
|
|
|
|
|
|
[[buffers_send_text]]
|
|
|
|
Text in einen Buffer senden
|
|
|
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
|
|
|
|
|
|
Sie können einen Text oder einen Befehl zu einem Buffer senden. Dies entspricht exakt dem
|
2010-08-05 17:25:31 +02:00
|
|
|
Verhalten als ob Sie einen Text oder einen Befehl in der Befehlszeile eingeben und diesen
|
|
|
|
mit der [Enter] Taste bestätigen.
|
2010-08-05 14:01:00 +02:00
|
|
|
|
|
|
|
Beispiele:
|
|
|
|
|
|
|
|
[source,python]
|
|
|
|
----------------------------------------
|
|
|
|
# führt den Befehl "/help" im Core Buffer aus
|
|
|
|
weechat.command("", "/help")
|
|
|
|
|
2010-08-05 17:25:31 +02:00
|
|
|
# sendet den Text "Hallo" in den IRC Channel #weechat (die Teilnehmer des Channels sehen diese Nachricht)
|
2010-08-05 14:01:00 +02:00
|
|
|
buffer = weechat.info_get("irc_buffer", "freenode,#weechat")
|
|
|
|
weechat.command(buffer, "Hallo")
|
|
|
|
----------------------------------------
|
|
|
|
|
|
|
|
[[buffers_new]]
|
|
|
|
neuen Buffer öffnen
|
|
|
|
^^^^^^^^^^^^^^^^^^^
|
|
|
|
|
|
|
|
Sie können aus Ihrem Skript einen neuen Buffer öffnen um dort Nachrichten auszugeben.
|
|
|
|
|
2010-08-05 17:25:31 +02:00
|
|
|
Zwei Callbacks können aufgerufen werden (diese sind optional): der erste Callback dient dazu
|
|
|
|
eine Routine aufzurufen sobald ein Text eingegeben und mit [Enter] bestätigt wird. Der zweite
|
|
|
|
Callback ruft eine Routine auf die beim Schließen des Buffers ausgeführt wird (zum Beispiel
|
|
|
|
wenn `/buffer close` genutzt wurde).
|
2010-08-05 14:01:00 +02:00
|
|
|
|
|
|
|
Beispiele:
|
|
|
|
|
|
|
|
[source,python]
|
|
|
|
----------------------------------------
|
|
|
|
# Callback falls Daten aus der Eingabezeile empfangen wurden
|
|
|
|
def buffer_input_cb(data, buffer, input_data):
|
|
|
|
# ...
|
|
|
|
return weechat.WEECHAT_RC_OK
|
|
|
|
|
|
|
|
# Callback falls der Buffer geschlossen wurde
|
|
|
|
def buffer_close_cb(data, buffer):
|
|
|
|
# ...
|
|
|
|
return weechat.WEECHAT_RC_OK
|
|
|
|
|
|
|
|
# neuen Buffer öffnen
|
|
|
|
buffer = weechat.buffer_new("Mein_Buffer", "buffer_input_cb", "", "buffer_close_cb", "")
|
|
|
|
|
|
|
|
# Überschrift für Buffer bestimmen
|
|
|
|
weechat.buffer_set(buffer, "Titel", "Dies ist die Überschrift für meinen Buffer")
|
|
|
|
|
2010-08-05 17:25:31 +02:00
|
|
|
# deaktiviert die Protokollierung. Dazu wird die lokale Variable "no_log" auf "1" gesetzt
|
2010-08-05 14:01:00 +02:00
|
|
|
weechat.buffer_set(buffer, "localvar_set_no_log", "1")
|
|
|
|
----------------------------------------
|
|
|
|
|
|
|
|
[[buffers_properties]]
|
|
|
|
Eigenschaften von Buffern
|
|
|
|
^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
|
|
|
2010-08-05 17:25:31 +02:00
|
|
|
Die verschiedenen Eigenschaften von Buffern können in Form eines Strings, Integer oder als Pointer
|
2010-08-05 14:01:00 +02:00
|
|
|
vorliegen und gelesen werden.
|
|
|
|
|
|
|
|
Beispiele:
|
|
|
|
|
|
|
|
[source,python]
|
|
|
|
----------------------------------------
|
|
|
|
buffer = weechat.current_buffer()
|
|
|
|
|
|
|
|
nummer = weechat.buffer_get_integer(buffer, "number")
|
|
|
|
name = weechat.buffer_get_string(buffer, "name")
|
|
|
|
kurz_name = weechat.buffer_get_string(buffer, "short_name")
|
|
|
|
----------------------------------------
|
|
|
|
|
|
|
|
Es ist möglich lokale Variablen eines Buffers hinzuzufügen, zu
|
|
|
|
lesen oder zu löschen:
|
|
|
|
|
|
|
|
[source,python]
|
|
|
|
----------------------------------------
|
|
|
|
# lokale Variable hinzufügen
|
|
|
|
weechat.buffer_set(buffer, "localvar_set_meinevariable", "mit_meinem_Wert")
|
|
|
|
|
|
|
|
# lokale Variable lesen
|
|
|
|
meine_variable = weechat.buffer_get_string(buffer, "localvar_meinevariable")
|
|
|
|
|
|
|
|
# lokale Variable löschen
|
|
|
|
weechat.buffer_set(buffer, "localvar_del_meinevariable", "")
|
|
|
|
----------------------------------------
|
|
|
|
|
|
|
|
Um zu sehen welche lokalen Variablen für einen Buffer gesetzt sind führen Sie
|
|
|
|
bitte in WeeChat folgenden Befehl aus:
|
|
|
|
|
|
|
|
----------------------------------------
|
|
|
|
/buffer localvar
|
|
|
|
----------------------------------------
|
|
|
|
|
|
|
|
[[hooks]]
|
|
|
|
Hooks
|
|
|
|
~~~~~
|
|
|
|
|
|
|
|
[[hook_command]]
|
|
|
|
neuen Befehl hinzufügen
|
|
|
|
^^^^^^^^^^^^^^^^^^^^^^^
|
|
|
|
|
|
|
|
Erstellt mittels `hook_command` einen benutzerdefinierten Befehl. Dabei kann
|
|
|
|
eine benutzerdefinierte Vervollständigung der Argumente genutzt werden.
|
|
|
|
|
2010-08-05 17:25:31 +02:00
|
|
|
Beispiel:
|
2010-08-05 14:01:00 +02:00
|
|
|
|
|
|
|
[source,python]
|
|
|
|
----------------------------------------
|
|
|
|
def mein_befehl_cb(data, buffer, args):
|
|
|
|
# ...
|
|
|
|
return weechat.WEECHAT_RC_OK
|
|
|
|
|
|
|
|
hook = weechat.hook_command("meinfilter", "Beschreibung meines Filters",
|
|
|
|
"[list] | [enable|disable|toggle [name]] | [add name plugin.buffer tags regex] | [del name|-all]",
|
|
|
|
"Beschreibung der Argumente...",
|
|
|
|
"list"
|
|
|
|
" || enable %(filters_names)"
|
|
|
|
" || disable %(filters_names)"
|
|
|
|
" || toggle %(filters_names)"
|
|
|
|
" || add %(filters_names) %(buffers_plugins_names)|*"
|
|
|
|
" || del %(filters_names)|-all",
|
|
|
|
"mein_befehl_cb", "")
|
|
|
|
----------------------------------------
|
|
|
|
|
|
|
|
Der Befehl wird dann in WeeChat wie folgt genutzt:
|
|
|
|
|
|
|
|
----------------------------------------
|
|
|
|
/help meinfilter
|
|
|
|
|
|
|
|
/meinfilter Argumente...
|
|
|
|
----------------------------------------
|
|
|
|
|
|
|
|
[[hook_timer]]
|
|
|
|
Nutzung des Timers
|
|
|
|
^^^^^^^^^^^^^^^^^^
|
|
|
|
|
|
|
|
Mittels `hook_timer` wird eine Zeitfunktion implementiert.
|
|
|
|
|
|
|
|
Beispiele:
|
|
|
|
|
|
|
|
[source,python]
|
|
|
|
----------------------------------------
|
|
|
|
def timer_cb(data, remaining_calls):
|
|
|
|
# ...
|
|
|
|
return weechat.WEECHAT_RC_OK
|
|
|
|
|
|
|
|
# Timer wird jede Minute aufgerufen (wenn die Sekunden auf 00 springen)
|
|
|
|
weechat.hook_timer(60 * 1000, 60, 0, "timer_cb", "")
|
|
|
|
----------------------------------------
|
|
|
|
|
|
|
|
[[hook_process]]
|
|
|
|
Hintergrundprozesse
|
|
|
|
^^^^^^^^^^^^^^^^^^^
|
|
|
|
|
|
|
|
Mit der Funktion `hook_process` kann ein Hintergrundprozess gestartet werden.
|
|
|
|
Der Callback wird aufgerufen sobald der Hintergrundprozess abgearbeitet wurde.
|
|
|
|
Dies kann auch mehrfach der Fall sein.
|
|
|
|
|
|
|
|
Für den letzten Aufruf des Callback wird 'rc' auf 0 oder einen positiven Wert
|
|
|
|
gesetzt. Dies ist der Return Code des Befehls.
|
|
|
|
|
|
|
|
Beispiele:
|
|
|
|
|
2012-01-19 13:56:48 +01:00
|
|
|
[source,python]
|
|
|
|
----------------------------------------
|
|
|
|
process_output = ""
|
|
|
|
|
|
|
|
def my_process_cb(data, command, rc, out, err):
|
|
|
|
global process_output
|
|
|
|
if out != "":
|
|
|
|
process_output += out
|
|
|
|
if int(rc) >= 0:
|
|
|
|
weechat.prnt("", process_output)
|
|
|
|
return weechat.WEECHAT_RC_OK
|
|
|
|
|
|
|
|
weechat.hook_process("/bin/ls -l /etc", 10 * 1000, "my_process_cb", "")
|
|
|
|
----------------------------------------
|
|
|
|
|
|
|
|
[[url_transfer]]
|
2012-02-04 11:33:42 +01:00
|
|
|
URL Übertragung
|
|
|
|
^^^^^^^^^^^^^^^
|
2012-01-19 13:56:48 +01:00
|
|
|
|
2012-02-04 11:33:42 +01:00
|
|
|
_Neu seit Version 0.3.7._
|
2012-01-19 13:56:48 +01:00
|
|
|
|
2012-02-04 11:33:42 +01:00
|
|
|
Um URLs herunterzuladen (oder um etwas zu einer URL zu senden), muss die Funktion
|
|
|
|
`hook_process` genutzt werden. Müssen zusätzliche Optionen gesetzt werden, für
|
|
|
|
einen URL Transfer, kommt die Funktion `hook_process_hashtable` zum Einsatz.
|
2012-01-19 13:56:48 +01:00
|
|
|
|
2012-02-04 11:33:42 +01:00
|
|
|
Beispiel eines URL Transfers, ohne zusätzliche Optionen: Die HTML Seite wird
|
|
|
|
dabei in der Callback-Variable "out" gesichert (Standardausgabe des Prozesses):
|
2012-01-19 13:56:48 +01:00
|
|
|
|
2013-03-16 16:06:16 +01:00
|
|
|
// TRANSLATION MISSING
|
2010-08-05 14:01:00 +02:00
|
|
|
[source,python]
|
|
|
|
----------------------------------------
|
2013-03-16 16:06:16 +01:00
|
|
|
# Display current stable version of WeeChat.
|
|
|
|
weechat_version = ""
|
2010-08-05 14:01:00 +02:00
|
|
|
|
2013-03-16 16:06:16 +01:00
|
|
|
def weechat_process_cb(data, command, rc, out, err):
|
|
|
|
global weechat_version
|
2012-01-19 13:56:48 +01:00
|
|
|
if out != "":
|
2013-03-16 16:06:16 +01:00
|
|
|
weechat_version += out
|
2010-08-05 14:01:00 +02:00
|
|
|
if int(rc) >= 0:
|
2013-03-16 16:06:16 +01:00
|
|
|
weechat.prnt("", "Current WeeChat stable is: %s" % weechat_version)
|
2010-08-05 14:01:00 +02:00
|
|
|
return weechat.WEECHAT_RC_OK
|
|
|
|
|
2013-03-16 16:06:16 +01:00
|
|
|
weechat.hook_process("url:http://weechat.org/info/stable/",
|
|
|
|
30 * 1000, "weechat_process_cb", "")
|
2012-01-19 13:56:48 +01:00
|
|
|
----------------------------------------
|
|
|
|
|
2013-03-16 16:06:16 +01:00
|
|
|
// TRANSLATION MISSING
|
|
|
|
[TIP]
|
|
|
|
All infos available about WeeChat are on page http://weechat.org/info
|
|
|
|
|
2012-02-04 11:33:42 +01:00
|
|
|
Beispiel eines URL Transfers, mit zusätzliche Optionen: Es wird das neuste
|
|
|
|
WeeChat Entwicklerpaket in die Datei '/tmp/weechat-devel.tar.gz' gesichert:
|
2012-01-19 13:56:48 +01:00
|
|
|
|
|
|
|
[source,python]
|
|
|
|
----------------------------------------
|
|
|
|
def my_process_cb(data, command, rc, out, err):
|
|
|
|
if int(rc) >= 0:
|
|
|
|
weechat.prnt("", "End of transfer (rc=%s)" % rc)
|
|
|
|
return weechat.WEECHAT_RC_OK
|
|
|
|
|
|
|
|
weechat.hook_process_hashtable("url:http://weechat.org/files/src/weechat-devel.tar.gz",
|
|
|
|
{ "file_out": "/tmp/weechat-devel.tar.gz" },
|
|
|
|
30 * 1000, "my_process_cb", "")
|
2010-08-05 14:01:00 +02:00
|
|
|
----------------------------------------
|
|
|
|
|
2012-02-04 11:33:42 +01:00
|
|
|
Für weiterführende Informationen zum URL Transfer und für die verfügbaren Optionen,
|
|
|
|
siehe `hook_process` und `hook_process_hashtable` in der API Erweiterung Anleitung.
|
2012-01-19 13:56:48 +01:00
|
|
|
|
2010-08-05 14:01:00 +02:00
|
|
|
[[config_options]]
|
|
|
|
Konfiguration / Optionen
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
|
|
|
|
[[config_options_set_script]]
|
|
|
|
Optionen von Skripten setzen
|
|
|
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
|
|
|
|
|
|
Die Funktion `config_is_set_plugin` wird dazu benutzt um zu testen ob eine Option
|
|
|
|
gesetzt ist oder nicht. Mit der Funktion `config_set_plugin` wird eine Option gesetzt.
|
|
|
|
|
|
|
|
Beispiele:
|
|
|
|
|
|
|
|
[source,python]
|
|
|
|
----------------------------------------
|
|
|
|
skript_optionen = {
|
|
|
|
"Option1" : "Wert1",
|
|
|
|
"Option2" : "Wert2",
|
|
|
|
"Option3" : "Wert3",
|
|
|
|
}
|
2013-01-07 10:00:02 +01:00
|
|
|
for option, standardwert in skript_optionen.items():
|
2010-08-05 14:01:00 +02:00
|
|
|
if not weechat.config_is_set_plugin(option):
|
|
|
|
weechat.config_set_plugin(option, standardwert)
|
|
|
|
----------------------------------------
|
|
|
|
|
|
|
|
[[config_options_detect_changes]]
|
|
|
|
Veränderungen bemerken
|
|
|
|
^^^^^^^^^^^^^^^^^^^^^^
|
|
|
|
|
2010-08-05 17:25:31 +02:00
|
|
|
Die Funktion `hook_config` wird dazu benutzt um festzustellen falls ein Anwender
|
2010-08-05 14:01:00 +02:00
|
|
|
eine Option des Skripts verändert hat.
|
|
|
|
|
|
|
|
Beispiele:
|
|
|
|
|
|
|
|
[source,python]
|
|
|
|
----------------------------------------
|
|
|
|
SKRIPT_NAME = "meinskript"
|
|
|
|
|
|
|
|
# ...
|
|
|
|
|
|
|
|
def config_cb(data, option, value):
|
2012-01-19 13:56:48 +01:00
|
|
|
"""Callback welcher genutzt wird wenn eine Option verändert wurde."""
|
2010-08-05 14:01:00 +02:00
|
|
|
# zum Beispiel werden hier alle Optionen des Skripts in die entsprechenden Variablen geschrieben...
|
|
|
|
# ...
|
|
|
|
return weechat.WEECHAT_RC_OK
|
|
|
|
|
|
|
|
# ...
|
|
|
|
|
|
|
|
weechat.hook_config("plugins.var.python." + SKRIPT_NAME + ".*", "config_cb", "")
|
|
|
|
# für die jeweilige Programmiersprache muss "python" durch "perl", "ruby", "lua" oder "tcl" ersetzt werden.
|
|
|
|
----------------------------------------
|
|
|
|
|
|
|
|
[[config_options_weechat]]
|
|
|
|
WeeChat Optionen lesen
|
|
|
|
^^^^^^^^^^^^^^^^^^^^^^
|
|
|
|
|
|
|
|
Die Funktion `config_get` gibt einen Pointer zu einer Option zurück. Abhängig vom Typ der Option
|
|
|
|
muss entweder `config_string`, `config_boolean`, `config_integer` oder `config_color` genutzt werden.
|
|
|
|
|
|
|
|
[source,python]
|
|
|
|
----------------------------------------
|
|
|
|
# string
|
|
|
|
weechat.prnt("", "Wert der Option weechat.look.item_time_format ist: %s"
|
|
|
|
% (weechat.config_string(weechat.config_get("weechat.look.item_time_format"))))
|
|
|
|
|
|
|
|
# boolean
|
|
|
|
weechat.prnt("", "Wert der Option weechat.look.day_change ist: %d"
|
|
|
|
% (weechat.config_boolean(weechat.config_get("weechat.look.day_change"))))
|
|
|
|
|
|
|
|
# integer
|
|
|
|
weechat.prnt("", "Wert der Option weechat.look.scroll_page_percent ist: %d"
|
|
|
|
% (weechat.config_integer(weechat.config_get("weechat.look.scroll_page_percent"))))
|
|
|
|
|
|
|
|
# color
|
|
|
|
weechat.prnt("", "Wert der Option weechat.color.chat_delimiters ist: %s"
|
|
|
|
% (weechat.config_color(weechat.config_get("weechat.color.chat_delimiters"))))
|
|
|
|
----------------------------------------
|
|
|
|
|
|
|
|
[[irc]]
|
|
|
|
IRC
|
|
|
|
~~~
|
|
|
|
|
|
|
|
[[irc_catch_messages]]
|
|
|
|
Nachrichten abfangen
|
|
|
|
^^^^^^^^^^^^^^^^^^^^
|
|
|
|
|
|
|
|
Die IRC Erweiterung sendet zwei Signale wenn eine Nachricht empfangen wurde.
|
|
|
|
`xxx` ist der interne IRC Servername, `yyy` ist der IRC Befehl der empfangen
|
|
|
|
wurde (JOIN, QUIT, PRIVMSG, 301, ..):
|
|
|
|
|
|
|
|
xxxx,irc_in_yyy::
|
|
|
|
Signal wird gesendet bevor die Nachricht verarbeitet wurde.
|
|
|
|
|
|
|
|
xxx,irc_in2_yyy::
|
|
|
|
Signal wird gesendet nachdem die Nachricht verarbeitet wurde.
|
|
|
|
|
|
|
|
[source,python]
|
|
|
|
----------------------------------------
|
|
|
|
def join_cb(data, signal, signal_data):
|
|
|
|
# Das Signal lautet: "freenode,irc_in2_join"
|
|
|
|
# signal_data enthält die IRC Nachricht, zum Beispiel: ":nick!user@host JOIN :#channel"
|
|
|
|
nick = weechat.info_get("irc_nick_from_host", signal_data)
|
|
|
|
server = signal.split(",")[0]
|
|
|
|
channel = signal_data.split(":")[-1]
|
|
|
|
buffer = weechat.info_get("irc_buffer", "%s,%s" % (server, channel))
|
|
|
|
if buffer:
|
|
|
|
weechat.prnt(buffer, "Holla, %s hat den Channel betreten!" % nick)
|
|
|
|
return weechat.WEECHAT_RC_OK
|
|
|
|
|
|
|
|
# es ist sinnvoll als Server "*" anzugeben um alle JOIN Nachrichten von allen
|
|
|
|
# IRC Servern abzufangen
|
|
|
|
weechat.hook_signal("*,irc_in2_join", "join_cb", "")
|
|
|
|
----------------------------------------
|
|
|
|
|
2010-10-25 13:09:11 +02:00
|
|
|
[[irc_modify_messages]]
|
|
|
|
Modify messages
|
|
|
|
^^^^^^^^^^^^^^^
|
|
|
|
|
2010-11-12 22:05:58 +01:00
|
|
|
Die IRC Erweiterung verschickt einen "modifier" mit Namen "irc_in_xxx" ("xxx" steht für den
|
|
|
|
Namen des IRC Befehls) um eine Nachricht zu empfangen die dann modifiziert werden kann.
|
2010-10-25 13:09:11 +02:00
|
|
|
|
|
|
|
[source,python]
|
|
|
|
----------------------------------------
|
|
|
|
def modifier_cb(data, modifier, modifier_data, string):
|
2010-11-12 22:05:58 +01:00
|
|
|
# füge den Namen des Server zu allen empfangenen Nachrichten hinzu
|
|
|
|
# (Okay dies ist nicht wirklich sinnvoll, aber es ist auch nur ein Beispiel!)
|
2010-10-25 13:09:11 +02:00
|
|
|
return "%s %s" % (string, modifier_data)
|
|
|
|
|
|
|
|
weechat.hook_modifier("irc_in_privmsg", "modifier_cb", "")
|
|
|
|
----------------------------------------
|
|
|
|
|
|
|
|
[WARNING]
|
2010-11-12 22:05:58 +01:00
|
|
|
Eine fehlerhafte Nachricht kann WeeChat zum Absturz bringen oder andere ernsthafte Probleme erzeugen!
|
2010-10-25 13:09:11 +02:00
|
|
|
|
2011-08-26 10:31:37 +02:00
|
|
|
[[irc_message_parse]]
|
2010-11-12 22:05:58 +01:00
|
|
|
Nachrichten parsen
|
|
|
|
^^^^^^^^^^^^^^^^^^
|
2010-10-25 13:09:11 +02:00
|
|
|
|
2012-02-04 11:33:42 +01:00
|
|
|
_Neu seit Version 0.3.4._
|
2010-10-25 13:09:11 +02:00
|
|
|
|
2011-08-26 10:31:37 +02:00
|
|
|
Man kann IRC Nachrichten mittels einer info_hashtable mit dem Namen "irc_message_parse" parsen.
|
2010-10-25 13:09:11 +02:00
|
|
|
|
|
|
|
[source,python]
|
|
|
|
----------------------------------------
|
2011-08-26 10:31:37 +02:00
|
|
|
dict = weechat.info_get_hashtable("irc_message_parse",
|
2010-10-25 13:09:11 +02:00
|
|
|
{ "message": ":nick!user@host PRIVMSG #weechat :message here" })
|
|
|
|
weechat.prnt("", "dict: %s" % dict)
|
|
|
|
|
|
|
|
# output:
|
|
|
|
# dict: {'nick': 'nick', 'host': 'nick!user@host', 'command': 'PRIVMSG', 'arguments': '#weechat :message here', 'channel': '#weechat'}
|
|
|
|
----------------------------------------
|
|
|
|
|
2010-08-05 14:01:00 +02:00
|
|
|
[[infos]]
|
|
|
|
Infos
|
|
|
|
~~~~~
|
|
|
|
|
|
|
|
[[infos_weechat_version]]
|
|
|
|
WeeChat Version
|
|
|
|
^^^^^^^^^^^^^^^
|
|
|
|
|
|
|
|
Die sinnvollste Methode um die Version abzufragen ist die Nutzung
|
|
|
|
von "version_number". Das Ergebnis sollte mit einem hexadezimalen
|
|
|
|
Integer-Wert verglichen werden.
|
|
|
|
|
|
|
|
Beispiele:
|
|
|
|
|
|
|
|
[source,python]
|
|
|
|
----------------------------------------
|
|
|
|
version = weechat.info_get("version_number", "") or 0
|
|
|
|
if int(version) >= 0x00030200:
|
|
|
|
weechat.prnt("", "Es handelt sich um WeeChat 0.3.2 oder neuer")
|
|
|
|
else:
|
|
|
|
weechat.prnt("", "Es handelt sich um WeeChat 0.3.1 oder älter")
|
|
|
|
----------------------------------------
|
|
|
|
|
|
|
|
[NOTE]
|
2011-08-04 16:13:34 +02:00
|
|
|
Versionen ≤ 0.3.1.1 geben einen leeren String zurück wenn man 'info_get("version_number")'
|
2010-08-05 14:01:00 +02:00
|
|
|
aufruft. Deshalb müssen Sie prüfen ob der Rückgabe wert *nicht* leer ist.
|
|
|
|
|
|
|
|
Um die Version als String zu erhalten:
|
|
|
|
|
|
|
|
[source,python]
|
|
|
|
----------------------------------------
|
|
|
|
# Dies gibt z.B. "Version 0.3.2" im Core Buffer aus
|
|
|
|
weechat.prnt("", "Version %s" % weechat.info_get("version", ""))
|
|
|
|
----------------------------------------
|
|
|
|
|
|
|
|
[[infos_other]]
|
|
|
|
andere Informationen
|
|
|
|
^^^^^^^^^^^^^^^^^^^^
|
|
|
|
|
|
|
|
[source,python]
|
|
|
|
----------------------------------------
|
|
|
|
# WeeChat Hauptverzeichnis, zum Beispiel: "/home/xxxx/.weechat"
|
|
|
|
weechat.prnt("", "WeeChat Hauptverzeichnis: %s" % weechat.info_get("weechat_dir", ""))
|
|
|
|
|
|
|
|
# Inaktivität der Tastatur
|
|
|
|
weechat.prnt("", "Tastatur ist seit %s Sekunden nicht mehr betätigt worden" % weechat.info_get("inactivity", ""))
|
|
|
|
----------------------------------------
|
|
|
|
|
|
|
|
[[infolists]]
|
|
|
|
Infolisten
|
|
|
|
~~~~~~~~~~
|
|
|
|
|
|
|
|
[[infolists_read]]
|
|
|
|
Infoliste einlesen
|
|
|
|
^^^^^^^^^^^^^^^^^^
|
|
|
|
|
|
|
|
Es können Infolisten eingelesen werden die entweder von WeeChat oder von
|
|
|
|
Erweiterungen erstellt wurden.
|
|
|
|
|
|
|
|
Beispiele:
|
|
|
|
|
|
|
|
[source,python]
|
|
|
|
----------------------------------------
|
|
|
|
# Infoliste "buffer" einlesen, um eine Liste aller Buffer zu erhalten
|
|
|
|
infolist = weechat.infolist_get("buffer", "", "")
|
|
|
|
if infolist:
|
|
|
|
while weechat.infolist_next(infolist):
|
|
|
|
name = weechat.infolist_string(infolist, "name")
|
|
|
|
weechat.prnt("", "Buffer: %s" % name)
|
|
|
|
weechat.infolist_free(infolist)
|
|
|
|
----------------------------------------
|
|
|
|
|
|
|
|
[IMPORTANT]
|
|
|
|
Vergessen Sie bitte nicht `infolist_free` aufzurufen um den Speicher wieder
|
|
|
|
frei zu geben der durch die Infoliste belegt wurde. WeeChat gibt diesen Speicher
|
|
|
|
nicht von sich aus frei.
|