2013-11-04 21:41:34 +01:00
|
|
|
= WeeChat Scripting Guide
|
2014-01-23 18:38:53 +01:00
|
|
|
:author: Sébastien Helleu
|
|
|
|
:email: flashcode@flashtux.org
|
|
|
|
:lang: de
|
2016-05-03 21:31:55 +02:00
|
|
|
:toc: left
|
2014-01-23 18:38:53 +01:00
|
|
|
:toclevels: 3
|
2016-05-03 21:31:55 +02:00
|
|
|
:toc-title: Inhaltsverzeichnis
|
2016-05-04 23:12:35 +02:00
|
|
|
:sectnums:
|
2016-05-03 21:31:55 +02:00
|
|
|
:docinfo1:
|
2015-01-12 21:53:34 +01:00
|
|
|
|
|
|
|
|
2015-01-23 08:59:38 +01:00
|
|
|
Übersetzer:
|
2015-01-12 21:53:34 +01:00
|
|
|
|
2016-01-06 05:40:08 +01:00
|
|
|
* Nils Görs <weechatter@arcor.de>, 2010-2016
|
2010-08-05 14:01:00 +02:00
|
|
|
|
|
|
|
|
|
|
|
Diese Anleitung beschreibt den WeeChat Chat Client und ist Teil von WeeChat.
|
|
|
|
|
|
|
|
Die aktuelle Version dieser Anleitung finden Sie auf:
|
2014-12-13 09:16:09 +01:00
|
|
|
https://weechat.org/doc
|
2010-08-05 14:01:00 +02:00
|
|
|
|
|
|
|
|
|
|
|
[[introduction]]
|
2013-11-04 21:41:34 +01:00
|
|
|
== Einleitung
|
2010-08-05 14:01:00 +02:00
|
|
|
|
|
|
|
WeeChat (Wee Enhanced Environment for Chat) ist ein freier, schneller und
|
2015-01-23 08:59:38 +01:00
|
|
|
schlanker Chat-Client der für verschiedene Betriebssysteme entwickelt wird.
|
2010-08-05 14:01:00 +02:00
|
|
|
|
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
|
|
|
|
2017-09-03 14:35:00 +02:00
|
|
|
* Python
|
|
|
|
* Perl
|
|
|
|
* Ruby
|
|
|
|
* Lua
|
|
|
|
* Tcl
|
|
|
|
* Guile (Scheme)
|
2017-09-23 16:24:52 +02:00
|
|
|
* JavaScript
|
2017-09-03 14:35:00 +02:00
|
|
|
* PHP
|
2010-08-05 14:01:00 +02:00
|
|
|
|
|
|
|
[NOTE]
|
2015-03-29 22:15:57 +02:00
|
|
|
Fast alle Beispiele in dieser Dokumentation sind für Python erstellt.
|
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]]
|
2013-11-04 21:41:34 +01:00
|
|
|
== Skripten in WeeChat
|
2010-08-05 14:01:00 +02:00
|
|
|
|
2014-01-29 22:37:33 +01:00
|
|
|
[[languages_specificities]]
|
2013-11-04 21:41:34 +01:00
|
|
|
=== Besonderheiten der einzelnen Skriptsprachen
|
2010-08-05 14:01:00 +02:00
|
|
|
|
2013-11-04 21:41:34 +01: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`
|
2016-06-15 08:01:45 +02:00
|
|
|
* Um die WeeChat Funktion `+print*+` nutzen zu können muss `+prnt*+` genutzt
|
2016-05-04 22:19:27 +02:00
|
|
|
werden (_print_ ist ein reservierter Befehl von Python!)
|
2011-10-26 19:25:51 +02:00
|
|
|
* Funktionen werden im Format `weechat.xxx(arg1, arg2, ...)` ausgeführt
|
|
|
|
|
2013-11-04 21:41:34 +01:00
|
|
|
==== Perl
|
2011-10-26 19:25:51 +02:00
|
|
|
|
|
|
|
* Funktionen werden im Format `weechat::xxx(arg1, arg2, ...);` ausgeführt
|
|
|
|
|
2013-11-04 21:41:34 +01:00
|
|
|
==== Ruby
|
2011-10-26 19:25:51 +02:00
|
|
|
|
2016-05-04 22:19:27 +02:00
|
|
|
* Es muss _weechat_init_ definiert und darin die Funktion _register_ ausgeführt werden
|
2011-10-26 19:25:51 +02:00
|
|
|
* Funktionen werden im Format `Weechat.xxx(arg1, arg2, ...)` ausgeführt
|
2013-04-16 20:09:54 +02:00
|
|
|
* Aufgrund einer Limitierung, seitens Ruby (maximal 15 Argumente pro Funktion), empfängt
|
|
|
|
die Funktion `Weechat.config_new_option` den Callback in einem Array von 6 Strings
|
|
|
|
(3 Callbacks + 3 Data Strings), somit sieht ein Aufruf der Funktion folgendermaßen aus:
|
2013-03-22 19:54:44 +01:00
|
|
|
|
|
|
|
[source,ruby]
|
2013-11-04 21:41:34 +01:00
|
|
|
----
|
2013-03-22 19:54:44 +01:00
|
|
|
Weechat.config_new_option(config, section, "name", "string", "description of option", "", 0, 0,
|
|
|
|
"value", "value", 0, ["check_cb", "", "change_cb", "", "delete_cb", ""])
|
2013-11-04 21:41:34 +01:00
|
|
|
----
|
2011-10-26 19:25:51 +02:00
|
|
|
|
2013-11-04 21:41:34 +01:00
|
|
|
==== Lua
|
2011-10-26 19:25:51 +02:00
|
|
|
|
|
|
|
* Funktionen werden im Format `weechat.xxx(arg1, arg2, ...)` ausgeführt
|
|
|
|
|
2013-11-04 21:41:34 +01:00
|
|
|
==== Tcl
|
2011-10-26 19:25:51 +02:00
|
|
|
|
|
|
|
* Funktionen werden im Format `weechat::xxx arg1 arg2 ...` ausgeführt
|
|
|
|
|
2017-09-03 14:35:00 +02:00
|
|
|
==== Guile (Scheme)
|
2011-10-26 19:25:51 +02:00
|
|
|
|
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
|
|
|
|
2017-09-23 16:24:52 +02:00
|
|
|
==== JavaScript
|
2015-03-07 15:16:37 +01:00
|
|
|
|
|
|
|
* Funktionen werden im Format `weechat.xxx(arg1, arg2, ...);` ausgeführt
|
|
|
|
|
2017-09-03 14:35:00 +02:00
|
|
|
==== PHP
|
|
|
|
|
|
|
|
* Funktionen werden im Format `weechat_xxx(arg1, arg2, ...);` ausgeführt
|
|
|
|
|
2010-08-05 14:01:00 +02:00
|
|
|
[[register_function]]
|
2013-11-04 21:41:34 +01:00
|
|
|
=== Die "Register" Funktion
|
2010-08-05 14:01:00 +02:00
|
|
|
|
2015-03-29 22:15:57 +02:00
|
|
|
Ein WeeChat-Skript muss sich bei WeeChat "registrieren". Dazu muss das Skript
|
|
|
|
zuerst die "register" Funktion ausführen.
|
2010-08-05 14:01:00 +02:00
|
|
|
|
2010-08-05 17:25:31 +02:00
|
|
|
Prototyp:
|
2010-08-05 14:01:00 +02:00
|
|
|
|
|
|
|
[source,python]
|
2013-11-04 21:41:34 +01:00
|
|
|
----
|
2010-08-05 14:01:00 +02:00
|
|
|
weechat.register(Name, Author, Version, Lizenz, Beschreibung, Shutdown_Funktion, Zeichensatz)
|
2013-11-04 21:41:34 +01:00
|
|
|
----
|
2010-08-05 14:01:00 +02:00
|
|
|
|
|
|
|
Argumente:
|
|
|
|
|
2016-05-04 22:19:27 +02:00
|
|
|
* _name_: interner Name des Skripts (String)
|
|
|
|
* _author_: Name des Authors (String)
|
|
|
|
* _version_: Version des Skripts (String)
|
|
|
|
* _license_: Lizenz für das Skripts (String)
|
|
|
|
* _description_: kurze Beschreibung des Skripts (String)
|
|
|
|
* _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)
|
2016-05-04 22:19:27 +02:00
|
|
|
* _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:
|
|
|
|
|
2015-03-09 21:12:02 +01:00
|
|
|
* Python:
|
2010-08-05 14:01:00 +02:00
|
|
|
|
|
|
|
[source,python]
|
2013-11-04 21:41:34 +01:00
|
|
|
----
|
2010-08-05 14:01:00 +02:00
|
|
|
import weechat
|
|
|
|
|
|
|
|
weechat.register("test_python", "FlashCode", "1.0", "GPL3", "Test Skript", "", "")
|
|
|
|
weechat.prnt("", "Hallo, von einem python Skript!")
|
2013-11-04 21:41:34 +01:00
|
|
|
----
|
2010-08-05 14:01:00 +02:00
|
|
|
|
2015-03-09 21:12:02 +01:00
|
|
|
* Perl:
|
2011-10-26 19:25:51 +02:00
|
|
|
|
|
|
|
[source,perl]
|
2013-11-04 21:41:34 +01:00
|
|
|
----
|
2011-10-26 19:25:51 +02:00
|
|
|
weechat::register("test_perl", "FlashCode", "1.0", "GPL3", "Test Skript", "", "");
|
|
|
|
weechat::print("", "Hallo, von einem perl Skript!");
|
2013-11-04 21:41:34 +01:00
|
|
|
----
|
2011-10-26 19:25:51 +02:00
|
|
|
|
2015-03-09 21:12:02 +01:00
|
|
|
* Ruby:
|
2010-08-05 14:01:00 +02:00
|
|
|
|
|
|
|
[source,ruby]
|
2013-11-04 21:41:34 +01:00
|
|
|
----
|
2010-08-05 14:01:00 +02:00
|
|
|
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
|
2013-11-04 21:41:34 +01:00
|
|
|
----
|
2010-08-05 14:01:00 +02:00
|
|
|
|
2015-03-09 21:12:02 +01:00
|
|
|
* Lua:
|
2010-08-05 14:01:00 +02:00
|
|
|
|
|
|
|
[source,lua]
|
2013-11-04 21:41:34 +01:00
|
|
|
----
|
2010-08-05 14:01:00 +02:00
|
|
|
weechat.register("test_lua", "FlashCode", "1.0", "GPL3", "Test Skript", "", "")
|
|
|
|
weechat.print("", "Hallo, von einem lua Skript!")
|
2013-11-04 21:41:34 +01:00
|
|
|
----
|
2010-08-05 14:01:00 +02:00
|
|
|
|
2015-03-09 21:12:02 +01:00
|
|
|
* Tcl:
|
2010-08-05 14:01:00 +02:00
|
|
|
|
2011-10-26 19:25:51 +02:00
|
|
|
[source,tcl]
|
2013-11-04 21:41:34 +01:00
|
|
|
----
|
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!"
|
2013-11-04 21:41:34 +01:00
|
|
|
----
|
2010-08-05 14:01:00 +02:00
|
|
|
|
2017-09-03 14:35:00 +02:00
|
|
|
* Guile (Scheme):
|
2011-10-26 19:25:51 +02:00
|
|
|
|
|
|
|
[source,lisp]
|
2013-11-04 21:41:34 +01:00
|
|
|
----
|
2011-10-26 19:25:51 +02:00
|
|
|
(weechat:register "test_scheme" "FlashCode" "1.0" "GPL3" "Test script" "" "")
|
2015-03-07 15:16:37 +01:00
|
|
|
(weechat:print "" "Hallo, von einem scheme Skript!")
|
|
|
|
----
|
|
|
|
|
2017-09-23 16:24:52 +02:00
|
|
|
* JavaScript:
|
2015-03-07 15:16:37 +01:00
|
|
|
|
|
|
|
[source,javascript]
|
|
|
|
----
|
|
|
|
weechat.register("test_js", "FlashCode", "1.0", "GPL3", "Test Skript", "", "");
|
|
|
|
weechat.print("", "Hallo, von einem javascript Skript!");
|
2013-11-04 21:41:34 +01:00
|
|
|
----
|
2011-10-26 19:25:51 +02:00
|
|
|
|
2017-09-03 14:35:00 +02:00
|
|
|
* PHP:
|
|
|
|
|
|
|
|
[source,php]
|
|
|
|
----
|
2017-09-09 15:20:38 +02:00
|
|
|
weechat_register('test_php', 'FlashCode', '1.0', 'GPL3', 'Test Skript', '', '');
|
|
|
|
weechat_print('', 'Hallo, von einem PHP Skript!');
|
2017-09-03 14:35:00 +02:00
|
|
|
----
|
|
|
|
|
2010-08-05 14:01:00 +02:00
|
|
|
[[load_script]]
|
2013-11-04 21:41:34 +01:00
|
|
|
=== Laden von Skripten
|
2010-08-05 14:01:00 +02:00
|
|
|
|
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
|
|
|
|
2013-11-04 21:41:34 +01:00
|
|
|
----
|
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
|
2015-03-07 15:16:37 +01:00
|
|
|
/script load script.js
|
2017-09-03 14:35:00 +02:00
|
|
|
/script load script.php
|
2013-11-04 21:41:34 +01:00
|
|
|
----
|
2013-01-26 07:48:20 +01:00
|
|
|
|
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
|
|
|
|
2013-11-04 21:41:34 +01:00
|
|
|
----
|
2015-03-07 15:16:37 +01:00
|
|
|
/python load script.py
|
|
|
|
/perl load script.pl
|
|
|
|
/ruby load script.rb
|
|
|
|
/lua load script.lua
|
|
|
|
/tcl load script.tcl
|
|
|
|
/guile load script.scm
|
|
|
|
/javascript load script.js
|
2017-09-03 14:35:00 +02:00
|
|
|
/php load script.php
|
2013-11-04 21:41:34 +01:00
|
|
|
----
|
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
|
2016-05-04 22:19:27 +02:00
|
|
|
anlegen, der in das Verzeichnis _Skriptsprache/autoload_ zeigt.
|
2010-08-05 14:01:00 +02:00
|
|
|
|
|
|
|
Ein Beispiel für ein Python-Skript:
|
|
|
|
|
2013-11-04 21:41:34 +01:00
|
|
|
----
|
2010-08-05 14:01:00 +02:00
|
|
|
$ cd ~/.weechat/python/autoload
|
|
|
|
$ ln -s ../script.py
|
2013-11-04 21:41:34 +01:00
|
|
|
----
|
2010-08-05 14:01:00 +02:00
|
|
|
|
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
|
2016-05-04 22:19:27 +02:00
|
|
|
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]]
|
2013-11-04 21:41:34 +01:00
|
|
|
== Unterschiede zur C API
|
2010-08-05 14:01:00 +02:00
|
|
|
|
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
|
2017-08-21 23:35:04 +02:00
|
|
|
die link:weechat_plugin_api.en.html[WeeChat Plugin API Reference] (Englisch).
|
2016-05-04 22:19:27 +02:00
|
|
|
Es ist wichtig das 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
|
2010-08-05 14:01:00 +02:00
|
|
|
wird.
|
2016-05-04 22:19:27 +02:00
|
|
|
Falls Ihr Skript _test.py_ eine WeeChat API Funktion aufruft wird der Aufruf
|
2010-08-05 14:01:00 +02:00
|
|
|
wie folgt abgearbeitet:
|
|
|
|
|
2013-11-04 21:41:34 +01:00
|
|
|
....
|
2013-01-26 11:42:02 +01:00
|
|
|
┌──────────────────────┐ ╔══════════════════╗
|
|
|
|
│ python Erweiterung │ ║ WeeChat "core" ║
|
|
|
|
├────────────┬─────────┤ ╟─────────┐ ║
|
|
|
|
test.py ─────► │ Skript API │ C API │ ─────► ║ C API │ ║
|
|
|
|
└────────────┴─────────┘ ╚═════════╧════════╝
|
2013-11-04 21:41:34 +01:00
|
|
|
....
|
2010-08-05 14:01:00 +02:00
|
|
|
|
2016-05-04 22:19:27 +02:00
|
|
|
Gibt WeeChat einen Rückgabewert an Ihr Skript _test.py_ zurück, dann wird der
|
2010-08-05 14:01:00 +02:00
|
|
|
Aufruf in umgekehrter Reihenfolge abgearbeitet:
|
|
|
|
|
2013-11-04 21:41:34 +01:00
|
|
|
....
|
2013-01-26 11:42:02 +01:00
|
|
|
╔══════════════════╗ ┌──────────────────────┐
|
|
|
|
║ WeeChat "core" ║ │ python Erweiterung │
|
|
|
|
║ ┌─────────╢ ├─────────┬────────────┤
|
|
|
|
║ │ C API ║ ─────► │ C API │ Skript API │ ─────► test.py
|
|
|
|
╚════════╧═════════╝ └─────────┴────────────┘
|
2013-11-04 21:41:34 +01:00
|
|
|
....
|
2010-08-05 14:01:00 +02:00
|
|
|
|
|
|
|
[[pointers]]
|
2013-11-04 21:41:34 +01:00
|
|
|
=== Pointer
|
2010-08-05 14:01:00 +02:00
|
|
|
|
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]
|
2013-11-04 21:41:34 +01:00
|
|
|
----
|
2010-08-05 14:01:00 +02:00
|
|
|
weechat.prnt("", "Hi!")
|
2013-11-04 21:41:34 +01:00
|
|
|
----
|
2010-08-05 14:01:00 +02:00
|
|
|
|
|
|
|
[WARNING]
|
2015-03-29 22:15:57 +02:00
|
|
|
In vielen Funktionen wird aus Gründen der Geschwindigkeit 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]]
|
2013-11-04 21:41:34 +01:00
|
|
|
=== Callbacks
|
2010-08-05 14:01:00 +02:00
|
|
|
|
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
|
|
|
|
2015-03-09 21:12:02 +01:00
|
|
|
* Python:
|
2010-08-05 14:01:00 +02:00
|
|
|
|
|
|
|
[source,python]
|
2013-11-04 21:41:34 +01:00
|
|
|
----
|
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")
|
2013-11-04 21:41:34 +01:00
|
|
|
----
|
2013-01-26 08:22:04 +01:00
|
|
|
|
2015-03-09 21:12:02 +01:00
|
|
|
* Perl:
|
2013-01-26 08:22:04 +01:00
|
|
|
|
|
|
|
[source,perl]
|
2013-11-04 21:41:34 +01:00
|
|
|
----
|
2013-01-26 08:22:04 +01:00
|
|
|
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");
|
2013-11-04 21:41:34 +01:00
|
|
|
----
|
2013-01-26 08:22:04 +01:00
|
|
|
|
2015-03-09 21:12:02 +01:00
|
|
|
* Ruby:
|
2013-01-26 08:22:04 +01:00
|
|
|
|
|
|
|
[source,ruby]
|
2013-11-04 21:41:34 +01:00
|
|
|
----
|
2013-01-26 08:22:04 +01:00
|
|
|
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");
|
2013-11-04 21:41:34 +01:00
|
|
|
----
|
2013-01-26 08:22:04 +01:00
|
|
|
|
2015-03-09 21:12:02 +01:00
|
|
|
* Lua:
|
2010-08-05 14:01:00 +02:00
|
|
|
|
2013-01-26 08:22:04 +01:00
|
|
|
[source,lua]
|
2013-11-04 21:41:34 +01:00
|
|
|
----
|
2013-01-26 08:22:04 +01:00
|
|
|
function timer_cb(data, remaining_calls)
|
|
|
|
weechat.print("", "timer! data="..data)
|
2013-03-24 19:56:43 +01:00
|
|
|
return weechat.WEECHAT_RC_OK
|
2013-01-26 08:22:04 +01:00
|
|
|
end
|
|
|
|
|
|
|
|
weechat.hook_timer(1000, 0, 1, "timer_cb", "test")
|
2013-11-04 21:41:34 +01:00
|
|
|
----
|
2013-01-26 08:22:04 +01:00
|
|
|
|
2015-03-09 21:12:02 +01:00
|
|
|
* Tcl:
|
2013-01-26 08:22:04 +01:00
|
|
|
|
|
|
|
[source,tcl]
|
2013-11-04 21:41:34 +01:00
|
|
|
----
|
2013-01-26 08:22:04 +01:00
|
|
|
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
|
2013-11-04 21:41:34 +01:00
|
|
|
----
|
2013-01-26 08:22:04 +01:00
|
|
|
|
2017-09-03 14:35:00 +02:00
|
|
|
* Guile (Scheme):
|
2013-01-26 08:22:04 +01:00
|
|
|
|
|
|
|
[source,lisp]
|
2013-11-04 21:41:34 +01:00
|
|
|
----
|
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")
|
2013-11-04 21:41:34 +01:00
|
|
|
----
|
2010-08-05 14:01:00 +02:00
|
|
|
|
2017-09-23 16:24:52 +02:00
|
|
|
* JavaScript:
|
2015-03-07 15:16:37 +01:00
|
|
|
|
|
|
|
[source,javascript]
|
|
|
|
----
|
|
|
|
function timer_cb(data, remaining_calls) {
|
|
|
|
weechat.print("", "timer! data=" + data);
|
|
|
|
return weechat.WEECHAT_RC_OK;
|
|
|
|
}
|
|
|
|
|
|
|
|
weechat.hook_timer(1000, 0, 1, "timer_cb", "test");
|
|
|
|
----
|
|
|
|
|
2017-09-03 14:35:00 +02:00
|
|
|
* PHP:
|
|
|
|
|
|
|
|
[source,php]
|
|
|
|
----
|
2017-09-09 15:20:38 +02:00
|
|
|
$timer_cb = function ($data, $remaining_calls) {
|
|
|
|
weechat_print('', 'timer! data=' . $data);
|
2017-09-03 14:35:00 +02:00
|
|
|
return WEECHAT_RC_OK;
|
2017-09-09 15:20:38 +02:00
|
|
|
};
|
|
|
|
|
|
|
|
weechat_hook_timer(1000, 0, 1, $timer_cb, 'test');
|
2017-09-03 14:35:00 +02:00
|
|
|
----
|
|
|
|
|
2010-08-05 14:01:00 +02:00
|
|
|
[[script_api]]
|
2013-11-04 21:41:34 +01:00
|
|
|
== Skript API
|
2010-08-05 14:01:00 +02:00
|
|
|
|
|
|
|
Um weiterführende Informationen zu den API Funktionen zu erhalten
|
2017-08-21 23:35:04 +02:00
|
|
|
lesen Sie bitte link:weechat_plugin_api.en.html[WeeChat Plugin API Reference] (Englisch).
|
2010-08-05 14:01:00 +02:00
|
|
|
|
|
|
|
[[script_api_functions]]
|
2013-11-04 21:41:34 +01:00
|
|
|
=== Funktionen
|
2010-08-05 14:01:00 +02:00
|
|
|
|
|
|
|
Liste der Skript API Funktionen:
|
|
|
|
|
2016-05-05 10:01:02 +02:00
|
|
|
[width="75%",cols="1,3",options="header"]
|
2013-11-04 21:41:34 +01:00
|
|
|
|===
|
2016-05-05 10:01:02 +02:00
|
|
|
| Kategorie | Funktionen
|
|
|
|
|
|
|
|
| Allgemein |
|
2010-08-05 14:01:00 +02:00
|
|
|
register
|
2016-05-05 10:01:02 +02:00
|
|
|
|
|
|
|
| Erweiterungen |
|
2010-08-05 14:01:00 +02:00
|
|
|
plugin_get_name
|
2016-05-05 10:01:02 +02:00
|
|
|
|
|
|
|
| Strings |
|
|
|
|
charset_set +
|
|
|
|
iconv_to_internal +
|
|
|
|
iconv_from_internal +
|
|
|
|
gettext +
|
|
|
|
ngettext +
|
|
|
|
strlen_screen +
|
|
|
|
string_match +
|
|
|
|
string_has_highlight +
|
|
|
|
string_has_highlight_regex +
|
|
|
|
string_mask_to_regex +
|
2018-04-07 13:20:58 +02:00
|
|
|
string_format_size +
|
2016-05-05 10:01:02 +02:00
|
|
|
string_remove_color +
|
|
|
|
string_is_command_char +
|
|
|
|
string_input_for_buffer +
|
|
|
|
string_eval_expression +
|
|
|
|
string_eval_path_home
|
|
|
|
|
|
|
|
| Verzeichnisse |
|
|
|
|
mkdir_home +
|
|
|
|
mkdir +
|
|
|
|
mkdir_parents
|
|
|
|
|
|
|
|
| sortierte Listen |
|
|
|
|
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 |
|
2016-05-05 10:01:02 +02:00
|
|
|
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 +
|
|
|
|
config_set_desc_plugin +
|
|
|
|
config_unset_plugin
|
|
|
|
|
|
|
|
| Tastenbelegung |
|
|
|
|
key_bind +
|
|
|
|
key_unbind
|
|
|
|
|
|
|
|
| Ausgabe |
|
|
|
|
prefix +
|
|
|
|
color +
|
|
|
|
print (für Python: prnt) +
|
2017-06-11 08:20:12 +02:00
|
|
|
print_date_tags (für Python: prnt_date_tags) +
|
2016-05-05 10:01:02 +02:00
|
|
|
print_y (für Python: prnt_y) +
|
|
|
|
log_print
|
|
|
|
|
|
|
|
| Hooks |
|
|
|
|
hook_command +
|
|
|
|
hook_command_run +
|
|
|
|
hook_timer +
|
|
|
|
hook_fd +
|
|
|
|
hook_process +
|
|
|
|
hook_process_hashtable +
|
|
|
|
hook_connect +
|
2018-08-12 21:45:00 +02:00
|
|
|
hook_line +
|
2016-05-05 10:01:02 +02:00
|
|
|
hook_print +
|
|
|
|
hook_signal +
|
|
|
|
hook_signal_send +
|
|
|
|
hook_hsignal +
|
|
|
|
hook_hsignal_send +
|
|
|
|
hook_config +
|
|
|
|
hook_completion +
|
2017-06-11 08:20:12 +02:00
|
|
|
hook_completion_get_string +
|
2016-05-05 10:01:02 +02:00
|
|
|
hook_completion_list_add +
|
|
|
|
hook_modifier +
|
|
|
|
hook_modifier_exec +
|
|
|
|
hook_info +
|
|
|
|
hook_info_hashtable +
|
|
|
|
hook_infolist +
|
|
|
|
hook_focus +
|
|
|
|
hook_set +
|
|
|
|
unhook +
|
2014-01-11 09:39:12 +01:00
|
|
|
unhook_all
|
2016-05-05 10:01:02 +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 +
|
|
|
|
buffer_string_replace_local_var +
|
|
|
|
buffer_match_list
|
|
|
|
|
|
|
|
| Fenster |
|
|
|
|
current_window +
|
|
|
|
window_search_with_buffer +
|
|
|
|
window_get_integer +
|
|
|
|
window_get_string +
|
|
|
|
window_get_pointer +
|
|
|
|
window_set_title
|
|
|
|
|
|
|
|
| Nickliste |
|
|
|
|
nicklist_add_group +
|
|
|
|
nicklist_search_group +
|
|
|
|
nicklist_add_nick +
|
|
|
|
nicklist_search_nick +
|
|
|
|
nicklist_remove_group +
|
|
|
|
nicklist_remove_nick +
|
|
|
|
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
|
|
|
|
|
|
|
|
| Bars |
|
|
|
|
bar_item_search +
|
|
|
|
bar_item_new +
|
|
|
|
bar_item_update +
|
|
|
|
bar_item_remove +
|
|
|
|
bar_search +
|
|
|
|
bar_new +
|
|
|
|
bar_set +
|
|
|
|
bar_update +
|
|
|
|
bar_remove
|
|
|
|
|
|
|
|
| Befehle |
|
2010-08-05 14:01:00 +02:00
|
|
|
command
|
2016-05-05 10:01:02 +02:00
|
|
|
|
|
|
|
| Informationen |
|
|
|
|
info_get +
|
|
|
|
info_get_hashtable
|
|
|
|
|
|
|
|
| Infolisten |
|
|
|
|
infolist_new +
|
|
|
|
infolist_new_item +
|
|
|
|
infolist_new_var_integer +
|
|
|
|
infolist_new_var_string +
|
|
|
|
infolist_new_var_pointer +
|
|
|
|
infolist_new_var_time +
|
|
|
|
infolist_get +
|
|
|
|
infolist_next +
|
|
|
|
infolist_prev +
|
|
|
|
infolist_reset_item_cursor +
|
2017-06-11 08:20:12 +02:00
|
|
|
infolist_search_var +
|
2016-05-05 10:01:02 +02:00
|
|
|
infolist_fields +
|
|
|
|
infolist_integer +
|
|
|
|
infolist_string +
|
|
|
|
infolist_pointer +
|
|
|
|
infolist_time +
|
|
|
|
infolist_free
|
|
|
|
|
|
|
|
| hdata |
|
|
|
|
hdata_get +
|
|
|
|
hdata_get_var_offset +
|
|
|
|
hdata_get_var_type_string +
|
|
|
|
hdata_get_var_array_size +
|
|
|
|
hdata_get_var_array_size_string +
|
|
|
|
hdata_get_var_hdata +
|
|
|
|
hdata_get_list +
|
|
|
|
hdata_check_pointer +
|
|
|
|
hdata_move +
|
|
|
|
hdata_search +
|
|
|
|
hdata_char +
|
|
|
|
hdata_integer +
|
|
|
|
hdata_long +
|
|
|
|
hdata_string +
|
|
|
|
hdata_pointer +
|
|
|
|
hdata_time +
|
|
|
|
hdata_hashtable +
|
2017-06-11 08:20:12 +02:00
|
|
|
hdata_compare +
|
2016-05-05 10:01:02 +02:00
|
|
|
hdata_update +
|
|
|
|
hdata_get_string
|
|
|
|
|
|
|
|
| Upgrade |
|
|
|
|
upgrade_new +
|
|
|
|
upgrade_write_object +
|
|
|
|
upgrade_read +
|
|
|
|
upgrade_close
|
2013-11-04 21:41:34 +01:00
|
|
|
|===
|
2010-08-05 14:01:00 +02:00
|
|
|
|
|
|
|
[[script_api_constants]]
|
2013-11-04 21:41:34 +01:00
|
|
|
=== Konstanten
|
2010-08-05 14:01:00 +02:00
|
|
|
|
|
|
|
Liste der Konstanten in Skript API:
|
|
|
|
|
2016-05-05 10:01:02 +02:00
|
|
|
[width="75%",cols="1,3",options="header"]
|
2013-11-04 21:41:34 +01:00
|
|
|
|===
|
2016-05-05 10:01:02 +02:00
|
|
|
| Kategorie | Konstanten
|
|
|
|
|
|
|
|
| return codes |
|
|
|
|
WEECHAT_RC_OK +
|
|
|
|
WEECHAT_RC_OK_EAT +
|
|
|
|
WEECHAT_RC_ERROR
|
|
|
|
|
2010-08-05 14:01:00 +02:00
|
|
|
| Konfigurationsdatei |
|
2016-05-05 10:01:02 +02:00
|
|
|
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 +
|
2010-08-05 14:01:00 +02:00
|
|
|
WEECHAT_HOTLIST_HIGHLIGHT
|
2016-05-05 10:01:02 +02:00
|
|
|
|
|
|
|
| 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 +
|
|
|
|
WEECHAT_HOOK_CONNECT_MEMORY_ERROR +
|
|
|
|
WEECHAT_HOOK_CONNECT_TIMEOUT +
|
2012-10-14 10:59:00 +02:00
|
|
|
WEECHAT_HOOK_CONNECT_SOCKET_ERROR
|
2016-05-05 10:01:02 +02:00
|
|
|
|
|
|
|
| hook Signal |
|
|
|
|
WEECHAT_HOOK_SIGNAL_STRING +
|
|
|
|
WEECHAT_HOOK_SIGNAL_INT +
|
|
|
|
WEECHAT_HOOK_SIGNAL_POINTER
|
2013-11-04 21:41:34 +01:00
|
|
|
|===
|
2010-08-05 14:01:00 +02:00
|
|
|
|
|
|
|
[[common_tasks]]
|
2013-11-04 21:41:34 +01:00
|
|
|
== Gemeinschaftsaufgabe
|
2010-08-05 14:01:00 +02:00
|
|
|
|
|
|
|
Dieses Kapitel beinhaltet einige Aufgaben mit Lösungsbeispielen.
|
|
|
|
Die Skript API wird dabei nur sehr oberflächlich besprochen.Um eine vollständige
|
2017-08-21 23:35:04 +02:00
|
|
|
Übersicht aller Befehle zu erhalten nutzen Sie bitte die
|
|
|
|
link:weechat_plugin_api.en.html[WeeChat Plugin API Reference] (Englisch).
|
2010-08-05 14:01:00 +02:00
|
|
|
|
|
|
|
[[buffers]]
|
2013-11-04 21:41:34 +01:00
|
|
|
=== Buffer
|
2010-08-05 14:01:00 +02:00
|
|
|
|
|
|
|
[[buffers_display_messages]]
|
2013-11-04 21:41:34 +01:00
|
|
|
==== Nachrichten anzeigen
|
2010-08-05 14:01:00 +02:00
|
|
|
|
|
|
|
Eine leere Zeichenkette wird häufig verwendet um den WeeChat Core Buffer zu nutzen.
|
2015-03-29 22:15:57 +02:00
|
|
|
Möchten Sie einen anderen Buffer nutzen dann muss der Pointer des entsprechenden Buffers
|
|
|
|
verwendet werden (Übergabe als String, siehe <<pointers,Pointer>>).
|
2010-08-05 14:01:00 +02:00
|
|
|
|
|
|
|
Beispiele:
|
|
|
|
|
|
|
|
[source,python]
|
2013-11-04 21:41:34 +01:00
|
|
|
----
|
2010-08-05 14:01:00 +02:00
|
|
|
# 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")
|
2013-11-04 21:41:34 +01:00
|
|
|
----
|
2010-08-05 14:01:00 +02:00
|
|
|
|
|
|
|
[NOTE]
|
2017-10-14 18:46:43 +02:00
|
|
|
Die Print-Funktion lautet unter Python `prnt` und `print` in den anderen Sprachen.
|
2010-08-05 14:01:00 +02:00
|
|
|
|
|
|
|
[[buffers_send_text]]
|
2013-11-04 21:41:34 +01:00
|
|
|
==== Text in einen Buffer senden
|
2010-08-05 14:01:00 +02:00
|
|
|
|
2013-08-12 09:04:00 +02:00
|
|
|
Sie können einen Text oder einen Befehl in einen Buffer senden. Dies entspricht exakt dem
|
|
|
|
Verhalten als ob Sie einen Text oder einen Befehl in die Befehlszeile eingeben und selbigen
|
|
|
|
mit der [Eingabe] Taste bestätigen.
|
2010-08-05 14:01:00 +02:00
|
|
|
|
|
|
|
Beispiele:
|
|
|
|
|
|
|
|
[source,python]
|
2013-11-04 21:41:34 +01:00
|
|
|
----
|
2013-08-12 09:04:00 +02:00
|
|
|
# führt den Befehl "/help" im aktuellen Buffer aus (die Ausgabe erfolgt im Core-Buffer)
|
2010-08-05 14:01:00 +02:00
|
|
|
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")
|
2013-11-04 21:41:34 +01:00
|
|
|
----
|
2010-08-05 14:01:00 +02:00
|
|
|
|
|
|
|
[[buffers_new]]
|
2013-11-04 21:41:34 +01:00
|
|
|
==== neuen Buffer öffnen
|
2010-08-05 14:01:00 +02:00
|
|
|
|
|
|
|
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]
|
2013-11-04 21:41:34 +01:00
|
|
|
----
|
2010-08-05 14:01:00 +02:00
|
|
|
# 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")
|
2013-11-04 21:41:34 +01:00
|
|
|
----
|
2010-08-05 14:01:00 +02:00
|
|
|
|
|
|
|
[[buffers_properties]]
|
2013-11-04 21:41:34 +01:00
|
|
|
==== Eigenschaften von Buffern
|
2010-08-05 14:01:00 +02:00
|
|
|
|
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]
|
2013-11-04 21:41:34 +01:00
|
|
|
----
|
2010-08-05 14:01:00 +02:00
|
|
|
buffer = weechat.current_buffer()
|
|
|
|
|
2014-07-05 16:45:48 +02:00
|
|
|
nummer = weechat.buffer_get_integer(buffer, "number")
|
|
|
|
name = weechat.buffer_get_string(buffer, "name")
|
|
|
|
kurz_name = weechat.buffer_get_string(buffer, "short_name")
|
2013-11-04 21:41:34 +01:00
|
|
|
----
|
2010-08-05 14:01:00 +02:00
|
|
|
|
|
|
|
Es ist möglich lokale Variablen eines Buffers hinzuzufügen, zu
|
|
|
|
lesen oder zu löschen:
|
|
|
|
|
|
|
|
[source,python]
|
2013-11-04 21:41:34 +01:00
|
|
|
----
|
2010-08-05 14:01:00 +02:00
|
|
|
# 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", "")
|
2013-11-04 21:41:34 +01:00
|
|
|
----
|
2010-08-05 14:01:00 +02:00
|
|
|
|
|
|
|
Um zu sehen welche lokalen Variablen für einen Buffer gesetzt sind führen Sie
|
|
|
|
bitte in WeeChat folgenden Befehl aus:
|
|
|
|
|
2013-11-04 21:41:34 +01:00
|
|
|
----
|
2010-08-05 14:01:00 +02:00
|
|
|
/buffer localvar
|
2013-11-04 21:41:34 +01:00
|
|
|
----
|
2010-08-05 14:01:00 +02:00
|
|
|
|
|
|
|
[[hooks]]
|
2013-11-04 21:41:34 +01:00
|
|
|
=== Hooks
|
2010-08-05 14:01:00 +02:00
|
|
|
|
|
|
|
[[hook_command]]
|
2013-11-04 21:41:34 +01:00
|
|
|
==== neuen Befehl hinzufügen
|
2010-08-05 14:01:00 +02:00
|
|
|
|
|
|
|
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]
|
2013-11-04 21:41:34 +01:00
|
|
|
----
|
2010-08-05 14:01:00 +02:00
|
|
|
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", "")
|
2013-11-04 21:41:34 +01:00
|
|
|
----
|
2010-08-05 14:01:00 +02:00
|
|
|
|
|
|
|
Der Befehl wird dann in WeeChat wie folgt genutzt:
|
|
|
|
|
2013-11-04 21:41:34 +01:00
|
|
|
----
|
2010-08-05 14:01:00 +02:00
|
|
|
/help meinfilter
|
|
|
|
|
|
|
|
/meinfilter Argumente...
|
2013-11-04 21:41:34 +01:00
|
|
|
----
|
2010-08-05 14:01:00 +02:00
|
|
|
|
|
|
|
[[hook_timer]]
|
2013-11-04 21:41:34 +01:00
|
|
|
==== Nutzung des Timers
|
2010-08-05 14:01:00 +02:00
|
|
|
|
|
|
|
Mittels `hook_timer` wird eine Zeitfunktion implementiert.
|
|
|
|
|
|
|
|
Beispiele:
|
|
|
|
|
|
|
|
[source,python]
|
2013-11-04 21:41:34 +01:00
|
|
|
----
|
2010-08-05 14:01:00 +02:00
|
|
|
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", "")
|
2013-11-04 21:41:34 +01:00
|
|
|
----
|
2010-08-05 14:01:00 +02:00
|
|
|
|
|
|
|
[[hook_process]]
|
2013-11-04 21:41:34 +01:00
|
|
|
==== Hintergrundprozesse
|
2010-08-05 14:01:00 +02:00
|
|
|
|
|
|
|
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.
|
|
|
|
|
2016-05-04 22:19:27 +02:00
|
|
|
Für den letzten Aufruf des Callback wird _rc_ auf 0 oder einen positiven Wert
|
2010-08-05 14:01:00 +02:00
|
|
|
gesetzt. Dies ist der Return Code des Befehls.
|
|
|
|
|
|
|
|
Beispiele:
|
|
|
|
|
2012-01-19 13:56:48 +01:00
|
|
|
[source,python]
|
2013-11-04 21:41:34 +01:00
|
|
|
----
|
2012-01-19 13:56:48 +01:00
|
|
|
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", "")
|
2013-11-04 21:41:34 +01:00
|
|
|
----
|
2012-01-19 13:56:48 +01:00
|
|
|
|
|
|
|
[[url_transfer]]
|
2013-11-04 21:41:34 +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
|
|
|
|
2010-08-05 14:01:00 +02:00
|
|
|
[source,python]
|
2013-11-04 21:41:34 +01:00
|
|
|
----
|
2013-04-16 20:09:54 +02:00
|
|
|
# Zeigt die aktuelle stabile Version von WeeChat an.
|
2013-03-16 16:06:16 +01:00
|
|
|
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-04-16 20:09:54 +02:00
|
|
|
weechat.prnt("", "aktuelle stabile WeeChat-Version: %s" % weechat_version)
|
2010-08-05 14:01:00 +02:00
|
|
|
return weechat.WEECHAT_RC_OK
|
|
|
|
|
2014-12-13 09:16:09 +01:00
|
|
|
weechat.hook_process("url:https://weechat.org/dev/info/stable/",
|
2013-03-16 16:06:16 +01:00
|
|
|
30 * 1000, "weechat_process_cb", "")
|
2013-11-04 21:41:34 +01:00
|
|
|
----
|
2012-01-19 13:56:48 +01:00
|
|
|
|
2013-03-16 16:06:16 +01:00
|
|
|
[TIP]
|
2014-12-13 09:16:09 +01:00
|
|
|
Alle Informationen die WeeChat betreffen findet man auf: https://weechat.org/dev/info
|
2013-03-16 16:06:16 +01:00
|
|
|
|
2012-02-04 11:33:42 +01:00
|
|
|
Beispiel eines URL Transfers, mit zusätzliche Optionen: Es wird das neuste
|
2016-05-04 22:19:27 +02:00
|
|
|
WeeChat Entwicklerpaket in die Datei _/tmp/weechat-devel.tar.gz_ gesichert:
|
2012-01-19 13:56:48 +01:00
|
|
|
|
|
|
|
[source,python]
|
2013-11-04 21:41:34 +01:00
|
|
|
----
|
2012-01-19 13:56:48 +01:00
|
|
|
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
|
|
|
|
|
2014-12-13 09:16:09 +01:00
|
|
|
weechat.hook_process_hashtable("url:https://weechat.org/files/src/weechat-devel.tar.gz",
|
2014-07-05 16:45:48 +02:00
|
|
|
{"file_out": "/tmp/weechat-devel.tar.gz"},
|
2012-01-19 13:56:48 +01:00
|
|
|
30 * 1000, "my_process_cb", "")
|
2013-11-04 21:41:34 +01:00
|
|
|
----
|
2010-08-05 14:01:00 +02:00
|
|
|
|
2017-09-02 13:18:21 +02:00
|
|
|
Für weitere Informationen zum URL Transfer und verfügbare Optionen, siehe Funktionen
|
|
|
|
`hook_process` und `hook_process_hashtable` in
|
2017-08-21 23:35:04 +02:00
|
|
|
link:weechat_plugin_api.en.html#_hook_process[WeeChat plugin API reference] (Englisch).
|
2012-01-19 13:56:48 +01:00
|
|
|
|
2010-08-05 14:01:00 +02:00
|
|
|
[[config_options]]
|
2013-11-04 21:41:34 +01:00
|
|
|
=== Konfiguration / Optionen
|
2010-08-05 14:01:00 +02:00
|
|
|
|
|
|
|
[[config_options_set_script]]
|
2013-11-04 21:41:34 +01:00
|
|
|
==== Optionen von Skripten setzen
|
2010-08-05 14:01:00 +02:00
|
|
|
|
|
|
|
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]
|
2013-11-04 21:41:34 +01:00
|
|
|
----
|
2010-08-05 14:01:00 +02:00
|
|
|
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)
|
2013-11-04 21:41:34 +01:00
|
|
|
----
|
2010-08-05 14:01:00 +02:00
|
|
|
|
|
|
|
[[config_options_detect_changes]]
|
2013-11-04 21:41:34 +01:00
|
|
|
==== Veränderungen bemerken
|
2010-08-05 14:01:00 +02:00
|
|
|
|
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]
|
2013-11-04 21:41:34 +01:00
|
|
|
----
|
2010-08-05 14:01:00 +02:00
|
|
|
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", "")
|
2015-03-07 15:16:37 +01:00
|
|
|
# für die jeweilige Programmiersprache muss "python" durch perl/ruby/lua/tcl/guile/javascript ersetzt werden.
|
2013-11-04 21:41:34 +01:00
|
|
|
----
|
2010-08-05 14:01:00 +02:00
|
|
|
|
|
|
|
[[config_options_weechat]]
|
2013-11-04 21:41:34 +01:00
|
|
|
==== WeeChat Optionen lesen
|
2010-08-05 14:01:00 +02:00
|
|
|
|
|
|
|
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]
|
2013-11-04 21:41:34 +01:00
|
|
|
----
|
2010-08-05 14:01:00 +02:00
|
|
|
# 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"))))
|
2013-11-04 21:41:34 +01:00
|
|
|
----
|
2010-08-05 14:01:00 +02:00
|
|
|
|
|
|
|
[[irc]]
|
2013-11-04 21:41:34 +01:00
|
|
|
=== IRC
|
2010-08-05 14:01:00 +02:00
|
|
|
|
|
|
|
[[irc_catch_messages]]
|
2013-11-04 21:41:34 +01:00
|
|
|
==== Nachrichten abfangen
|
2010-08-05 14:01:00 +02:00
|
|
|
|
|
|
|
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]
|
2013-11-04 21:41:34 +01:00
|
|
|
----
|
2010-08-05 14:01:00 +02:00
|
|
|
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"
|
|
|
|
server = signal.split(",")[0]
|
2017-06-03 15:42:05 +02:00
|
|
|
msg = weechat.info_get_hashtable("irc_message_parse", {"message": signal_data})
|
|
|
|
buffer = weechat.info_get("irc_buffer", "%s,%s" % (server, msg["channel"]))
|
2010-08-05 14:01:00 +02:00
|
|
|
if buffer:
|
2017-06-09 22:39:59 +02:00
|
|
|
weechat.prnt(buffer, "%s (%s) ist dem Channel beigetreten!" % (msg["nick"], msg["host"]))
|
2010-08-05 14:01:00 +02:00
|
|
|
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", "")
|
2013-11-04 21:41:34 +01:00
|
|
|
----
|
2010-08-05 14:01:00 +02:00
|
|
|
|
2010-10-25 13:09:11 +02:00
|
|
|
[[irc_modify_messages]]
|
2015-03-29 22:15:57 +02:00
|
|
|
==== Nachrichten ändern
|
2010-10-25 13:09:11 +02:00
|
|
|
|
2010-11-12 22:05:58 +01:00
|
|
|
Die IRC Erweiterung verschickt einen "modifier" mit Namen "irc_in_xxx" ("xxx" steht für den
|
2015-03-29 22:15:57 +02:00
|
|
|
Namen des IRC Befehls) falls eine Nachricht empfangen wurde die dann modifiziert werden kann.
|
2010-10-25 13:09:11 +02:00
|
|
|
|
|
|
|
[source,python]
|
2013-11-04 21:41:34 +01:00
|
|
|
----
|
2010-10-25 13:09:11 +02:00
|
|
|
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", "")
|
2013-11-04 21:41:34 +01:00
|
|
|
----
|
2010-10-25 13:09:11 +02:00
|
|
|
|
|
|
|
[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]]
|
2013-11-04 21:41:34 +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
|
|
|
|
2015-06-27 17:00:53 +02:00
|
|
|
Man kann IRC Nachrichten mittels einer info_hashtable mit dem Namen
|
|
|
|
"irc_message_parse" parsen.
|
|
|
|
|
2015-06-30 22:03:15 +02:00
|
|
|
Das Ergebnis ist eine Hashtabelle mit folgenden Schlüsseln
|
|
|
|
(das Beispiel bezieht sich auf folgende IRC Nachricht:
|
2015-06-27 17:00:53 +02:00
|
|
|
`@time=2015-06-27T16:40:35.000Z :nick!user@host PRIVMSG #weechat :hello!`):
|
|
|
|
|
|
|
|
[width="100%",cols="1,^2,10,8",options="header"]
|
|
|
|
|===
|
2015-06-30 22:03:15 +02:00
|
|
|
| Schlüssel | WeeChat version | Beschreibung | Beispiel
|
2015-06-27 17:00:53 +02:00
|
|
|
|
2015-06-30 22:03:15 +02:00
|
|
|
| Tags | ≥ 0.4.0 |
|
2016-11-26 23:19:41 +01:00
|
|
|
Tags in der Nachricht (kann leer sein). |
|
2015-06-27 17:00:53 +02:00
|
|
|
`time=2015-06-27T16:40:35.000Z`
|
|
|
|
|
|
|
|
| message_without_tags | ≥ 0.4.0 |
|
2016-11-26 23:19:41 +01:00
|
|
|
Die IRC Nachricht ohne Tags (wie eine Nachricht ohne Tags). |
|
2015-06-27 17:00:53 +02:00
|
|
|
`:nick!user@host PRIVMSG #weechat :hello!`
|
|
|
|
|
|
|
|
| nick | ≥ 0.3.4 |
|
2016-11-26 23:19:41 +01:00
|
|
|
der ursprüngliche Nick. |
|
2015-06-27 17:00:53 +02:00
|
|
|
`nick`
|
|
|
|
|
|
|
|
| host | ≥ 0.3.4 |
|
2016-11-26 23:19:41 +01:00
|
|
|
der ursprüngliche Host (beinhaltet den Nick). |
|
2015-06-27 17:00:53 +02:00
|
|
|
`nick!user@host`
|
|
|
|
|
|
|
|
| command | ≥ 0.3.4 |
|
2016-11-26 23:19:41 +01:00
|
|
|
der Befehl (_PRIVMSG_, _NOTICE_, ...). |
|
2015-06-27 17:00:53 +02:00
|
|
|
`PRIVMSG`
|
|
|
|
|
|
|
|
| channel | ≥ 0.3.4 |
|
2016-11-26 23:19:41 +01:00
|
|
|
der Zielchanne.l|
|
2015-06-27 17:00:53 +02:00
|
|
|
`#weechat`
|
|
|
|
|
|
|
|
| arguments | ≥ 0.3.4 |
|
2016-11-26 23:19:41 +01:00
|
|
|
das Argument des Befehls (beinhaltet den Channel). |
|
2015-06-27 17:00:53 +02:00
|
|
|
`#weechat :hello!`
|
|
|
|
|
|
|
|
| text | ≥ 1.3 |
|
2016-11-26 23:19:41 +01:00
|
|
|
der Text (zum Beispiel eine Nachricht eines Users). |
|
2015-06-27 17:00:53 +02:00
|
|
|
`hello!`
|
|
|
|
|
2015-08-14 21:25:27 +02:00
|
|
|
| pos_command | ≥ 1.3 |
|
2016-11-26 23:19:41 +01:00
|
|
|
Index von _command_ innerhalb einer Nachricht ("-1" falls _command_ nicht gefunden wird). |
|
2015-08-14 21:25:27 +02:00
|
|
|
`47`
|
|
|
|
|
|
|
|
| pos_arguments | ≥ 1.3 |
|
2016-11-26 23:19:41 +01:00
|
|
|
Index von_arguments_ innerhalb einer Nachricht ("-1" falls _arguments_ nicht gefunden wird). |
|
2015-08-14 21:25:27 +02:00
|
|
|
`55`
|
|
|
|
|
|
|
|
| pos_channel | ≥ 1.3 |
|
2016-11-26 23:19:41 +01:00
|
|
|
Index von _channel_ innerhalb einer Nachricht ("-1" falls _channel_ nicht gefunden wird). |
|
2015-08-14 21:25:27 +02:00
|
|
|
`55`
|
|
|
|
|
2015-06-27 17:00:53 +02:00
|
|
|
| pos_text | ≥ 1.3 |
|
2016-11-26 23:19:41 +01:00
|
|
|
Index von _text_ innerhalb einer Nachricht ("-1" falls _text_ nicht gefunden wird). |
|
2015-06-27 17:00:53 +02:00
|
|
|
`65`
|
|
|
|
|===
|
2010-10-25 13:09:11 +02:00
|
|
|
|
|
|
|
[source,python]
|
2013-11-04 21:41:34 +01:00
|
|
|
----
|
2015-06-27 17:00:53 +02:00
|
|
|
dict = weechat.info_get_hashtable(
|
|
|
|
"irc_message_parse",
|
|
|
|
{"message": "@time=2015-06-27T16:40:35.000Z :nick!user@host PRIVMSG #weechat :hello!"})
|
|
|
|
|
|
|
|
# dict == {
|
|
|
|
# "tags": "time=2015-06-27T16:40:35.000Z",
|
|
|
|
# "message_without_tags": ":nick!user@host PRIVMSG #weechat :hello!",
|
|
|
|
# "nick": "nick",
|
|
|
|
# "host": "nick!user@host",
|
|
|
|
# "command": "PRIVMSG",
|
|
|
|
# "channel": "#weechat",
|
|
|
|
# "arguments": "#weechat :hello!",
|
|
|
|
# "text": "hello!",
|
2015-08-14 21:25:27 +02:00
|
|
|
# "pos_command": "47",
|
|
|
|
# "pos_arguments": "55",
|
|
|
|
# "pos_channel": "55",
|
2015-06-27 17:00:53 +02:00
|
|
|
# "pos_text": "65",
|
|
|
|
# }
|
2013-11-04 21:41:34 +01:00
|
|
|
----
|
2010-10-25 13:09:11 +02:00
|
|
|
|
2010-08-05 14:01:00 +02:00
|
|
|
[[infos]]
|
2013-11-04 21:41:34 +01:00
|
|
|
=== Infos
|
2010-08-05 14:01:00 +02:00
|
|
|
|
|
|
|
[[infos_weechat_version]]
|
2013-11-04 21:41:34 +01:00
|
|
|
==== WeeChat Version
|
2010-08-05 14:01:00 +02:00
|
|
|
|
|
|
|
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]
|
2013-11-04 21:41:34 +01:00
|
|
|
----
|
2010-08-05 14:01:00 +02:00
|
|
|
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")
|
2013-11-04 21:41:34 +01:00
|
|
|
----
|
2010-08-05 14:01:00 +02:00
|
|
|
|
|
|
|
[NOTE]
|
2016-05-04 22:19:27 +02:00
|
|
|
Versionen ≤ 0.3.1.1 geben einen leeren String zurück wenn man _info_get("version_number")_
|
2015-03-29 22:15:57 +02:00
|
|
|
aufruft. Deshalb müssen Sie prüfen ob der Rückgabewert *nicht* leer ist.
|
2010-08-05 14:01:00 +02:00
|
|
|
|
|
|
|
Um die Version als String zu erhalten:
|
|
|
|
|
|
|
|
[source,python]
|
2013-11-04 21:41:34 +01:00
|
|
|
----
|
2010-08-05 14:01:00 +02:00
|
|
|
# Dies gibt z.B. "Version 0.3.2" im Core Buffer aus
|
|
|
|
weechat.prnt("", "Version %s" % weechat.info_get("version", ""))
|
2013-11-04 21:41:34 +01:00
|
|
|
----
|
2010-08-05 14:01:00 +02:00
|
|
|
|
|
|
|
[[infos_other]]
|
2013-11-04 21:41:34 +01:00
|
|
|
==== andere Informationen
|
2010-08-05 14:01:00 +02:00
|
|
|
|
|
|
|
[source,python]
|
2013-11-04 21:41:34 +01:00
|
|
|
----
|
2010-08-05 14:01:00 +02:00
|
|
|
# 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", ""))
|
2013-11-04 21:41:34 +01:00
|
|
|
----
|
2010-08-05 14:01:00 +02:00
|
|
|
|
|
|
|
[[infolists]]
|
2013-11-04 21:41:34 +01:00
|
|
|
=== Infolisten
|
2010-08-05 14:01:00 +02:00
|
|
|
|
|
|
|
[[infolists_read]]
|
2013-11-04 21:41:34 +01:00
|
|
|
==== Infoliste einlesen
|
2010-08-05 14:01:00 +02:00
|
|
|
|
|
|
|
Es können Infolisten eingelesen werden die entweder von WeeChat oder von
|
|
|
|
Erweiterungen erstellt wurden.
|
|
|
|
|
|
|
|
Beispiele:
|
|
|
|
|
|
|
|
[source,python]
|
2013-11-04 21:41:34 +01:00
|
|
|
----
|
2010-08-05 14:01:00 +02:00
|
|
|
# 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)
|
2013-11-04 21:41:34 +01:00
|
|
|
----
|
2010-08-05 14:01:00 +02:00
|
|
|
|
|
|
|
[IMPORTANT]
|
2015-03-29 22:15:57 +02:00
|
|
|
Vergewissern Sie sich `infolist_free` aufzurufen um den Speicher wieder
|
2010-08-05 14:01:00 +02:00
|
|
|
frei zu geben der durch die Infoliste belegt wurde. WeeChat gibt diesen Speicher
|
2015-03-29 22:15:57 +02:00
|
|
|
nicht automatisch frei.
|