From 0e4eb69d3308fff112c5e2473c2e5ff9a60be22d Mon Sep 17 00:00:00 2001 From: Sebastien Helleu Date: Sun, 28 Jul 2013 12:40:08 +0200 Subject: [PATCH] api: use pointer for infolist "hook" to return only one hook --- ChangeLog | 1 + doc/de/autogen/plugin_api/infolists.txt | 2 +- doc/en/autogen/plugin_api/infolists.txt | 2 +- doc/fr/autogen/plugin_api/infolists.txt | 2 +- doc/it/autogen/plugin_api/infolists.txt | 2 +- doc/ja/autogen/plugin_api/infolists.txt | 2 +- po/cs.po | 6 +- po/de.po | 6 +- po/es.po | 6 +- po/fr.po | 7 +- po/hu.po | 6 +- po/it.po | 6 +- po/ja.po | 6 +- po/pl.po | 6 +- po/pt_BR.po | 6 +- po/ru.po | 6 +- po/tr.po | 5 +- po/weechat.pot | 5 +- src/core/wee-hook.c | 757 ++++++++++++------------ src/core/wee-hook.h | 2 + src/plugins/plugin-api.c | 8 +- 21 files changed, 461 insertions(+), 388 deletions(-) diff --git a/ChangeLog b/ChangeLog index da154c6cd..e7b0b83eb 100644 --- a/ChangeLog +++ b/ChangeLog @@ -46,6 +46,7 @@ Version 0.4.2 (under dev!) "layout_window" * core: fix line alignment when option weechat.look.buffer_time_format is set to empty string +* api: use pointer for infolist "hook" to return only one hook * api: add new function strlen_screen * aspell: rename option aspell.look.color to aspell.color.misspelled, add option aspell.color.suggestions diff --git a/doc/de/autogen/plugin_api/infolists.txt b/doc/de/autogen/plugin_api/infolists.txt index d38f6198d..73ee808ad 100644 --- a/doc/de/autogen/plugin_api/infolists.txt +++ b/doc/de/autogen/plugin_api/infolists.txt @@ -48,7 +48,7 @@ | weechat | history | Verlaufspeicher der Befehle | Buffer Pointer (falls nicht gesetzt, wird der globale Verlauf zurückgegeben) (optional) | - -| weechat | hook | Auflistung der Hooks | - | type,arguments (type ist ein command/timer/.., arguments dient dazu nur einige hooks abzufragen (darf mit einem "*" als Platzhalter beginnen oder enden), beide Optionen sind optional) +| weechat | hook | Auflistung der Hooks | hook pointer (optional) | type,arguments (type ist ein command/timer/.., arguments dient dazu nur einige hooks abzufragen (darf mit einem "*" als Platzhalter beginnen oder enden), beide Optionen sind optional) | weechat | hotlist | Liste der Buffer in Hotlist | - | - diff --git a/doc/en/autogen/plugin_api/infolists.txt b/doc/en/autogen/plugin_api/infolists.txt index 94fa9fb6d..24b8b170c 100644 --- a/doc/en/autogen/plugin_api/infolists.txt +++ b/doc/en/autogen/plugin_api/infolists.txt @@ -48,7 +48,7 @@ | weechat | history | history of commands | buffer pointer (if not set, return global history) (optional) | - -| weechat | hook | list of hooks | - | type,arguments (type is command/timer/.., arguments to get only some hooks (can start or end with "*" as wildcard), both are optional) +| weechat | hook | list of hooks | hook pointer (optional) | type,arguments (type is command/timer/.., arguments to get only some hooks (can start or end with "*" as wildcard), both are optional) | weechat | hotlist | list of buffers in hotlist | - | - diff --git a/doc/fr/autogen/plugin_api/infolists.txt b/doc/fr/autogen/plugin_api/infolists.txt index 400e9bd9d..ed220a15a 100644 --- a/doc/fr/autogen/plugin_api/infolists.txt +++ b/doc/fr/autogen/plugin_api/infolists.txt @@ -48,7 +48,7 @@ | weechat | history | historique des commandes | pointeur vers le tampon (si non défini, retourne l'historique global) (optionnel) | - -| weechat | hook | liste des hooks | - | type,paramètres (le type est command/timer/.., paramètres pour avoir seulement quelques hooks (peut démarrer ou se terminer par "*" comme joker), les deux sont optionnels) +| weechat | hook | liste des hooks | pointeur vers le hook (optionnel) | type,paramètres (le type est command/timer/.., paramètres pour avoir seulement quelques hooks (peut démarrer ou se terminer par "*" comme joker), les deux sont optionnels) | weechat | hotlist | liste des tampons dans la hotlist | - | - diff --git a/doc/it/autogen/plugin_api/infolists.txt b/doc/it/autogen/plugin_api/infolists.txt index 9829f7b3a..8c859a944 100644 --- a/doc/it/autogen/plugin_api/infolists.txt +++ b/doc/it/autogen/plugin_api/infolists.txt @@ -48,7 +48,7 @@ | weechat | history | cronologia dei comandi | puntatore al buffer (se non impostato, restituisce la cronologia globale) (opzionale) | - -| weechat | hook | elenco di hook | - | tipo,argomenti (il tipo è comando/timer/.., gli argomenti sono necessari solo per ottenere alcuni hook, (possono iniziare o terminare con "*" come carattere jolly, entrambi sono opzionali) +| weechat | hook | elenco di hook | hook pointer (optional) | tipo,argomenti (il tipo è comando/timer/.., gli argomenti sono necessari solo per ottenere alcuni hook, (possono iniziare o terminare con "*" come carattere jolly, entrambi sono opzionali) | weechat | hotlist | elenco dei buffer nella hotlist | - | - diff --git a/doc/ja/autogen/plugin_api/infolists.txt b/doc/ja/autogen/plugin_api/infolists.txt index 58184615f..9febac609 100644 --- a/doc/ja/autogen/plugin_api/infolists.txt +++ b/doc/ja/autogen/plugin_api/infolists.txt @@ -48,7 +48,7 @@ | weechat | history | コマンドの履歴 | バッファポインタ (ワイルドカードとして "*" で始めるか終われる) (オプション) | - -| weechat | hook | フックリスト | - | type,arguments (type はコマンド/タイマー/..、arguments はいくつかのフックで必要 (ワイルドカードとして "*" で始めるか終われる)、両方ともオプション) +| weechat | hook | フックリスト | hook pointer (optional) | type,arguments (type はコマンド/タイマー/..、arguments はいくつかのフックで必要 (ワイルドカードとして "*" で始めるか終われる)、両方ともオプション) | weechat | hotlist | ホットリストに含まれるバッファ | - | - diff --git a/po/cs.po b/po/cs.po index 77e47c319..1189d1fb6 100644 --- a/po/cs.po +++ b/po/cs.po @@ -20,7 +20,7 @@ msgid "" msgstr "" "Project-Id-Version: WeeChat 0.4.2-dev\n" "Report-Msgid-Bugs-To: flashcode@flashtux.org\n" -"POT-Creation-Date: 2013-07-27 23:18+0200\n" +"POT-Creation-Date: 2013-07-28 12:32+0200\n" "PO-Revision-Date: 2013-07-18 19:51+0200\n" "Last-Translator: Jiri Golembiovsky \n" "Language-Team: weechat-dev \n" @@ -7606,6 +7606,10 @@ msgstr "" msgid "list of hooks" msgstr "seznam napojení" +#, fuzzy +msgid "hook pointer (optional)" +msgstr "ukazatel přezdívky (volitelné)" + msgid "" "type,arguments (type is command/timer/.., arguments to get only some hooks " "(can start or end with \"*\" as wildcard), both are optional)" diff --git a/po/de.po b/po/de.po index ee92a9012..546032dea 100644 --- a/po/de.po +++ b/po/de.po @@ -22,7 +22,7 @@ msgid "" msgstr "" "Project-Id-Version: WeeChat 0.4.2-dev\n" "Report-Msgid-Bugs-To: flashcode@flashtux.org\n" -"POT-Creation-Date: 2013-07-27 23:18+0200\n" +"POT-Creation-Date: 2013-07-28 12:32+0200\n" "PO-Revision-Date: 2013-07-18 19:51+0200\n" "Last-Translator: Nils Görs \n" "Language-Team: German \n" @@ -8332,6 +8332,10 @@ msgstr "" msgid "list of hooks" msgstr "Auflistung der Hooks" +#, fuzzy +msgid "hook pointer (optional)" +msgstr "Nick Pointer (optional)" + msgid "" "type,arguments (type is command/timer/.., arguments to get only some hooks " "(can start or end with \"*\" as wildcard), both are optional)" diff --git a/po/es.po b/po/es.po index 4df009a53..300f1f167 100644 --- a/po/es.po +++ b/po/es.po @@ -22,7 +22,7 @@ msgid "" msgstr "" "Project-Id-Version: WeeChat 0.4.2-dev\n" "Report-Msgid-Bugs-To: flashcode@flashtux.org\n" -"POT-Creation-Date: 2013-07-27 23:18+0200\n" +"POT-Creation-Date: 2013-07-28 12:32+0200\n" "PO-Revision-Date: 2013-07-18 19:51+0200\n" "Last-Translator: Elián Hanisch \n" "Language-Team: weechat-dev \n" @@ -7875,6 +7875,10 @@ msgstr "" msgid "list of hooks" msgstr "lista de enganches" +#, fuzzy +msgid "hook pointer (optional)" +msgstr "puntero del apodo (opcional)" + # translate command,timer? msgid "" "type,arguments (type is command/timer/.., arguments to get only some hooks " diff --git a/po/fr.po b/po/fr.po index bbd2d64da..cbea94cfb 100644 --- a/po/fr.po +++ b/po/fr.po @@ -21,8 +21,8 @@ msgid "" msgstr "" "Project-Id-Version: WeeChat 0.4.2-dev\n" "Report-Msgid-Bugs-To: flashcode@flashtux.org\n" -"POT-Creation-Date: 2013-07-27 23:18+0200\n" -"PO-Revision-Date: 2013-07-27 23:19+0200\n" +"POT-Creation-Date: 2013-07-28 12:32+0200\n" +"PO-Revision-Date: 2013-07-28 12:33+0200\n" "Last-Translator: Sebastien Helleu \n" "Language-Team: weechat-dev \n" "Language: fr\n" @@ -8109,6 +8109,9 @@ msgstr "" msgid "list of hooks" msgstr "liste des hooks" +msgid "hook pointer (optional)" +msgstr "pointeur vers le hook (optionnel)" + msgid "" "type,arguments (type is command/timer/.., arguments to get only some hooks " "(can start or end with \"*\" as wildcard), both are optional)" diff --git a/po/hu.po b/po/hu.po index 6db0a9095..c8384597b 100644 --- a/po/hu.po +++ b/po/hu.po @@ -20,7 +20,7 @@ msgid "" msgstr "" "Project-Id-Version: WeeChat 0.4.2-dev\n" "Report-Msgid-Bugs-To: flashcode@flashtux.org\n" -"POT-Creation-Date: 2013-07-27 23:18+0200\n" +"POT-Creation-Date: 2013-07-28 12:32+0200\n" "PO-Revision-Date: 2013-07-18 19:51+0200\n" "Last-Translator: Andras Voroskoi \n" "Language-Team: weechat-dev \n" @@ -7079,6 +7079,10 @@ msgstr "" msgid "list of hooks" msgstr "Aliaszok listája:\n" +#, fuzzy +msgid "hook pointer (optional)" +msgstr "Beállítások mentése a lemezre\n" + msgid "" "type,arguments (type is command/timer/.., arguments to get only some hooks " "(can start or end with \"*\" as wildcard), both are optional)" diff --git a/po/it.po b/po/it.po index 3efe75f09..c5ab6340a 100644 --- a/po/it.po +++ b/po/it.po @@ -20,7 +20,7 @@ msgid "" msgstr "" "Project-Id-Version: WeeChat 0.4.2-dev\n" "Report-Msgid-Bugs-To: flashcode@flashtux.org\n" -"POT-Creation-Date: 2013-07-27 23:18+0200\n" +"POT-Creation-Date: 2013-07-28 12:32+0200\n" "PO-Revision-Date: 2013-07-18 19:51+0200\n" "Last-Translator: Esteban I. Ruiz Moreno \n" "Language-Team: weechat-dev \n" @@ -7944,6 +7944,10 @@ msgstr "" msgid "list of hooks" msgstr "elenco di hook" +#, fuzzy +msgid "hook pointer (optional)" +msgstr "puntatore al nick (opzionale)" + msgid "" "type,arguments (type is command/timer/.., arguments to get only some hooks " "(can start or end with \"*\" as wildcard), both are optional)" diff --git a/po/ja.po b/po/ja.po index dacc09a56..89976d860 100644 --- a/po/ja.po +++ b/po/ja.po @@ -20,7 +20,7 @@ msgid "" msgstr "" "Project-Id-Version: WeeChat 0.4.2-dev\n" "Report-Msgid-Bugs-To: flashcode@flashtux.org\n" -"POT-Creation-Date: 2013-07-27 23:18+0200\n" +"POT-Creation-Date: 2013-07-28 12:32+0200\n" "PO-Revision-Date: 2013-07-18 19:51+0200\n" "Last-Translator: AYANOKOUZI, Ryuunosuke \n" "Language-Team: Japanese \n" @@ -7814,6 +7814,10 @@ msgstr "" msgid "list of hooks" msgstr "フックリスト" +#, fuzzy +msgid "hook pointer (optional)" +msgstr "ニックネームポインタ (オプション)" + msgid "" "type,arguments (type is command/timer/.., arguments to get only some hooks " "(can start or end with \"*\" as wildcard), both are optional)" diff --git a/po/pl.po b/po/pl.po index c1b64efae..f9e7318ba 100644 --- a/po/pl.po +++ b/po/pl.po @@ -21,7 +21,7 @@ msgid "" msgstr "" "Project-Id-Version: WeeChat 0.4.2-dev\n" "Report-Msgid-Bugs-To: flashcode@flashtux.org\n" -"POT-Creation-Date: 2013-07-27 23:18+0200\n" +"POT-Creation-Date: 2013-07-28 12:32+0200\n" "PO-Revision-Date: 2013-07-18 19:51+0200\n" "Last-Translator: Krzysztof Korościk \n" "Language-Team: weechat-dev \n" @@ -7960,6 +7960,10 @@ msgstr "" msgid "list of hooks" msgstr "lista powiązań" +#, fuzzy +msgid "hook pointer (optional)" +msgstr "wskaźnik nicka (opcjonalne)" + msgid "" "type,arguments (type is command/timer/.., arguments to get only some hooks " "(can start or end with \"*\" as wildcard), both are optional)" diff --git a/po/pt_BR.po b/po/pt_BR.po index 577ec4079..81fe54506 100644 --- a/po/pt_BR.po +++ b/po/pt_BR.po @@ -21,7 +21,7 @@ msgid "" msgstr "" "Project-Id-Version: WeeChat 0.4.2-dev\n" "Report-Msgid-Bugs-To: flashcode@flashtux.org\n" -"POT-Creation-Date: 2013-07-27 23:18+0200\n" +"POT-Creation-Date: 2013-07-28 12:32+0200\n" "PO-Revision-Date: 2013-07-18 19:51+0200\n" "Last-Translator: Sergio Durigan Junior \n" "Language-Team: weechat-dev \n" @@ -7278,6 +7278,10 @@ msgstr "" msgid "list of hooks" msgstr "" +#, fuzzy +msgid "hook pointer (optional)" +msgstr "ponteiro do apelido (opcional)" + msgid "" "type,arguments (type is command/timer/.., arguments to get only some hooks " "(can start or end with \"*\" as wildcard), both are optional)" diff --git a/po/ru.po b/po/ru.po index 3308fc970..876e86a91 100644 --- a/po/ru.po +++ b/po/ru.po @@ -21,7 +21,7 @@ msgid "" msgstr "" "Project-Id-Version: WeeChat 0.4.2-dev\n" "Report-Msgid-Bugs-To: flashcode@flashtux.org\n" -"POT-Creation-Date: 2013-07-27 23:18+0200\n" +"POT-Creation-Date: 2013-07-28 12:32+0200\n" "PO-Revision-Date: 2013-07-18 19:52+0200\n" "Last-Translator: Aleksey V Zapparov AKA ixti \n" "Language-Team: weechat-dev \n" @@ -7107,6 +7107,10 @@ msgstr "" msgid "list of hooks" msgstr "Список сокращений:\n" +#, fuzzy +msgid "hook pointer (optional)" +msgstr "Сохраняю конфигурацию\n" + msgid "" "type,arguments (type is command/timer/.., arguments to get only some hooks " "(can start or end with \"*\" as wildcard), both are optional)" diff --git a/po/tr.po b/po/tr.po index 2ca08075f..6edf1e6e9 100644 --- a/po/tr.po +++ b/po/tr.po @@ -20,7 +20,7 @@ msgid "" msgstr "" "Project-Id-Version: WeeChat 0.4.2-dev\n" "Report-Msgid-Bugs-To: flashcode@flashtux.org\n" -"POT-Creation-Date: 2013-07-27 23:18+0200\n" +"POT-Creation-Date: 2013-07-28 12:32+0200\n" "PO-Revision-Date: 2013-07-18 19:52+0200\n" "Last-Translator: Hasan Kiran \n" "Language-Team: weechat-dev \n" @@ -6285,6 +6285,9 @@ msgstr "" msgid "list of hooks" msgstr "" +msgid "hook pointer (optional)" +msgstr "" + msgid "" "type,arguments (type is command/timer/.., arguments to get only some hooks " "(can start or end with \"*\" as wildcard), both are optional)" diff --git a/po/weechat.pot b/po/weechat.pot index fe46f309a..ccfa0446b 100644 --- a/po/weechat.pot +++ b/po/weechat.pot @@ -21,7 +21,7 @@ msgid "" msgstr "" "Project-Id-Version: WeeChat 0.4.1-dev\n" "Report-Msgid-Bugs-To: flashcode@flashtux.org\n" -"POT-Creation-Date: 2013-07-27 23:18+0200\n" +"POT-Creation-Date: 2013-07-28 12:32+0200\n" "PO-Revision-Date: 2013-02-14 18:20+0100\n" "Last-Translator: FULL NAME \n" "Language-Team: weechat-dev \n" @@ -6251,6 +6251,9 @@ msgstr "" msgid "list of hooks" msgstr "" +msgid "hook pointer (optional)" +msgstr "" + msgid "" "type,arguments (type is command/timer/.., arguments to get only some hooks " "(can start or end with \"*\" as wildcard), both are optional)" diff --git a/src/core/wee-hook.c b/src/core/wee-hook.c index cdc24d018..ff2702948 100644 --- a/src/core/wee-hook.c +++ b/src/core/wee-hook.c @@ -3463,6 +3463,389 @@ unhook_all () } } +/* + * Adds a hook in an infolist. + * + * Returns: + * 1: OK + * 0: error + */ + +int +hook_add_to_infolist_pointer (struct t_infolist *infolist, struct t_hook *hook) +{ + struct t_infolist_item *ptr_item; + char value[64]; + + ptr_item = infolist_new_item (infolist); + if (!ptr_item) + return 0; + + if (!infolist_new_var_pointer (ptr_item, "pointer", hook)) + return 0; + if (!infolist_new_var_pointer (ptr_item, "plugin", hook->plugin)) + return 0; + if (!infolist_new_var_string (ptr_item, "plugin_name", + (hook->plugin) ? + hook->plugin->name : NULL)) + return 0; + if (!infolist_new_var_string (ptr_item, "subplugin", hook->subplugin)) + return 0; + if (!infolist_new_var_string (ptr_item, "type", hook_type_string[hook->type])) + return 0; + if (!infolist_new_var_integer (ptr_item, "deleted", hook->deleted)) + return 0; + if (!infolist_new_var_integer (ptr_item, "running", hook->running)) + return 0; + if (!infolist_new_var_integer (ptr_item, "priority", hook->priority)) + return 0; + switch (hook->type) + { + case HOOK_TYPE_COMMAND: + if (!hook->deleted) + { + if (!infolist_new_var_pointer (ptr_item, "callback", HOOK_COMMAND(hook, callback))) + return 0; + if (!infolist_new_var_string (ptr_item, "command", HOOK_COMMAND(hook, command))) + return 0; + if (!infolist_new_var_string (ptr_item, "description", + HOOK_COMMAND(hook, description))) + return 0; + if (!infolist_new_var_string (ptr_item, "description_nls", + (HOOK_COMMAND(hook, description) + && HOOK_COMMAND(hook, description)[0]) ? + _(HOOK_COMMAND(hook, description)) : "")) + return 0; + if (!infolist_new_var_string (ptr_item, "args", + HOOK_COMMAND(hook, args))) + return 0; + if (!infolist_new_var_string (ptr_item, "args_nls", + (HOOK_COMMAND(hook, args) + && HOOK_COMMAND(hook, args)[0]) ? + _(HOOK_COMMAND(hook, args)) : "")) + return 0; + if (!infolist_new_var_string (ptr_item, "args_description", + HOOK_COMMAND(hook, args_description))) + return 0; + if (!infolist_new_var_string (ptr_item, "args_description_nls", + (HOOK_COMMAND(hook, args_description) + && HOOK_COMMAND(hook, args_description)[0]) ? + _(HOOK_COMMAND(hook, args_description)) : "")) + return 0; + if (!infolist_new_var_string (ptr_item, "completion", HOOK_COMMAND(hook, completion))) + return 0; + } + break; + case HOOK_TYPE_COMMAND_RUN: + if (!hook->deleted) + { + if (!infolist_new_var_pointer (ptr_item, "callback", HOOK_COMMAND_RUN(hook, callback))) + return 0; + if (!infolist_new_var_string (ptr_item, "command", HOOK_COMMAND_RUN(hook, command))) + return 0; + } + break; + case HOOK_TYPE_TIMER: + if (!hook->deleted) + { + if (!infolist_new_var_pointer (ptr_item, "callback", HOOK_TIMER(hook, callback))) + return 0; + snprintf (value, sizeof (value), "%ld", HOOK_TIMER(hook, interval)); + if (!infolist_new_var_string (ptr_item, "interval", value)) + return 0; + if (!infolist_new_var_integer (ptr_item, "align_second", HOOK_TIMER(hook, align_second))) + return 0; + if (!infolist_new_var_integer (ptr_item, "remaining_calls", HOOK_TIMER(hook, remaining_calls))) + return 0; + if (!infolist_new_var_buffer (ptr_item, "last_exec", + &(HOOK_TIMER(hook, last_exec)), + sizeof (HOOK_TIMER(hook, last_exec)))) + return 0; + if (!infolist_new_var_buffer (ptr_item, "next_exec", + &(HOOK_TIMER(hook, next_exec)), + sizeof (HOOK_TIMER(hook, next_exec)))) + return 0; + } + break; + case HOOK_TYPE_FD: + if (!hook->deleted) + { + if (!infolist_new_var_pointer (ptr_item, "callback", HOOK_FD(hook, callback))) + return 0; + if (!infolist_new_var_integer (ptr_item, "fd", HOOK_FD(hook, fd))) + return 0; + if (!infolist_new_var_integer (ptr_item, "flags", HOOK_FD(hook, flags))) + return 0; + if (!infolist_new_var_integer (ptr_item, "error", HOOK_FD(hook, error))) + return 0; + } + break; + case HOOK_TYPE_PROCESS: + if (!hook->deleted) + { + if (!infolist_new_var_pointer (ptr_item, "callback", HOOK_PROCESS(hook, callback))) + return 0; + if (!infolist_new_var_string (ptr_item, "command", HOOK_PROCESS(hook, command))) + return 0; + if (!infolist_new_var_string (ptr_item, "options", hashtable_get_string (HOOK_PROCESS(hook, options), "keys_values"))) + return 0; + if (!infolist_new_var_integer (ptr_item, "timeout", HOOK_PROCESS(hook, timeout))) + return 0; + if (!infolist_new_var_integer (ptr_item, "child_read_stdout", HOOK_PROCESS(hook, child_read[HOOK_PROCESS_STDOUT]))) + return 0; + if (!infolist_new_var_integer (ptr_item, "child_write_stdout", HOOK_PROCESS(hook, child_write[HOOK_PROCESS_STDOUT]))) + return 0; + if (!infolist_new_var_integer (ptr_item, "child_read_stderr", HOOK_PROCESS(hook, child_read[HOOK_PROCESS_STDERR]))) + return 0; + if (!infolist_new_var_integer (ptr_item, "child_write_stderr", HOOK_PROCESS(hook, child_write[HOOK_PROCESS_STDERR]))) + return 0; + if (!infolist_new_var_integer (ptr_item, "child_pid", HOOK_PROCESS(hook, child_pid))) + return 0; + if (!infolist_new_var_pointer (ptr_item, "hook_fd_stdout", HOOK_PROCESS(hook, hook_fd[HOOK_PROCESS_STDOUT]))) + return 0; + if (!infolist_new_var_pointer (ptr_item, "hook_fd_stderr", HOOK_PROCESS(hook, hook_fd[HOOK_PROCESS_STDERR]))) + return 0; + if (!infolist_new_var_pointer (ptr_item, "hook_timer", HOOK_PROCESS(hook, hook_timer))) + return 0; + } + break; + case HOOK_TYPE_CONNECT: + if (!hook->deleted) + { + if (!infolist_new_var_pointer (ptr_item, "callback", HOOK_CONNECT(hook, callback))) + return 0; + if (!infolist_new_var_string (ptr_item, "address", HOOK_CONNECT(hook, address))) + return 0; + if (!infolist_new_var_integer (ptr_item, "port", HOOK_CONNECT(hook, port))) + return 0; + if (!infolist_new_var_integer (ptr_item, "sock", HOOK_CONNECT(hook, sock))) + return 0; + if (!infolist_new_var_integer (ptr_item, "ipv6", HOOK_CONNECT(hook, ipv6))) + return 0; + if (!infolist_new_var_integer (ptr_item, "retry", HOOK_CONNECT(hook, retry))) + return 0; +#ifdef HAVE_GNUTLS + if (!infolist_new_var_pointer (ptr_item, "gnutls_sess", HOOK_CONNECT(hook, gnutls_sess))) + return 0; + if (!infolist_new_var_pointer (ptr_item, "gnutls_cb", HOOK_CONNECT(hook, gnutls_cb))) + return 0; + if (!infolist_new_var_integer (ptr_item, "gnutls_dhkey_size", HOOK_CONNECT(hook, gnutls_dhkey_size))) + return 0; +#endif + if (!infolist_new_var_string (ptr_item, "local_hostname", HOOK_CONNECT(hook, local_hostname))) + return 0; + if (!infolist_new_var_integer (ptr_item, "child_read", HOOK_CONNECT(hook, child_read))) + return 0; + if (!infolist_new_var_integer (ptr_item, "child_write", HOOK_CONNECT(hook, child_write))) + return 0; + if (!infolist_new_var_integer (ptr_item, "child_recv", HOOK_CONNECT(hook, child_recv))) + return 0; + if (!infolist_new_var_integer (ptr_item, "child_send", HOOK_CONNECT(hook, child_send))) + return 0; + if (!infolist_new_var_integer (ptr_item, "child_pid", HOOK_CONNECT(hook, child_pid))) + return 0; + if (!infolist_new_var_pointer (ptr_item, "hook_child_timer", HOOK_CONNECT(hook, hook_child_timer))) + return 0; + if (!infolist_new_var_pointer (ptr_item, "hook_fd", HOOK_CONNECT(hook, hook_fd))) + return 0; + if (!infolist_new_var_pointer (ptr_item, "handshake_hook_fd", HOOK_CONNECT(hook, handshake_hook_fd))) + return 0; + if (!infolist_new_var_pointer (ptr_item, "handshake_hook_timer", HOOK_CONNECT(hook, handshake_hook_timer))) + return 0; + if (!infolist_new_var_integer (ptr_item, "handshake_fd_flags", HOOK_CONNECT(hook, handshake_fd_flags))) + return 0; + if (!infolist_new_var_string (ptr_item, "handshake_ip_address", HOOK_CONNECT(hook, handshake_ip_address))) + return 0; + } + break; + case HOOK_TYPE_PRINT: + if (!hook->deleted) + { + if (!infolist_new_var_pointer (ptr_item, "callback", HOOK_PRINT(hook, callback))) + return 0; + if (!infolist_new_var_pointer (ptr_item, "buffer", HOOK_PRINT(hook, buffer))) + return 0; + if (!infolist_new_var_integer (ptr_item, "tags_count", HOOK_PRINT(hook, tags_count))) + return 0; + if (!infolist_new_var_pointer (ptr_item, "tags_array", HOOK_PRINT(hook, tags_array))) + return 0; + if (!infolist_new_var_string (ptr_item, "message", HOOK_PRINT(hook, message))) + return 0; + if (!infolist_new_var_integer (ptr_item, "strip_colors", HOOK_PRINT(hook, strip_colors))) + return 0; + } + break; + case HOOK_TYPE_SIGNAL: + if (!hook->deleted) + { + if (!infolist_new_var_pointer (ptr_item, "callback", HOOK_SIGNAL(hook, callback))) + return 0; + if (!infolist_new_var_string (ptr_item, "signal", HOOK_SIGNAL(hook, signal))) + return 0; + } + break; + case HOOK_TYPE_HSIGNAL: + if (!hook->deleted) + { + if (!infolist_new_var_pointer (ptr_item, "callback", HOOK_HSIGNAL(hook, callback))) + return 0; + if (!infolist_new_var_string (ptr_item, "signal", HOOK_HSIGNAL(hook, signal))) + return 0; + } + break; + case HOOK_TYPE_CONFIG: + if (!hook->deleted) + { + if (!infolist_new_var_pointer (ptr_item, "callback", HOOK_CONFIG(hook, callback))) + return 0; + if (!infolist_new_var_string (ptr_item, "option", HOOK_CONFIG(hook, option))) + return 0; + } + break; + case HOOK_TYPE_COMPLETION: + if (!hook->deleted) + { + if (!infolist_new_var_pointer (ptr_item, "callback", HOOK_COMPLETION(hook, callback))) + return 0; + if (!infolist_new_var_string (ptr_item, "completion_item", HOOK_COMPLETION(hook, completion_item))) + return 0; + if (!infolist_new_var_string (ptr_item, "description", HOOK_COMPLETION(hook, description))) + return 0; + if (!infolist_new_var_string (ptr_item, "description_nls", + (HOOK_COMPLETION(hook, description) + && HOOK_COMPLETION(hook, description)[0]) ? + _(HOOK_COMPLETION(hook, description)) : "")) + return 0; + } + break; + case HOOK_TYPE_MODIFIER: + if (!hook->deleted) + { + if (!infolist_new_var_pointer (ptr_item, "callback", HOOK_MODIFIER(hook, callback))) + return 0; + if (!infolist_new_var_string (ptr_item, "modifier", HOOK_MODIFIER(hook, modifier))) + return 0; + } + break; + case HOOK_TYPE_INFO: + if (!hook->deleted) + { + if (!infolist_new_var_pointer (ptr_item, "callback", HOOK_INFO(hook, callback))) + return 0; + if (!infolist_new_var_string (ptr_item, "info_name", HOOK_INFO(hook, info_name))) + return 0; + if (!infolist_new_var_string (ptr_item, "description", HOOK_INFO(hook, description))) + return 0; + if (!infolist_new_var_string (ptr_item, "description_nls", + (HOOK_INFO(hook, description) + && HOOK_INFO(hook, description)[0]) ? + _(HOOK_INFO(hook, description)) : "")) + return 0; + if (!infolist_new_var_string (ptr_item, "args_description", HOOK_INFO(hook, args_description))) + return 0; + if (!infolist_new_var_string (ptr_item, "args_description_nls", + (HOOK_INFO(hook, args_description) + && HOOK_INFO(hook, args_description)[0]) ? + _(HOOK_INFO(hook, args_description)) : "")) + return 0; + } + break; + case HOOK_TYPE_INFO_HASHTABLE: + if (!hook->deleted) + { + if (!infolist_new_var_pointer (ptr_item, "callback", HOOK_INFO_HASHTABLE(hook, callback))) + return 0; + if (!infolist_new_var_string (ptr_item, "info_name", HOOK_INFO_HASHTABLE(hook, info_name))) + return 0; + if (!infolist_new_var_string (ptr_item, "description", HOOK_INFO_HASHTABLE(hook, description))) + return 0; + if (!infolist_new_var_string (ptr_item, "description_nls", + (HOOK_INFO_HASHTABLE(hook, description) + && HOOK_INFO_HASHTABLE(hook, description)[0]) ? + _(HOOK_INFO_HASHTABLE(hook, description)) : "")) + return 0; + if (!infolist_new_var_string (ptr_item, "args_description", HOOK_INFO_HASHTABLE(hook, args_description))) + return 0; + if (!infolist_new_var_string (ptr_item, "args_description_nls", + (HOOK_INFO_HASHTABLE(hook, args_description) + && HOOK_INFO_HASHTABLE(hook, args_description)[0]) ? + _(HOOK_INFO_HASHTABLE(hook, args_description)) : "")) + return 0; + if (!infolist_new_var_string (ptr_item, "output_description", HOOK_INFO_HASHTABLE(hook, output_description))) + return 0; + if (!infolist_new_var_string (ptr_item, "output_description_nls", + (HOOK_INFO_HASHTABLE(hook, output_description) + && HOOK_INFO_HASHTABLE(hook, output_description)[0]) ? + _(HOOK_INFO_HASHTABLE(hook, output_description)) : "")) + return 0; + } + break; + case HOOK_TYPE_INFOLIST: + if (!hook->deleted) + { + if (!infolist_new_var_pointer (ptr_item, "callback", HOOK_INFOLIST(hook, callback))) + return 0; + if (!infolist_new_var_string (ptr_item, "infolist_name", HOOK_INFOLIST(hook, infolist_name))) + return 0; + if (!infolist_new_var_string (ptr_item, "description", HOOK_INFOLIST(hook, description))) + return 0; + if (!infolist_new_var_string (ptr_item, "description_nls", + (HOOK_INFOLIST(hook, description) + && HOOK_INFOLIST(hook, description)[0]) ? + _(HOOK_INFOLIST(hook, description)) : "")) + return 0; + if (!infolist_new_var_string (ptr_item, "pointer_description", HOOK_INFOLIST(hook, pointer_description))) + return 0; + if (!infolist_new_var_string (ptr_item, "pointer_description_nls", + (HOOK_INFOLIST(hook, pointer_description) + && HOOK_INFOLIST(hook, pointer_description)[0]) ? + _(HOOK_INFOLIST(hook, pointer_description)) : "")) + return 0; + if (!infolist_new_var_string (ptr_item, "args_description", HOOK_INFOLIST(hook, args_description))) + return 0; + if (!infolist_new_var_string (ptr_item, "args_description_nls", + (HOOK_INFOLIST(hook, args_description) + && HOOK_INFOLIST(hook, args_description)[0]) ? + _(HOOK_INFOLIST(hook, args_description)) : "")) + return 0; + } + break; + case HOOK_TYPE_HDATA: + if (!hook->deleted) + { + if (!infolist_new_var_pointer (ptr_item, "callback", HOOK_HDATA(hook, callback))) + return 0; + if (!infolist_new_var_string (ptr_item, "hdata_name", HOOK_HDATA(hook, hdata_name))) + return 0; + if (!infolist_new_var_string (ptr_item, "description", HOOK_HDATA(hook, description))) + return 0; + if (!infolist_new_var_string (ptr_item, "description_nls", + (HOOK_HDATA(hook, description) + && HOOK_HDATA(hook, description)[0]) ? + _(HOOK_HDATA(hook, description)) : "")) + return 0; + } + break; + case HOOK_TYPE_FOCUS: + if (!hook->deleted) + { + if (!infolist_new_var_pointer (ptr_item, "callback", HOOK_FOCUS(hook, callback))) + return 0; + if (!infolist_new_var_string (ptr_item, "area", HOOK_FOCUS(hook, area))) + return 0; + } + break; + case HOOK_NUM_TYPES: + /* + * this constant is used to count types only, + * it is never used as type + */ + break; + } + + return 1; +} + /* * Adds hooks of a type in an infolist. * @@ -3476,8 +3859,6 @@ hook_add_to_infolist_type (struct t_infolist *infolist, int type, const char *arguments) { struct t_hook *ptr_hook; - struct t_infolist_item *ptr_item; - char value[64]; int match; for (ptr_hook = weechat_hooks[type]; ptr_hook; @@ -3499,371 +3880,7 @@ hook_add_to_infolist_type (struct t_infolist *infolist, int type, if (!match) continue; - ptr_item = infolist_new_item (infolist); - if (!ptr_item) - return 0; - - if (!infolist_new_var_pointer (ptr_item, "pointer", ptr_hook)) - return 0; - if (!infolist_new_var_pointer (ptr_item, "plugin", ptr_hook->plugin)) - return 0; - if (!infolist_new_var_string (ptr_item, "plugin_name", - (ptr_hook->plugin) ? - ptr_hook->plugin->name : NULL)) - return 0; - if (!infolist_new_var_string (ptr_item, "subplugin", ptr_hook->subplugin)) - return 0; - if (!infolist_new_var_string (ptr_item, "type", hook_type_string[ptr_hook->type])) - return 0; - if (!infolist_new_var_integer (ptr_item, "deleted", ptr_hook->deleted)) - return 0; - if (!infolist_new_var_integer (ptr_item, "running", ptr_hook->running)) - return 0; - if (!infolist_new_var_integer (ptr_item, "priority", ptr_hook->priority)) - return 0; - switch (ptr_hook->type) - { - case HOOK_TYPE_COMMAND: - if (!ptr_hook->deleted) - { - if (!infolist_new_var_pointer (ptr_item, "callback", HOOK_COMMAND(ptr_hook, callback))) - return 0; - if (!infolist_new_var_string (ptr_item, "command", HOOK_COMMAND(ptr_hook, command))) - return 0; - if (!infolist_new_var_string (ptr_item, "description", - HOOK_COMMAND(ptr_hook, description))) - return 0; - if (!infolist_new_var_string (ptr_item, "description_nls", - (HOOK_COMMAND(ptr_hook, description) - && HOOK_COMMAND(ptr_hook, description)[0]) ? - _(HOOK_COMMAND(ptr_hook, description)) : "")) - return 0; - if (!infolist_new_var_string (ptr_item, "args", - HOOK_COMMAND(ptr_hook, args))) - return 0; - if (!infolist_new_var_string (ptr_item, "args_nls", - (HOOK_COMMAND(ptr_hook, args) - && HOOK_COMMAND(ptr_hook, args)[0]) ? - _(HOOK_COMMAND(ptr_hook, args)) : "")) - return 0; - if (!infolist_new_var_string (ptr_item, "args_description", - HOOK_COMMAND(ptr_hook, args_description))) - return 0; - if (!infolist_new_var_string (ptr_item, "args_description_nls", - (HOOK_COMMAND(ptr_hook, args_description) - && HOOK_COMMAND(ptr_hook, args_description)[0]) ? - _(HOOK_COMMAND(ptr_hook, args_description)) : "")) - return 0; - if (!infolist_new_var_string (ptr_item, "completion", HOOK_COMMAND(ptr_hook, completion))) - return 0; - } - break; - case HOOK_TYPE_COMMAND_RUN: - if (!ptr_hook->deleted) - { - if (!infolist_new_var_pointer (ptr_item, "callback", HOOK_COMMAND_RUN(ptr_hook, callback))) - return 0; - if (!infolist_new_var_string (ptr_item, "command", HOOK_COMMAND_RUN(ptr_hook, command))) - return 0; - } - break; - case HOOK_TYPE_TIMER: - if (!ptr_hook->deleted) - { - if (!infolist_new_var_pointer (ptr_item, "callback", HOOK_TIMER(ptr_hook, callback))) - return 0; - snprintf (value, sizeof (value), "%ld", HOOK_TIMER(ptr_hook, interval)); - if (!infolist_new_var_string (ptr_item, "interval", value)) - return 0; - if (!infolist_new_var_integer (ptr_item, "align_second", HOOK_TIMER(ptr_hook, align_second))) - return 0; - if (!infolist_new_var_integer (ptr_item, "remaining_calls", HOOK_TIMER(ptr_hook, remaining_calls))) - return 0; - if (!infolist_new_var_buffer (ptr_item, "last_exec", - &(HOOK_TIMER(ptr_hook, last_exec)), - sizeof (HOOK_TIMER(ptr_hook, last_exec)))) - return 0; - if (!infolist_new_var_buffer (ptr_item, "next_exec", - &(HOOK_TIMER(ptr_hook, next_exec)), - sizeof (HOOK_TIMER(ptr_hook, next_exec)))) - return 0; - } - break; - case HOOK_TYPE_FD: - if (!ptr_hook->deleted) - { - if (!infolist_new_var_pointer (ptr_item, "callback", HOOK_FD(ptr_hook, callback))) - return 0; - if (!infolist_new_var_integer (ptr_item, "fd", HOOK_FD(ptr_hook, fd))) - return 0; - if (!infolist_new_var_integer (ptr_item, "flags", HOOK_FD(ptr_hook, flags))) - return 0; - if (!infolist_new_var_integer (ptr_item, "error", HOOK_FD(ptr_hook, error))) - return 0; - } - break; - case HOOK_TYPE_PROCESS: - if (!ptr_hook->deleted) - { - if (!infolist_new_var_pointer (ptr_item, "callback", HOOK_PROCESS(ptr_hook, callback))) - return 0; - if (!infolist_new_var_string (ptr_item, "command", HOOK_PROCESS(ptr_hook, command))) - return 0; - if (!infolist_new_var_string (ptr_item, "options", hashtable_get_string (HOOK_PROCESS(ptr_hook, options), "keys_values"))) - return 0; - if (!infolist_new_var_integer (ptr_item, "timeout", HOOK_PROCESS(ptr_hook, timeout))) - return 0; - if (!infolist_new_var_integer (ptr_item, "child_read_stdout", HOOK_PROCESS(ptr_hook, child_read[HOOK_PROCESS_STDOUT]))) - return 0; - if (!infolist_new_var_integer (ptr_item, "child_write_stdout", HOOK_PROCESS(ptr_hook, child_write[HOOK_PROCESS_STDOUT]))) - return 0; - if (!infolist_new_var_integer (ptr_item, "child_read_stderr", HOOK_PROCESS(ptr_hook, child_read[HOOK_PROCESS_STDERR]))) - return 0; - if (!infolist_new_var_integer (ptr_item, "child_write_stderr", HOOK_PROCESS(ptr_hook, child_write[HOOK_PROCESS_STDERR]))) - return 0; - if (!infolist_new_var_integer (ptr_item, "child_pid", HOOK_PROCESS(ptr_hook, child_pid))) - return 0; - if (!infolist_new_var_pointer (ptr_item, "hook_fd_stdout", HOOK_PROCESS(ptr_hook, hook_fd[HOOK_PROCESS_STDOUT]))) - return 0; - if (!infolist_new_var_pointer (ptr_item, "hook_fd_stderr", HOOK_PROCESS(ptr_hook, hook_fd[HOOK_PROCESS_STDERR]))) - return 0; - if (!infolist_new_var_pointer (ptr_item, "hook_timer", HOOK_PROCESS(ptr_hook, hook_timer))) - return 0; - } - break; - case HOOK_TYPE_CONNECT: - if (!ptr_hook->deleted) - { - if (!infolist_new_var_pointer (ptr_item, "callback", HOOK_CONNECT(ptr_hook, callback))) - return 0; - if (!infolist_new_var_string (ptr_item, "address", HOOK_CONNECT(ptr_hook, address))) - return 0; - if (!infolist_new_var_integer (ptr_item, "port", HOOK_CONNECT(ptr_hook, port))) - return 0; - if (!infolist_new_var_integer (ptr_item, "sock", HOOK_CONNECT(ptr_hook, sock))) - return 0; - if (!infolist_new_var_integer (ptr_item, "ipv6", HOOK_CONNECT(ptr_hook, ipv6))) - return 0; - if (!infolist_new_var_integer (ptr_item, "retry", HOOK_CONNECT(ptr_hook, retry))) - return 0; -#ifdef HAVE_GNUTLS - if (!infolist_new_var_pointer (ptr_item, "gnutls_sess", HOOK_CONNECT(ptr_hook, gnutls_sess))) - return 0; - if (!infolist_new_var_pointer (ptr_item, "gnutls_cb", HOOK_CONNECT(ptr_hook, gnutls_cb))) - return 0; - if (!infolist_new_var_integer (ptr_item, "gnutls_dhkey_size", HOOK_CONNECT(ptr_hook, gnutls_dhkey_size))) - return 0; -#endif - if (!infolist_new_var_string (ptr_item, "local_hostname", HOOK_CONNECT(ptr_hook, local_hostname))) - return 0; - if (!infolist_new_var_integer (ptr_item, "child_read", HOOK_CONNECT(ptr_hook, child_read))) - return 0; - if (!infolist_new_var_integer (ptr_item, "child_write", HOOK_CONNECT(ptr_hook, child_write))) - return 0; - if (!infolist_new_var_integer (ptr_item, "child_recv", HOOK_CONNECT(ptr_hook, child_recv))) - return 0; - if (!infolist_new_var_integer (ptr_item, "child_send", HOOK_CONNECT(ptr_hook, child_send))) - return 0; - if (!infolist_new_var_integer (ptr_item, "child_pid", HOOK_CONNECT(ptr_hook, child_pid))) - return 0; - if (!infolist_new_var_pointer (ptr_item, "hook_child_timer", HOOK_CONNECT(ptr_hook, hook_child_timer))) - return 0; - if (!infolist_new_var_pointer (ptr_item, "hook_fd", HOOK_CONNECT(ptr_hook, hook_fd))) - return 0; - if (!infolist_new_var_pointer (ptr_item, "handshake_hook_fd", HOOK_CONNECT(ptr_hook, handshake_hook_fd))) - return 0; - if (!infolist_new_var_pointer (ptr_item, "handshake_hook_timer", HOOK_CONNECT(ptr_hook, handshake_hook_timer))) - return 0; - if (!infolist_new_var_integer (ptr_item, "handshake_fd_flags", HOOK_CONNECT(ptr_hook, handshake_fd_flags))) - return 0; - if (!infolist_new_var_string (ptr_item, "handshake_ip_address", HOOK_CONNECT(ptr_hook, handshake_ip_address))) - return 0; - } - break; - case HOOK_TYPE_PRINT: - if (!ptr_hook->deleted) - { - if (!infolist_new_var_pointer (ptr_item, "callback", HOOK_PRINT(ptr_hook, callback))) - return 0; - if (!infolist_new_var_pointer (ptr_item, "buffer", HOOK_PRINT(ptr_hook, buffer))) - return 0; - if (!infolist_new_var_integer (ptr_item, "tags_count", HOOK_PRINT(ptr_hook, tags_count))) - return 0; - if (!infolist_new_var_pointer (ptr_item, "tags_array", HOOK_PRINT(ptr_hook, tags_array))) - return 0; - if (!infolist_new_var_string (ptr_item, "message", HOOK_PRINT(ptr_hook, message))) - return 0; - if (!infolist_new_var_integer (ptr_item, "strip_colors", HOOK_PRINT(ptr_hook, strip_colors))) - return 0; - } - break; - case HOOK_TYPE_SIGNAL: - if (!ptr_hook->deleted) - { - if (!infolist_new_var_pointer (ptr_item, "callback", HOOK_SIGNAL(ptr_hook, callback))) - return 0; - if (!infolist_new_var_string (ptr_item, "signal", HOOK_SIGNAL(ptr_hook, signal))) - return 0; - } - break; - case HOOK_TYPE_HSIGNAL: - if (!ptr_hook->deleted) - { - if (!infolist_new_var_pointer (ptr_item, "callback", HOOK_HSIGNAL(ptr_hook, callback))) - return 0; - if (!infolist_new_var_string (ptr_item, "signal", HOOK_HSIGNAL(ptr_hook, signal))) - return 0; - } - break; - case HOOK_TYPE_CONFIG: - if (!ptr_hook->deleted) - { - if (!infolist_new_var_pointer (ptr_item, "callback", HOOK_CONFIG(ptr_hook, callback))) - return 0; - if (!infolist_new_var_string (ptr_item, "option", HOOK_CONFIG(ptr_hook, option))) - return 0; - } - break; - case HOOK_TYPE_COMPLETION: - if (!ptr_hook->deleted) - { - if (!infolist_new_var_pointer (ptr_item, "callback", HOOK_COMPLETION(ptr_hook, callback))) - return 0; - if (!infolist_new_var_string (ptr_item, "completion_item", HOOK_COMPLETION(ptr_hook, completion_item))) - return 0; - if (!infolist_new_var_string (ptr_item, "description", HOOK_COMPLETION(ptr_hook, description))) - return 0; - if (!infolist_new_var_string (ptr_item, "description_nls", - (HOOK_COMPLETION(ptr_hook, description) - && HOOK_COMPLETION(ptr_hook, description)[0]) ? - _(HOOK_COMPLETION(ptr_hook, description)) : "")) - return 0; - } - break; - case HOOK_TYPE_MODIFIER: - if (!ptr_hook->deleted) - { - if (!infolist_new_var_pointer (ptr_item, "callback", HOOK_MODIFIER(ptr_hook, callback))) - return 0; - if (!infolist_new_var_string (ptr_item, "modifier", HOOK_MODIFIER(ptr_hook, modifier))) - return 0; - } - break; - case HOOK_TYPE_INFO: - if (!ptr_hook->deleted) - { - if (!infolist_new_var_pointer (ptr_item, "callback", HOOK_INFO(ptr_hook, callback))) - return 0; - if (!infolist_new_var_string (ptr_item, "info_name", HOOK_INFO(ptr_hook, info_name))) - return 0; - if (!infolist_new_var_string (ptr_item, "description", HOOK_INFO(ptr_hook, description))) - return 0; - if (!infolist_new_var_string (ptr_item, "description_nls", - (HOOK_INFO(ptr_hook, description) - && HOOK_INFO(ptr_hook, description)[0]) ? - _(HOOK_INFO(ptr_hook, description)) : "")) - return 0; - if (!infolist_new_var_string (ptr_item, "args_description", HOOK_INFO(ptr_hook, args_description))) - return 0; - if (!infolist_new_var_string (ptr_item, "args_description_nls", - (HOOK_INFO(ptr_hook, args_description) - && HOOK_INFO(ptr_hook, args_description)[0]) ? - _(HOOK_INFO(ptr_hook, args_description)) : "")) - return 0; - } - break; - case HOOK_TYPE_INFO_HASHTABLE: - if (!ptr_hook->deleted) - { - if (!infolist_new_var_pointer (ptr_item, "callback", HOOK_INFO_HASHTABLE(ptr_hook, callback))) - return 0; - if (!infolist_new_var_string (ptr_item, "info_name", HOOK_INFO_HASHTABLE(ptr_hook, info_name))) - return 0; - if (!infolist_new_var_string (ptr_item, "description", HOOK_INFO_HASHTABLE(ptr_hook, description))) - return 0; - if (!infolist_new_var_string (ptr_item, "description_nls", - (HOOK_INFO_HASHTABLE(ptr_hook, description) - && HOOK_INFO_HASHTABLE(ptr_hook, description)[0]) ? - _(HOOK_INFO_HASHTABLE(ptr_hook, description)) : "")) - return 0; - if (!infolist_new_var_string (ptr_item, "args_description", HOOK_INFO_HASHTABLE(ptr_hook, args_description))) - return 0; - if (!infolist_new_var_string (ptr_item, "args_description_nls", - (HOOK_INFO_HASHTABLE(ptr_hook, args_description) - && HOOK_INFO_HASHTABLE(ptr_hook, args_description)[0]) ? - _(HOOK_INFO_HASHTABLE(ptr_hook, args_description)) : "")) - return 0; - if (!infolist_new_var_string (ptr_item, "output_description", HOOK_INFO_HASHTABLE(ptr_hook, output_description))) - return 0; - if (!infolist_new_var_string (ptr_item, "output_description_nls", - (HOOK_INFO_HASHTABLE(ptr_hook, output_description) - && HOOK_INFO_HASHTABLE(ptr_hook, output_description)[0]) ? - _(HOOK_INFO_HASHTABLE(ptr_hook, output_description)) : "")) - return 0; - } - break; - case HOOK_TYPE_INFOLIST: - if (!ptr_hook->deleted) - { - if (!infolist_new_var_pointer (ptr_item, "callback", HOOK_INFOLIST(ptr_hook, callback))) - return 0; - if (!infolist_new_var_string (ptr_item, "infolist_name", HOOK_INFOLIST(ptr_hook, infolist_name))) - return 0; - if (!infolist_new_var_string (ptr_item, "description", HOOK_INFOLIST(ptr_hook, description))) - return 0; - if (!infolist_new_var_string (ptr_item, "description_nls", - (HOOK_INFOLIST(ptr_hook, description) - && HOOK_INFOLIST(ptr_hook, description)[0]) ? - _(HOOK_INFOLIST(ptr_hook, description)) : "")) - return 0; - if (!infolist_new_var_string (ptr_item, "pointer_description", HOOK_INFOLIST(ptr_hook, pointer_description))) - return 0; - if (!infolist_new_var_string (ptr_item, "pointer_description_nls", - (HOOK_INFOLIST(ptr_hook, pointer_description) - && HOOK_INFOLIST(ptr_hook, pointer_description)[0]) ? - _(HOOK_INFOLIST(ptr_hook, pointer_description)) : "")) - return 0; - if (!infolist_new_var_string (ptr_item, "args_description", HOOK_INFOLIST(ptr_hook, args_description))) - return 0; - if (!infolist_new_var_string (ptr_item, "args_description_nls", - (HOOK_INFOLIST(ptr_hook, args_description) - && HOOK_INFOLIST(ptr_hook, args_description)[0]) ? - _(HOOK_INFOLIST(ptr_hook, args_description)) : "")) - return 0; - } - break; - case HOOK_TYPE_HDATA: - if (!ptr_hook->deleted) - { - if (!infolist_new_var_pointer (ptr_item, "callback", HOOK_HDATA(ptr_hook, callback))) - return 0; - if (!infolist_new_var_string (ptr_item, "hdata_name", HOOK_HDATA(ptr_hook, hdata_name))) - return 0; - if (!infolist_new_var_string (ptr_item, "description", HOOK_HDATA(ptr_hook, description))) - return 0; - if (!infolist_new_var_string (ptr_item, "description_nls", - (HOOK_HDATA(ptr_hook, description) - && HOOK_HDATA(ptr_hook, description)[0]) ? - _(HOOK_HDATA(ptr_hook, description)) : "")) - return 0; - } - break; - case HOOK_TYPE_FOCUS: - if (!ptr_hook->deleted) - { - if (!infolist_new_var_pointer (ptr_item, "callback", HOOK_FOCUS(ptr_hook, callback))) - return 0; - if (!infolist_new_var_string (ptr_item, "area", HOOK_FOCUS(ptr_hook, area))) - return 0; - } - break; - case HOOK_NUM_TYPES: - /* - * this constant is used to count types only, - * it is never used as type - */ - break; - } + hook_add_to_infolist_pointer (infolist, ptr_hook); } return 1; @@ -3880,7 +3897,8 @@ hook_add_to_infolist_type (struct t_infolist *infolist, int type, */ int -hook_add_to_infolist (struct t_infolist *infolist, const char *arguments) +hook_add_to_infolist (struct t_infolist *infolist, struct t_hook *pointer, + const char *arguments) { const char *pos_arguments; char *type; @@ -3889,6 +3907,9 @@ hook_add_to_infolist (struct t_infolist *infolist, const char *arguments) if (!infolist) return 0; + if (pointer) + return hook_add_to_infolist_pointer (infolist, pointer); + type = NULL; pos_arguments = NULL; diff --git a/src/core/wee-hook.h b/src/core/wee-hook.h index 4867286c7..2198e28e1 100644 --- a/src/core/wee-hook.h +++ b/src/core/wee-hook.h @@ -431,6 +431,7 @@ extern struct t_hook *last_weechat_hook[]; /* hook functions */ extern void hook_init (); +extern int hook_valid (struct t_hook *hook); extern struct t_hook *hook_command (struct t_weechat_plugin *plugin, const char *command, const char *description, @@ -592,6 +593,7 @@ extern void unhook (struct t_hook *hook); extern void unhook_all_plugin (struct t_weechat_plugin *plugin); extern void unhook_all (); extern int hook_add_to_infolist (struct t_infolist *infolist, + struct t_hook *hook, const char *arguments); extern void hook_print_log (); diff --git a/src/plugins/plugin-api.c b/src/plugins/plugin-api.c index ca9dd65a7..8406a4e41 100644 --- a/src/plugins/plugin-api.c +++ b/src/plugins/plugin-api.c @@ -665,10 +665,14 @@ plugin_api_infolist_get_internal (void *data, const char *infolist_name, } else if (string_strcasecmp (infolist_name, "hook") == 0) { + /* invalid hook pointer ? */ + if (pointer && !hook_valid (pointer)) + return NULL; + ptr_infolist = infolist_new (); if (ptr_infolist) { - if (!hook_add_to_infolist (ptr_infolist, arguments)) + if (!hook_add_to_infolist (ptr_infolist, pointer, arguments)) { infolist_free (ptr_infolist); return NULL; @@ -1154,7 +1158,7 @@ plugin_api_init () NULL, &plugin_api_infolist_get_internal, NULL); hook_infolist (NULL, "hook", N_("list of hooks"), - NULL, + N_("hook pointer (optional)"), N_("type,arguments (type is command/timer/.., arguments to " "get only some hooks (can start or end with \"*\" as " "wildcard), both are optional)"),