diff --git a/ChangeLog.asciidoc b/ChangeLog.asciidoc index e1d21c709..77cda3641 100644 --- a/ChangeLog.asciidoc +++ b/ChangeLog.asciidoc @@ -79,6 +79,8 @@ http://weechat.org/files/releasenotes/ReleaseNotes-devel.html[release notes] * core: add signals "key_combo_{default|search|cursor}" * core: display a warning in case of inconsistency between the options weechat.look.save_{config|layout}_on_exit +* api: change type of arguments displayed/highlight in hook_print callback from + string to integer (in scripts) * api: allow wildcard "*" inside the mask in function string_match * api: allow value "-1" for property "hotlist" in function buffer_set (to remove a buffer from hotlist) diff --git a/doc/en/weechat_plugin_api.en.txt b/doc/en/weechat_plugin_api.en.txt index 91932efe5..c28f3aa78 100644 --- a/doc/en/weechat_plugin_api.en.txt +++ b/doc/en/weechat_plugin_api.en.txt @@ -7551,6 +7551,8 @@ hook = weechat.hook_connect("", "my.server.org", 1234, 1, 0, "", ==== weechat_hook_print +_Updated in 0.4.3 and 1.0._ + Hook a message printed. Prototype: @@ -7606,6 +7608,12 @@ Return value: * pointer to new hook, NULL if error occurred +[IMPORTANT] +In scripts, with WeeChat ≥ 1.0, the callback arguments 'displayed' and +'highlight' are integers (with WeeChat ≤ 0.4.3, they were strings). + +To be compatible with all versions, it is recommended to convert the argument +to integer before testing it, for example in Python: "`if int(highlight):`". + C example: [source,C] @@ -7634,7 +7642,8 @@ hook = weechat.hook_print(buffer, tags, message, strip_colors, callback, callbac # example def my_print_cb(data, buffer, date, tags, displayed, highlight, prefix, message): - # ... + if int(highlight): + # ... return weechat.WEECHAT_RC_OK # catch all messages, on all buffers, without color diff --git a/doc/fr/weechat_plugin_api.fr.txt b/doc/fr/weechat_plugin_api.fr.txt index 338e5f15d..4dd6b7925 100644 --- a/doc/fr/weechat_plugin_api.fr.txt +++ b/doc/fr/weechat_plugin_api.fr.txt @@ -7683,6 +7683,8 @@ hook = weechat.hook_connect("", "my.server.org", 1234, 1, 0, "", ==== weechat_hook_print +_Mis à jour dans la 0.4.3 et 1.0._ + Intercepter un message affiché. Prototype : @@ -7741,6 +7743,13 @@ Valeur de retour : * pointeur vers le nouveau "hook", NULL en cas d'erreur +[IMPORTANT] +Dans les scripts, avec WeeChat ≥ 1.0, les paramètres du callback 'displayed' et +'highlight' sont des entiers (avec WeeChat ≤ 0.4.3, ils étaient des chaînes). + +Pour être compatible avec toutes les versions, il est recommandé de convertir +le paramètre en entier avant de le tester, par exemple en Python : +"`if int(highlight):`". + Exemple en C : [source,C] @@ -7769,7 +7778,8 @@ hook = weechat.hook_print(buffer, tags, message, strip_colors, callback, callbac # exemple def my_print_cb(data, buffer, date, tags, displayed, highlight, prefix, message): - # ... + if int(highlight): + # ... return weechat.WEECHAT_RC_OK # intercepter tous les messages, de tous les tampons, sans couleur diff --git a/doc/it/weechat_plugin_api.it.txt b/doc/it/weechat_plugin_api.it.txt index 2c9aaa0c4..9e8798678 100644 --- a/doc/it/weechat_plugin_api.it.txt +++ b/doc/it/weechat_plugin_api.it.txt @@ -7682,6 +7682,9 @@ hook = weechat.hook_connect("", "my.server.org", 1234, 1, 0, "", ==== weechat_hook_print +// TRANSLATION MISSING +_Updated in 0.4.3 and 1.0._ + Hook su un messaggio stampato. Prototipo: @@ -7741,6 +7744,13 @@ Valore restituito: * puntatore al nuovo hook, NULL in caso di errore +// TRANSLATION MISSING +[IMPORTANT] +In scripts, with WeeChat ≥ 1.0, the callback arguments 'displayed' and +'highlight' are integers (with WeeChat ≤ 0.4.3, they were strings). + +To be compatible with all versions, it is recommended to convert the argument +to integer before testing it, for example in Python: "`if int(highlight):`". + Esempio in C: [source,C] @@ -7769,7 +7779,8 @@ hook = weechat.hook_print(buffer, tags, message, strip_colors, callback, callbac # esempio def my_print_cb(data, buffer, date, tags, displayed, highlight, prefix, message): - # ... + if int(highlight): + # ... return weechat.WEECHAT_RC_OK # cattura tutti i messaggi, su tutti i buffer, senza colore diff --git a/doc/ja/weechat_plugin_api.ja.txt b/doc/ja/weechat_plugin_api.ja.txt index 0057a699d..5c2dfde67 100644 --- a/doc/ja/weechat_plugin_api.ja.txt +++ b/doc/ja/weechat_plugin_api.ja.txt @@ -7545,6 +7545,8 @@ hook = weechat.hook_connect("", "my.server.org", 1234, 1, 0, "", ==== weechat_hook_print +_Updated in 0.4.3 and 1.0_ + メッセージの表示をフックする。 プロトタイプ: @@ -7600,6 +7602,13 @@ struct t_hook *weechat_hook_print (struct t_gui_buffer *buffer, * 新しいフックへのポインタ、エラーが起きた場合は NULL +// TRANSLATION MISSING +[IMPORTANT] +In scripts, with WeeChat ≥ 1.0, the callback arguments 'displayed' and +'highlight' are integers (with WeeChat ≤ 0.4.3, they were strings). + +To be compatible with all versions, it is recommended to convert the argument +to integer before testing it, for example in Python: "`if int(highlight):`". + C 言語での使用例: [source,C] @@ -7628,7 +7637,8 @@ hook = weechat.hook_print(buffer, tags, message, strip_colors, callback, callbac # 例 def my_print_cb(data, buffer, date, tags, displayed, highlight, prefix, message): - # ... + if int(highlight): + # ... return weechat.WEECHAT_RC_OK # catch all messages, on all buffers, without color diff --git a/src/plugins/guile/weechat-guile-api.c b/src/plugins/guile/weechat-guile-api.c index 1a1220e0a..fa0536697 100644 --- a/src/plugins/guile/weechat-guile-api.c +++ b/src/plugins/guile/weechat-guile-api.c @@ -2300,15 +2300,15 @@ weechat_guile_api_hook_print_cb (void *data, struct t_gui_buffer *buffer, func_argv[3] = weechat_string_build_with_split_string (tags, ","); if (!func_argv[3]) func_argv[3] = strdup (""); - func_argv[4] = (displayed) ? strdup ("1") : strdup ("0"); - func_argv[5] = (highlight) ? strdup ("1") : strdup ("0"); + func_argv[4] = &displayed; + func_argv[5] = &highlight; func_argv[6] = (prefix) ? (char *)prefix : empty_arg; func_argv[7] = (message) ? (char *)message : empty_arg; rc = (int *) weechat_guile_exec (script_callback->script, WEECHAT_SCRIPT_EXEC_INT, script_callback->function, - "ssssssss", func_argv); + "ssssiiss", func_argv); if (!rc) ret = WEECHAT_RC_ERROR; @@ -2321,10 +2321,6 @@ weechat_guile_api_hook_print_cb (void *data, struct t_gui_buffer *buffer, free (func_argv[1]); if (func_argv[3]) free (func_argv[3]); - if (func_argv[4]) - free (func_argv[4]); - if (func_argv[5]) - free (func_argv[5]); return ret; } diff --git a/src/plugins/lua/weechat-lua-api.c b/src/plugins/lua/weechat-lua-api.c index d7f841c21..7e9d4b02c 100644 --- a/src/plugins/lua/weechat-lua-api.c +++ b/src/plugins/lua/weechat-lua-api.c @@ -2496,15 +2496,15 @@ weechat_lua_api_hook_print_cb (void *data, struct t_gui_buffer *buffer, func_argv[3] = weechat_string_build_with_split_string (tags, ","); if (!func_argv[3]) func_argv[3] = strdup (""); - func_argv[4] = (displayed) ? strdup ("1") : strdup ("0"); - func_argv[5] = (highlight) ? strdup ("1") : strdup ("0"); + func_argv[4] = &displayed; + func_argv[5] = &highlight; func_argv[6] = (prefix) ? (char *)prefix : empty_arg; func_argv[7] = (message) ? (char *)message : empty_arg; rc = (int *) weechat_lua_exec (script_callback->script, WEECHAT_SCRIPT_EXEC_INT, script_callback->function, - "ssssssss", func_argv); + "ssssiiss", func_argv); if (!rc) ret = WEECHAT_RC_ERROR; @@ -2517,10 +2517,6 @@ weechat_lua_api_hook_print_cb (void *data, struct t_gui_buffer *buffer, free (func_argv[1]); if (func_argv[3]) free (func_argv[3]); - if (func_argv[4]) - free (func_argv[4]); - if (func_argv[5]) - free (func_argv[5]); return ret; } diff --git a/src/plugins/perl/weechat-perl-api.c b/src/plugins/perl/weechat-perl-api.c index 6026cfd90..b6af4654d 100644 --- a/src/plugins/perl/weechat-perl-api.c +++ b/src/plugins/perl/weechat-perl-api.c @@ -2332,15 +2332,15 @@ weechat_perl_api_hook_print_cb (void *data, struct t_gui_buffer *buffer, func_argv[3] = weechat_string_build_with_split_string (tags, ","); if (!func_argv[3]) func_argv[3] = strdup (""); - func_argv[4] = (displayed) ? strdup ("1") : strdup ("0"); - func_argv[5] = (highlight) ? strdup ("1") : strdup ("0"); + func_argv[4] = &displayed; + func_argv[5] = &highlight; func_argv[6] = (prefix) ? (char *)prefix : empty_arg; func_argv[7] = (message) ? (char *)message : empty_arg; rc = (int *) weechat_perl_exec (script_callback->script, WEECHAT_SCRIPT_EXEC_INT, script_callback->function, - "ssssssss", func_argv); + "ssssiiss", func_argv); if (!rc) ret = WEECHAT_RC_ERROR; @@ -2353,10 +2353,6 @@ weechat_perl_api_hook_print_cb (void *data, struct t_gui_buffer *buffer, free (func_argv[1]); if (func_argv[3]) free (func_argv[3]); - if (func_argv[4]) - free (func_argv[4]); - if (func_argv[5]) - free (func_argv[5]); return ret; } diff --git a/src/plugins/python/weechat-python-api.c b/src/plugins/python/weechat-python-api.c index ee0dfa4be..c79196ad5 100644 --- a/src/plugins/python/weechat-python-api.c +++ b/src/plugins/python/weechat-python-api.c @@ -2438,15 +2438,15 @@ weechat_python_api_hook_print_cb (void *data, struct t_gui_buffer *buffer, func_argv[3] = weechat_string_build_with_split_string (tags, ","); if (!func_argv[3]) func_argv[3] = strdup (""); - func_argv[4] = (displayed) ? strdup ("1") : strdup ("0"); - func_argv[5] = (highlight) ? strdup ("1") : strdup ("0"); + func_argv[4] = PyLong_FromLong((long)displayed); + func_argv[5] = PyLong_FromLong((long)highlight); func_argv[6] = (prefix) ? (char *)prefix : empty_arg; func_argv[7] = (message) ? (char *)message : empty_arg; rc = (int *) weechat_python_exec (script_callback->script, WEECHAT_SCRIPT_EXEC_INT, script_callback->function, - "ssssssss", func_argv); + "ssssOOss", func_argv); if (!rc) ret = WEECHAT_RC_ERROR; @@ -2460,9 +2460,13 @@ weechat_python_api_hook_print_cb (void *data, struct t_gui_buffer *buffer, if (func_argv[3]) free (func_argv[3]); if (func_argv[4]) - free (func_argv[4]); + { + Py_XDECREF((PyObject *)func_argv[4]); + } if (func_argv[5]) - free (func_argv[5]); + { + Py_XDECREF((PyObject *)func_argv[5]); + } return ret; } diff --git a/src/plugins/ruby/weechat-ruby-api.c b/src/plugins/ruby/weechat-ruby-api.c index 6f4f332a7..752a17861 100644 --- a/src/plugins/ruby/weechat-ruby-api.c +++ b/src/plugins/ruby/weechat-ruby-api.c @@ -2848,15 +2848,15 @@ weechat_ruby_api_hook_print_cb (void *data, struct t_gui_buffer *buffer, func_argv[3] = weechat_string_build_with_split_string (tags, ","); if (!func_argv[3]) func_argv[3] = strdup (""); - func_argv[4] = (displayed) ? strdup ("1") : strdup ("0"); - func_argv[5] = (highlight) ? strdup ("1") : strdup ("0"); + func_argv[4] = &displayed; + func_argv[5] = &highlight; func_argv[6] = (prefix) ? (char *)prefix : empty_arg; func_argv[7] = (message) ? (char *)message : empty_arg; rc = (int *) weechat_ruby_exec (script_callback->script, WEECHAT_SCRIPT_EXEC_INT, script_callback->function, - "ssssssss", func_argv); + "ssssiiss", func_argv); if (!rc) ret = WEECHAT_RC_ERROR; @@ -2869,10 +2869,6 @@ weechat_ruby_api_hook_print_cb (void *data, struct t_gui_buffer *buffer, free (func_argv[1]); if (func_argv[3]) free (func_argv[3]); - if (func_argv[4]) - free (func_argv[4]); - if (func_argv[5]) - free (func_argv[5]); return ret; } diff --git a/src/plugins/tcl/weechat-tcl-api.c b/src/plugins/tcl/weechat-tcl-api.c index cf79da7f8..7ba8689e3 100644 --- a/src/plugins/tcl/weechat-tcl-api.c +++ b/src/plugins/tcl/weechat-tcl-api.c @@ -2764,15 +2764,15 @@ weechat_tcl_api_hook_print_cb (void *data, struct t_gui_buffer *buffer, func_argv[3] = weechat_string_build_with_split_string (tags, ","); if (!func_argv[3]) func_argv[3] = strdup (""); - func_argv[4] = (displayed) ? strdup ("1") : strdup ("0"); - func_argv[5] = (highlight) ? strdup ("1") : strdup ("0"); + func_argv[4] = &displayed; + func_argv[5] = &highlight; func_argv[6] = (prefix) ? (char *)prefix : empty_arg; func_argv[7] = (message) ? (char *)message : empty_arg; rc = (int *) weechat_tcl_exec (script_callback->script, WEECHAT_SCRIPT_EXEC_INT, script_callback->function, - "ssssssss", func_argv); + "ssssiiss", func_argv); if (!rc) ret = WEECHAT_RC_ERROR; @@ -2785,10 +2785,6 @@ weechat_tcl_api_hook_print_cb (void *data, struct t_gui_buffer *buffer, free (func_argv[1]); if (func_argv[3]) free (func_argv[3]); - if (func_argv[4]) - free (func_argv[4]); - if (func_argv[5]) - free (func_argv[5]); return ret; }