diff options
Diffstat (limited to 'src/plugins/scripts')
-rw-r--r-- | src/plugins/scripts/lua/weechat-lua-api.c | 125 | ||||
-rw-r--r-- | src/plugins/scripts/perl/weechat-perl-api.c | 78 | ||||
-rw-r--r-- | src/plugins/scripts/python/weechat-python-api.c | 74 | ||||
-rw-r--r-- | src/plugins/scripts/python/weechat-python.c | 17 | ||||
-rw-r--r-- | src/plugins/scripts/ruby/weechat-ruby-api.c | 91 | ||||
-rw-r--r-- | src/plugins/scripts/ruby/weechat-ruby.c | 26 | ||||
-rw-r--r-- | src/plugins/scripts/script-api.c | 9 | ||||
-rw-r--r-- | src/plugins/scripts/script-api.h | 6 |
8 files changed, 291 insertions, 135 deletions
diff --git a/src/plugins/scripts/lua/weechat-lua-api.c b/src/plugins/scripts/lua/weechat-lua-api.c index f996c847c..57800afa9 100644 --- a/src/plugins/scripts/lua/weechat-lua-api.c +++ b/src/plugins/scripts/lua/weechat-lua-api.c @@ -2208,22 +2208,27 @@ weechat_lua_api_hook_fd (lua_State *L) int weechat_lua_api_hook_print_cb (void *data, struct t_gui_buffer *buffer, - time_t date, char *prefix, char *message) + time_t date, int tags_count, char **tags, + char *prefix, char *message) { struct t_script_callback *script_callback; - char *lua_argv[5]; + char *lua_argv[6]; static char timebuffer[64]; int *rc, ret; + /* make C compiler happy */ + (void) tags_count; + script_callback = (struct t_script_callback *)data; snprintf (timebuffer, sizeof (timebuffer) - 1, "%ld", date); lua_argv[0] = script_ptr2str (buffer); lua_argv[1] = timebuffer; - lua_argv[2] = prefix; - lua_argv[3] = message; - lua_argv[4] = NULL; + lua_argv[2] = weechat_string_build_with_exploded (tags, ","); + lua_argv[3] = prefix; + lua_argv[4] = message; + lua_argv[5] = NULL; rc = (int *) weechat_lua_exec (script_callback->script, WEECHAT_SCRIPT_EXEC_INT, @@ -2237,6 +2242,10 @@ weechat_lua_api_hook_print_cb (void *data, struct t_gui_buffer *buffer, ret = *rc; free (rc); } + if (lua_argv[0]) + free (lua_argv[0]); + if (lua_argv[2]) + free (lua_argv[2]); return ret; } @@ -2248,7 +2257,7 @@ weechat_lua_api_hook_print_cb (void *data, struct t_gui_buffer *buffer, static int weechat_lua_api_hook_print (lua_State *L) { - const char *buffer, *message, *function; + const char *buffer, *tags, *message, *function; char *result; int n, strip_colors; @@ -2262,6 +2271,7 @@ weechat_lua_api_hook_print (lua_State *L) } buffer = NULL; + tags = NULL; message = NULL; strip_colors = 0; function = NULL; @@ -2274,7 +2284,8 @@ weechat_lua_api_hook_print (lua_State *L) LUA_RETURN_EMPTY; } - buffer = lua_tostring (lua_current_interpreter, -4); + buffer = lua_tostring (lua_current_interpreter, -5); + tags = lua_tostring (lua_current_interpreter, -4); message = lua_tostring (lua_current_interpreter, -3); strip_colors = lua_tonumber (lua_current_interpreter, -2); function = lua_tostring (lua_current_interpreter, -1); @@ -2282,6 +2293,7 @@ weechat_lua_api_hook_print (lua_State *L) result = script_ptr2str (script_api_hook_print (weechat_lua_plugin, lua_current_script, script_str2ptr ((char *)buffer), + (char *)tags, (char *)message, strip_colors, &weechat_lua_api_hook_print_cb, @@ -2979,11 +2991,11 @@ weechat_lua_api_buffer_close (lua_State *L) } /* - * weechat_lua_api_buffer_get: get a buffer property + * weechat_lua_api_buffer_get_string: get a buffer property as string */ static int -weechat_lua_api_buffer_get (lua_State *L) +weechat_lua_api_buffer_get_string (lua_State *L) { const char *buffer, *property; char *value; @@ -2994,7 +3006,7 @@ weechat_lua_api_buffer_get (lua_State *L) if (!lua_current_script) { - WEECHAT_SCRIPT_MSG_NOT_INITIALIZED("buffer_get"); + WEECHAT_SCRIPT_MSG_NOT_INITIALIZED("buffer_get_string"); LUA_RETURN_EMPTY; } @@ -3005,20 +3017,60 @@ weechat_lua_api_buffer_get (lua_State *L) if (n < 2) { - WEECHAT_SCRIPT_MSG_WRONG_ARGUMENTS("buffer_get"); + WEECHAT_SCRIPT_MSG_WRONG_ARGUMENTS("buffer_get_string"); LUA_RETURN_EMPTY; } buffer = lua_tostring (lua_current_interpreter, -2); property = lua_tostring (lua_current_interpreter, -1); - value = weechat_buffer_get (script_str2ptr ((char *)buffer), - (char *)property); + value = weechat_buffer_get_string (script_str2ptr ((char *)buffer), + (char *)property); LUA_RETURN_STRING(value); } /* + * weechat_lua_api_buffer_get_pointer: get a buffer property as pointer + */ + +static int +weechat_lua_api_buffer_get_pointer (lua_State *L) +{ + const char *buffer, *property; + char *value; + int n; + + /* make C compiler happy */ + (void) L; + + if (!lua_current_script) + { + WEECHAT_SCRIPT_MSG_NOT_INITIALIZED("buffer_get_pointer"); + LUA_RETURN_EMPTY; + } + + buffer = NULL; + property = NULL; + + n = lua_gettop (lua_current_interpreter); + + if (n < 2) + { + WEECHAT_SCRIPT_MSG_WRONG_ARGUMENTS("buffer_get_pointer"); + LUA_RETURN_EMPTY; + } + + buffer = lua_tostring (lua_current_interpreter, -2); + property = lua_tostring (lua_current_interpreter, -1); + + value = script_ptr2str (weechat_buffer_get_string (script_str2ptr ((char *)buffer), + (char *)property)); + + LUA_RETURN_STRING_FREE(value); +} + +/* * weechat_lua_api_buffer_set: set a buffer property */ @@ -4170,46 +4222,6 @@ weechat_lua_api_constant_weechat_rc_error (lua_State *L) } static int -weechat_lua_api_constant_weechat_rc_ok_ignore_weechat (lua_State *L) -{ - /* make C compiler happy */ - (void) L; - - lua_pushnumber (lua_current_interpreter, WEECHAT_RC_OK_IGNORE_WEECHAT); - return 1; -} - -static int -weechat_lua_api_constant_weechat_rc_ok_ignore_plugins (lua_State *L) -{ - /* make C compiler happy */ - (void) L; - - lua_pushnumber (lua_current_interpreter, WEECHAT_RC_OK_IGNORE_PLUGINS); - return 1; -} - -static int -weechat_lua_api_constant_weechat_rc_ok_ignore_all (lua_State *L) -{ - /* make C compiler happy */ - (void) L; - - lua_pushnumber (lua_current_interpreter, WEECHAT_RC_OK_IGNORE_ALL); - return 1; -} - -static int -weechat_lua_api_constant_weechat_rc_ok_with_highlight (lua_State *L) -{ - /* make C compiler happy */ - (void) L; - - lua_pushnumber (lua_current_interpreter, WEECHAT_RC_OK_WITH_HIGHLIGHT); - return 1; -} - -static int weechat_lua_api_constant_weechat_list_pos_sort (lua_State *L) { /* make C compiler happy */ @@ -4372,7 +4384,8 @@ const struct luaL_reg weechat_lua_api_funcs[] = { { "buffer_new", &weechat_lua_api_buffer_new }, { "buffer_search", &weechat_lua_api_buffer_search }, { "buffer_close", &weechat_lua_api_buffer_close }, - { "buffer_get", &weechat_lua_api_buffer_get }, + { "buffer_get_string", &weechat_lua_api_buffer_get_string }, + { "buffer_get_pointer", &weechat_lua_api_buffer_get_pointer }, { "buffer_set", &weechat_lua_api_buffer_set }, { "nicklist_add_group", &weechat_lua_api_nicklist_add_group }, { "nicklist_search_group", &weechat_lua_api_nicklist_search_group }, @@ -4403,10 +4416,6 @@ const struct luaL_reg weechat_lua_api_funcs[] = { /* define constants as function which returns values */ { "WEECHAT_RC_OK", &weechat_lua_api_constant_weechat_rc_ok }, { "WEECHAT_RC_ERROR", &weechat_lua_api_constant_weechat_rc_error }, - { "WEECHAT_RC_OK_IGNORE_WEECHAT", &weechat_lua_api_constant_weechat_rc_ok_ignore_weechat }, - { "WEECHAT_RC_OK_IGNORE_PLUGINS", &weechat_lua_api_constant_weechat_rc_ok_ignore_plugins }, - { "WEECHAT_RC_OK_IGNORE_ALL", &weechat_lua_api_constant_weechat_rc_ok_ignore_all }, - { "WEECHAT_RC_OK_WITH_HIGHLIGHT", &weechat_lua_api_constant_weechat_rc_ok_with_highlight }, { "WEECHAT_LIST_POS_SORT", &weechat_lua_api_constant_weechat_list_pos_sort }, { "WEECHAT_LIST_POS_BEGINNING", &weechat_lua_api_constant_weechat_list_pos_beginning }, { "WEECHAT_LIST_POS_END", &weechat_lua_api_constant_weechat_list_pos_end }, diff --git a/src/plugins/scripts/perl/weechat-perl-api.c b/src/plugins/scripts/perl/weechat-perl-api.c index 570e06d0c..9cce80803 100644 --- a/src/plugins/scripts/perl/weechat-perl-api.c +++ b/src/plugins/scripts/perl/weechat-perl-api.c @@ -1815,22 +1815,27 @@ static XS (XS_weechat_hook_fd) int weechat_perl_api_hook_print_cb (void *data, struct t_gui_buffer *buffer, - time_t date, char *prefix, char *message) + time_t date, int tags_count, char **tags, + char *prefix, char *message) { struct t_script_callback *script_callback; - char *perl_argv[5]; + char *perl_argv[6]; static char timebuffer[64]; int *rc, ret; + /* make C compiler happy */ + (void) tags_count; + script_callback = (struct t_script_callback *)data; snprintf (timebuffer, sizeof (timebuffer) - 1, "%ld", date); perl_argv[0] = script_ptr2str (buffer); perl_argv[1] = timebuffer; - perl_argv[2] = prefix; - perl_argv[3] = message; - perl_argv[4] = NULL; + perl_argv[2] = weechat_string_build_with_exploded (tags, ","); + perl_argv[3] = prefix; + perl_argv[4] = message; + perl_argv[5] = NULL; rc = (int *) weechat_perl_exec (script_callback->script, WEECHAT_SCRIPT_EXEC_INT, @@ -1846,6 +1851,8 @@ weechat_perl_api_hook_print_cb (void *data, struct t_gui_buffer *buffer, } if (perl_argv[0]) free (perl_argv[0]); + if (perl_argv[2]) + free (perl_argv[2]); return ret; } @@ -1856,7 +1863,7 @@ weechat_perl_api_hook_print_cb (void *data, struct t_gui_buffer *buffer, static XS (XS_weechat_hook_print) { - char *result, *buffer, *message, *function; + char *result, *buffer, *tags, *message, *function; dXSARGS; /* make C compiler happy */ @@ -1868,20 +1875,22 @@ static XS (XS_weechat_hook_print) PERL_RETURN_EMPTY; } - if (items < 4) + if (items < 5) { WEECHAT_SCRIPT_MSG_WRONG_ARGUMENTS("hook_print"); PERL_RETURN_EMPTY; } buffer = SvPV (ST (0), PL_na); - message = SvPV (ST (1), PL_na); - function = SvPV (ST (3), PL_na); + tags = SvPV (ST (1), PL_na); + message = SvPV (ST (2), PL_na); + function = SvPV (ST (4), PL_na); result = script_ptr2str (script_api_hook_print (weechat_perl_plugin, perl_current_script, script_str2ptr (buffer), + tags, message, - SvIV (ST (2)), /* strip_colors */ + SvIV (ST (3)), /* strip_colors */ &weechat_perl_api_hook_print_cb, function)); @@ -2492,10 +2501,10 @@ static XS (XS_weechat_buffer_close) } /* - * weechat::buffer_get: get a buffer property + * weechat::buffer_get_string: get a buffer property as string */ -static XS (XS_weechat_buffer_get) +static XS (XS_weechat_buffer_get_string) { char *value, *buffer, *property; dXSARGS; @@ -2505,24 +2514,56 @@ static XS (XS_weechat_buffer_get) if (!perl_current_script) { - WEECHAT_SCRIPT_MSG_NOT_INITIALIZED("buffer_get"); + WEECHAT_SCRIPT_MSG_NOT_INITIALIZED("buffer_get_string"); PERL_RETURN_EMPTY; } if (items < 2) { - WEECHAT_SCRIPT_MSG_WRONG_ARGUMENTS("buffer_get"); + WEECHAT_SCRIPT_MSG_WRONG_ARGUMENTS("buffer_get_string"); PERL_RETURN_EMPTY; } buffer = SvPV (ST (0), PL_na); property = SvPV (ST (1), PL_na); - value = weechat_buffer_get (script_str2ptr (buffer), property); + value = weechat_buffer_get_string (script_str2ptr (buffer), property); PERL_RETURN_STRING(value); } /* + * weechat::buffer_get_pointer: get a buffer property as pointer + */ + +static XS (XS_weechat_buffer_get_pointer) +{ + char *value, *buffer, *property; + dXSARGS; + + /* make C compiler happy */ + (void) cv; + + if (!perl_current_script) + { + WEECHAT_SCRIPT_MSG_NOT_INITIALIZED("buffer_get_pointer"); + PERL_RETURN_EMPTY; + } + + if (items < 2) + { + WEECHAT_SCRIPT_MSG_WRONG_ARGUMENTS("buffer_get_pointer"); + PERL_RETURN_EMPTY; + } + + buffer = SvPV (ST (0), PL_na); + property = SvPV (ST (1), PL_na); + value = script_ptr2str (weechat_buffer_get_pointer (script_str2ptr (buffer), + property)); + + PERL_RETURN_STRING_FREE(value); +} + +/* * weechat::buffer_set: set a buffer property */ @@ -3489,7 +3530,8 @@ weechat_perl_api_init (pTHX) newXS ("weechat::buffer_new", XS_weechat_buffer_new, "weechat"); newXS ("weechat::buffer_search", XS_weechat_buffer_search, "weechat"); newXS ("weechat::buffer_close", XS_weechat_buffer_close, "weechat"); - newXS ("weechat::buffer_get", XS_weechat_buffer_get, "weechat"); + newXS ("weechat::buffer_get_string", XS_weechat_buffer_get_string, "weechat"); + newXS ("weechat::buffer_get_pointer", XS_weechat_buffer_get_pointer, "weechat"); newXS ("weechat::buffer_set", XS_weechat_buffer_set, "weechat"); newXS ("weechat::nicklist_add_group", XS_weechat_nicklist_add_group, "weechat"); newXS ("weechat::nicklist_search_group", XS_weechat_nicklist_search_group, "weechat"); @@ -3522,10 +3564,6 @@ weechat_perl_api_init (pTHX) stash = gv_stashpv ("weechat", TRUE); newCONSTSUB (stash, "weechat::WEECHAT_RC_OK", newSViv (WEECHAT_RC_OK)); newCONSTSUB (stash, "weechat::WEECHAT_RC_ERROR", newSViv (WEECHAT_RC_ERROR)); - newCONSTSUB (stash, "weechat::WEECHAT_RC_OK_IGNORE_WEECHAT", newSViv (WEECHAT_RC_OK_IGNORE_WEECHAT)); - newCONSTSUB (stash, "weechat::WEECHAT_RC_OK_IGNORE_PLUGINS", newSViv (WEECHAT_RC_OK_IGNORE_PLUGINS)); - newCONSTSUB (stash, "weechat::WEECHAT_RC_OK_IGNORE_ALL", newSViv (WEECHAT_RC_OK_IGNORE_ALL)); - newCONSTSUB (stash, "weechat::WEECHAT_RC_OK_WITH_HIGHLIGHT", newSViv (WEECHAT_RC_OK_WITH_HIGHLIGHT)); newCONSTSUB (stash, "weechat::WEECHAT_LIST_POS_SORT", newSVpv (WEECHAT_LIST_POS_SORT, PL_na)); newCONSTSUB (stash, "weechat::WEECHAT_LIST_POS_BEGINNING", newSVpv (WEECHAT_LIST_POS_BEGINNING, PL_na)); newCONSTSUB (stash, "weechat::WEECHAT_LIST_POS_END", newSVpv (WEECHAT_LIST_POS_END, PL_na)); diff --git a/src/plugins/scripts/python/weechat-python-api.c b/src/plugins/scripts/python/weechat-python-api.c index 79092b528..20b80882a 100644 --- a/src/plugins/scripts/python/weechat-python-api.c +++ b/src/plugins/scripts/python/weechat-python-api.c @@ -1939,22 +1939,27 @@ weechat_python_api_hook_fd (PyObject *self, PyObject *args) int weechat_python_api_hook_print_cb (void *data, struct t_gui_buffer *buffer, - time_t date, char *prefix, char *message) + time_t date, int tags_count, char **tags, + char *prefix, char *message) { struct t_script_callback *script_callback; - char *python_argv[5]; + char *python_argv[6]; static char timebuffer[64]; int *rc, ret; + /* make C compiler happy */ + (void) tags_count; + script_callback = (struct t_script_callback *)data; snprintf (timebuffer, sizeof (timebuffer) - 1, "%ld", date); python_argv[0] = script_ptr2str (buffer); python_argv[1] = timebuffer; - python_argv[2] = prefix; - python_argv[3] = message; - python_argv[4] = NULL; + python_argv[2] = weechat_string_build_with_exploded (tags, ","); + python_argv[3] = prefix; + python_argv[4] = message; + python_argv[5] = NULL; rc = (int *) weechat_python_exec (script_callback->script, WEECHAT_SCRIPT_EXEC_INT, @@ -1970,6 +1975,8 @@ weechat_python_api_hook_print_cb (void *data, struct t_gui_buffer *buffer, } if (python_argv[0]) free (python_argv[0]); + if (python_argv[2]) + free (python_argv[2]); return ret; } @@ -1981,7 +1988,7 @@ weechat_python_api_hook_print_cb (void *data, struct t_gui_buffer *buffer, static PyObject * weechat_python_api_hook_print (PyObject *self, PyObject *args) { - char *buffer, *message, *function, *result; + char *buffer, *tags, *message, *function, *result; int strip_colors; PyObject *object; @@ -1995,12 +2002,13 @@ weechat_python_api_hook_print (PyObject *self, PyObject *args) } buffer = NULL; + tags = NULL; message = NULL; strip_colors = 0; function = NULL; - if (!PyArg_ParseTuple (args, "ssis", &buffer, &message, &strip_colors, - &function)) + if (!PyArg_ParseTuple (args, "sssis", &buffer, &tags, &message, + &strip_colors, &function)) { WEECHAT_SCRIPT_MSG_WRONG_ARGUMENTS("hook_print"); PYTHON_RETURN_EMPTY; @@ -2009,6 +2017,7 @@ weechat_python_api_hook_print (PyObject *self, PyObject *args) result = script_ptr2str(script_api_hook_print (weechat_python_plugin, python_current_script, script_str2ptr (buffer), + tags, message, strip_colors, &weechat_python_api_hook_print_cb, @@ -2146,7 +2155,7 @@ weechat_python_api_hook_signal_send (PyObject *self, PyObject *args) { error = NULL; number = (int)strtol (signal_data, &error, 10); - if (error && (error[0] == '\0')) + if (error && !error[0]) { weechat_hook_signal_send (signal, type_data, &number); } @@ -2645,11 +2654,11 @@ weechat_python_api_buffer_close (PyObject *self, PyObject *args) } /* - * weechat_python_api_buffer_get: get a buffer property + * weechat_python_api_buffer_get_string: get a buffer property as string */ static PyObject * -weechat_python_api_buffer_get (PyObject *self, PyObject *args) +weechat_python_api_buffer_get_string (PyObject *self, PyObject *args) { char *buffer, *property, *value; @@ -2658,7 +2667,7 @@ weechat_python_api_buffer_get (PyObject *self, PyObject *args) if (!python_current_script) { - WEECHAT_SCRIPT_MSG_NOT_INITIALIZED("buffer_get"); + WEECHAT_SCRIPT_MSG_NOT_INITIALIZED("buffer_get_string"); PYTHON_RETURN_ERROR; } @@ -2667,16 +2676,50 @@ weechat_python_api_buffer_get (PyObject *self, PyObject *args) if (!PyArg_ParseTuple (args, "ss", &buffer, &property)) { - WEECHAT_SCRIPT_MSG_WRONG_ARGUMENTS("buffer_get"); + WEECHAT_SCRIPT_MSG_WRONG_ARGUMENTS("buffer_get_string"); PYTHON_RETURN_EMPTY; } - value = weechat_buffer_get (script_str2ptr (buffer), property); + value = weechat_buffer_get_string (script_str2ptr (buffer), property); PYTHON_RETURN_STRING(value); } /* + * weechat_python_api_buffer_get_pointer: get a buffer property as pointer + */ + +static PyObject * +weechat_python_api_buffer_get_pointer (PyObject *self, PyObject *args) +{ + char *buffer, *property, *value; + PyObject *object; + + /* make C compiler happy */ + (void) self; + + if (!python_current_script) + { + WEECHAT_SCRIPT_MSG_NOT_INITIALIZED("buffer_get_pointer"); + PYTHON_RETURN_ERROR; + } + + buffer = NULL; + property = NULL; + + if (!PyArg_ParseTuple (args, "ss", &buffer, &property)) + { + WEECHAT_SCRIPT_MSG_WRONG_ARGUMENTS("buffer_get_pointer"); + PYTHON_RETURN_EMPTY; + } + + value = script_ptr2str (weechat_buffer_get_pointer (script_str2ptr (buffer), + property)); + + PYTHON_RETURN_STRING_FREE(value); +} + +/* * weechat_python_api_buffer_set: set a buffer property */ @@ -3710,7 +3753,8 @@ PyMethodDef weechat_python_funcs[] = { "buffer_new", &weechat_python_api_buffer_new, METH_VARARGS, "" }, { "buffer_search", &weechat_python_api_buffer_search, METH_VARARGS, "" }, { "buffer_close", &weechat_python_api_buffer_close, METH_VARARGS, "" }, - { "buffer_get", &weechat_python_api_buffer_get, METH_VARARGS, "" }, + { "buffer_get_string", &weechat_python_api_buffer_get_string, METH_VARARGS, "" }, + { "buffer_get_pointer", &weechat_python_api_buffer_get_pointer, METH_VARARGS, "" }, { "buffer_set", &weechat_python_api_buffer_set, METH_VARARGS, "" }, { "nicklist_add_group", &weechat_python_api_nicklist_add_group, METH_VARARGS, "" }, { "nicklist_search_group", &weechat_python_api_nicklist_search_group, METH_VARARGS, "" }, diff --git a/src/plugins/scripts/python/weechat-python.c b/src/plugins/scripts/python/weechat-python.c index 216a0c087..2deb39302 100644 --- a/src/plugins/scripts/python/weechat-python.c +++ b/src/plugins/scripts/python/weechat-python.c @@ -87,9 +87,16 @@ weechat_python_exec (struct t_plugin_script *script, { if (argv[4]) { - rc = PyObject_CallFunction (evFunc, "sssss", argv[0], - argv[1], argv[2], argv[3], - argv[4]); + if (argv[5]) + { + rc = PyObject_CallFunction (evFunc, "ssssss", argv[0], + argv[1], argv[2], argv[3], + argv[4], argv[5]); + } + else + rc = PyObject_CallFunction (evFunc, "sssss", argv[0], + argv[1], argv[2], argv[3], + argv[4]); } else rc = PyObject_CallFunction (evFunc, "ssss", argv[0], @@ -315,10 +322,6 @@ weechat_python_load (char *filename) weechat_dict = PyModule_GetDict(weechat_module); PyDict_SetItemString(weechat_dict, "WEECHAT_RC_OK", PyInt_FromLong((long) WEECHAT_RC_OK)); PyDict_SetItemString(weechat_dict, "WEECHAT_RC_ERROR", PyInt_FromLong((long) WEECHAT_RC_ERROR)); - PyDict_SetItemString(weechat_dict, "WEECHAT_RC_OK_IGNORE_WEECHAT", PyInt_FromLong((long) WEECHAT_RC_OK_IGNORE_WEECHAT)); - PyDict_SetItemString(weechat_dict, "WEECHAT_RC_OK_IGNORE_PLUGINS", PyInt_FromLong((long) WEECHAT_RC_OK_IGNORE_PLUGINS)); - PyDict_SetItemString(weechat_dict, "WEECHAT_RC_OK_IGNORE_ALL", PyInt_FromLong((long) WEECHAT_RC_OK_IGNORE_ALL)); - PyDict_SetItemString(weechat_dict, "WEECHAT_RC_OK_WITH_HIGHLIGHT", PyInt_FromLong((long) WEECHAT_RC_OK_WITH_HIGHLIGHT)); PyDict_SetItemString(weechat_dict, "WEECHAT_LIST_POS_SORT", PyString_FromString(WEECHAT_LIST_POS_SORT)); PyDict_SetItemString(weechat_dict, "WEECHAT_LIST_POS_BEGINNING", PyString_FromString(WEECHAT_LIST_POS_BEGINNING)); PyDict_SetItemString(weechat_dict, "WEECHAT_LIST_POS_END", PyString_FromString(WEECHAT_LIST_POS_END)); diff --git a/src/plugins/scripts/ruby/weechat-ruby-api.c b/src/plugins/scripts/ruby/weechat-ruby-api.c index 46c1c8db0..bc727e142 100644 --- a/src/plugins/scripts/ruby/weechat-ruby-api.c +++ b/src/plugins/scripts/ruby/weechat-ruby-api.c @@ -2244,22 +2244,27 @@ weechat_ruby_api_hook_fd (VALUE class, VALUE fd, VALUE read, VALUE write, int weechat_ruby_api_hook_print_cb (void *data, struct t_gui_buffer *buffer, - time_t date, char *prefix, char *message) + time_t date, int tags_count, char **tags, + char *prefix, char *message) { struct t_script_callback *script_callback; - char *ruby_argv[5]; + char *ruby_argv[6]; static char timebuffer[64]; int *rc, ret; + /* make C compiler happy */ + (void) tags_count; + script_callback = (struct t_script_callback *)data; - + snprintf (timebuffer, sizeof (timebuffer) - 1, "%ld", date); ruby_argv[0] = script_ptr2str (buffer); ruby_argv[1] = timebuffer; - ruby_argv[2] = prefix; - ruby_argv[3] = message; - ruby_argv[4] = NULL; + ruby_argv[2] = weechat_string_build_with_exploded (tags, ","); + ruby_argv[3] = prefix; + ruby_argv[4] = message; + ruby_argv[5] = NULL; rc = (int *) weechat_ruby_exec (script_callback->script, WEECHAT_SCRIPT_EXEC_INT, @@ -2275,6 +2280,8 @@ weechat_ruby_api_hook_print_cb (void *data, struct t_gui_buffer *buffer, } if (ruby_argv[0]) free (ruby_argv[0]); + if (ruby_argv[2]) + free (ruby_argv[2]); return ret; } @@ -2284,10 +2291,10 @@ weechat_ruby_api_hook_print_cb (void *data, struct t_gui_buffer *buffer, */ static VALUE -weechat_ruby_api_hook_print (VALUE class, VALUE buffer, VALUE message, - VALUE strip_colors, VALUE function) +weechat_ruby_api_hook_print (VALUE class, VALUE buffer, VALUE tags, + VALUE message, VALUE strip_colors, VALUE function) { - char *c_buffer, *c_message, *c_function, *result; + char *c_buffer, *c_tags, *c_message, *c_function, *result; int c_strip_colors; VALUE return_value; @@ -2301,23 +2308,26 @@ weechat_ruby_api_hook_print (VALUE class, VALUE buffer, VALUE message, } c_buffer = NULL; + c_tags = NULL; c_message = NULL; c_strip_colors = 0; c_function = NULL; - if (NIL_P (buffer) || NIL_P (message) || NIL_P (strip_colors) - || NIL_P (function)) + if (NIL_P (buffer) || NIL_P (tags) || NIL_P (message) + || NIL_P (strip_colors) || NIL_P (function)) { WEECHAT_SCRIPT_MSG_WRONG_ARGUMENTS("hook_print"); RUBY_RETURN_EMPTY; } Check_Type (buffer, T_STRING); + Check_Type (tags, T_STRING); Check_Type (message, T_STRING); Check_Type (strip_colors, T_FIXNUM); Check_Type (function, T_STRING); c_buffer = STR2CSTR (buffer); + c_tags = STR2CSTR (tags); c_message = STR2CSTR (message); c_strip_colors = FIX2INT (strip_colors); c_function = STR2CSTR (function); @@ -2325,6 +2335,7 @@ weechat_ruby_api_hook_print (VALUE class, VALUE buffer, VALUE message, result = script_ptr2str (script_api_hook_print (weechat_ruby_plugin, ruby_current_script, script_str2ptr (c_buffer), + c_tags, c_message, c_strip_colors, &weechat_ruby_api_hook_print_cb, @@ -3034,11 +3045,11 @@ weechat_ruby_api_buffer_close (VALUE class, VALUE buffer, } /* - * weechat_ruby_api_buffer_get: get a buffer property + * weechat_ruby_api_buffer_get_string: get a buffer property as string */ static VALUE -weechat_ruby_api_buffer_get (VALUE class, VALUE buffer, VALUE property) +weechat_ruby_api_buffer_get_string (VALUE class, VALUE buffer, VALUE property) { char *c_buffer, *c_property, *value; @@ -3047,13 +3058,13 @@ weechat_ruby_api_buffer_get (VALUE class, VALUE buffer, VALUE property) if (!ruby_current_script) { - WEECHAT_SCRIPT_MSG_NOT_INITIALIZED("buffer_get"); + WEECHAT_SCRIPT_MSG_NOT_INITIALIZED("buffer_get_string"); RUBY_RETURN_EMPTY; } if (NIL_P (buffer) || NIL_P (property)) { - WEECHAT_SCRIPT_MSG_WRONG_ARGUMENTS("buffer_get"); + WEECHAT_SCRIPT_MSG_WRONG_ARGUMENTS("buffer_get_string"); RUBY_RETURN_EMPTY; } @@ -3063,13 +3074,50 @@ weechat_ruby_api_buffer_get (VALUE class, VALUE buffer, VALUE property) c_buffer = STR2CSTR (buffer); c_property = STR2CSTR (property); - value = weechat_buffer_get (script_str2ptr (c_buffer), - c_property); + value = weechat_buffer_get_string (script_str2ptr (c_buffer), + c_property); RUBY_RETURN_STRING(value); } /* + * weechat_ruby_api_buffer_get_pointer: get a buffer property as pointer + */ + +static VALUE +weechat_ruby_api_buffer_get_pointer (VALUE class, VALUE buffer, VALUE property) +{ + char *c_buffer, *c_property, *value; + VALUE return_value; + + /* make C compiler happy */ + (void) class; + + if (!ruby_current_script) + { + WEECHAT_SCRIPT_MSG_NOT_INITIALIZED("buffer_get_pointer"); + RUBY_RETURN_EMPTY; + } + + if (NIL_P (buffer) || NIL_P (property)) + { + WEECHAT_SCRIPT_MSG_WRONG_ARGUMENTS("buffer_get_pointer"); + RUBY_RETURN_EMPTY; + } + + Check_Type (buffer, T_STRING); + Check_Type (property, T_STRING); + + c_buffer = STR2CSTR (buffer); + c_property = STR2CSTR (property); + + value = script_ptr2str (weechat_buffer_get_string (script_str2ptr (c_buffer), + c_property)); + + RUBY_RETURN_STRING_FREE(value); +} + +/* * weechat_ruby_api_buffer_set: set a buffer property */ @@ -4171,10 +4219,6 @@ weechat_ruby_api_init (VALUE ruby_mWeechat) { rb_define_const(ruby_mWeechat, "WEECHAT_RC_OK", INT2NUM(WEECHAT_RC_OK)); rb_define_const(ruby_mWeechat, "WEECHAT_RC_ERROR", INT2NUM(WEECHAT_RC_ERROR)); - rb_define_const(ruby_mWeechat, "WEECHAT_RC_OK_IGNORE_WEECHAT", INT2NUM(WEECHAT_RC_OK_IGNORE_WEECHAT)); - rb_define_const(ruby_mWeechat, "WEECHAT_RC_OK_IGNORE_PLUGINS", INT2NUM(WEECHAT_RC_OK_IGNORE_PLUGINS)); - rb_define_const(ruby_mWeechat, "WEECHAT_RC_OK_IGNORE_ALL", INT2NUM(WEECHAT_RC_OK_IGNORE_ALL)); - rb_define_const(ruby_mWeechat, "WEECHAT_RC_OK_WITH_HIGHLIGHT", INT2NUM(WEECHAT_RC_OK_WITH_HIGHLIGHT)); rb_define_const(ruby_mWeechat, "WEECHAT_LIST_POS_SORT", rb_str_new2(WEECHAT_LIST_POS_SORT)); rb_define_const(ruby_mWeechat, "WEECHAT_LIST_POS_BEGINNING", rb_str_new2(WEECHAT_LIST_POS_BEGINNING)); rb_define_const(ruby_mWeechat, "WEECHAT_LIST_POS_END", rb_str_new2(WEECHAT_LIST_POS_END)); @@ -4231,7 +4275,7 @@ weechat_ruby_api_init (VALUE ruby_mWeechat) rb_define_module_function (ruby_mWeechat, "hook_command", &weechat_ruby_api_hook_command, 6); rb_define_module_function (ruby_mWeechat, "hook_timer", &weechat_ruby_api_hook_timer, 4); rb_define_module_function (ruby_mWeechat, "hook_fd", &weechat_ruby_api_hook_fd, 5); - rb_define_module_function (ruby_mWeechat, "hook_print", &weechat_ruby_api_hook_print, 4); + rb_define_module_function (ruby_mWeechat, "hook_print", &weechat_ruby_api_hook_print, 5); rb_define_module_function (ruby_mWeechat, "hook_signal", &weechat_ruby_api_hook_signal, 2); rb_define_module_function (ruby_mWeechat, "hook_signal_send", &weechat_ruby_api_hook_signal_send, 3); rb_define_module_function (ruby_mWeechat, "hook_config", &weechat_ruby_api_hook_config, 3); @@ -4243,7 +4287,8 @@ weechat_ruby_api_init (VALUE ruby_mWeechat) rb_define_module_function (ruby_mWeechat, "buffer_new", &weechat_ruby_api_buffer_new, 4); rb_define_module_function (ruby_mWeechat, "buffer_search", &weechat_ruby_api_buffer_search, 2); rb_define_module_function (ruby_mWeechat, "buffer_close", &weechat_ruby_api_buffer_close, 1); - rb_define_module_function (ruby_mWeechat, "buffer_get", &weechat_ruby_api_buffer_get, 2); + rb_define_module_function (ruby_mWeechat, "buffer_get_string", &weechat_ruby_api_buffer_get_string, 2); + rb_define_module_function (ruby_mWeechat, "buffer_get_pointer", &weechat_ruby_api_buffer_get_pointer, 2); rb_define_module_function (ruby_mWeechat, "buffer_set", &weechat_ruby_api_buffer_set, 3); rb_define_module_function (ruby_mWeechat, "nicklist_add_group", &weechat_ruby_api_nicklist_add_group, 5); rb_define_module_function (ruby_mWeechat, "nicklist_search_group", &weechat_ruby_api_nicklist_search_group, 3); diff --git a/src/plugins/scripts/ruby/weechat-ruby.c b/src/plugins/scripts/ruby/weechat-ruby.c index b53f94dd0..d351ebadc 100644 --- a/src/plugins/scripts/ruby/weechat-ruby.c +++ b/src/plugins/scripts/ruby/weechat-ruby.c @@ -124,13 +124,25 @@ weechat_ruby_exec (struct t_plugin_script *script, { if (argv[4]) { - rc = rb_protect_funcall ((VALUE) script->interpreter, rb_intern(function), - &ruby_error, 5, - rb_str_new2(argv[0]), - rb_str_new2(argv[1]), - rb_str_new2(argv[2]), - rb_str_new2(argv[3]), - rb_str_new2(argv[4])); + if (argv[5]) + { + rc = rb_protect_funcall ((VALUE) script->interpreter, rb_intern(function), + &ruby_error, 6, + rb_str_new2(argv[0]), + rb_str_new2(argv[1]), + rb_str_new2(argv[2]), + rb_str_new2(argv[3]), + rb_str_new2(argv[4]), + rb_str_new2(argv[5])); + } + else + rc = rb_protect_funcall ((VALUE) script->interpreter, rb_intern(function), + &ruby_error, 5, + rb_str_new2(argv[0]), + rb_str_new2(argv[1]), + rb_str_new2(argv[2]), + rb_str_new2(argv[3]), + rb_str_new2(argv[4])); } else rc = rb_protect_funcall ((VALUE) script->interpreter, rb_intern(function), diff --git a/src/plugins/scripts/script-api.c b/src/plugins/scripts/script-api.c index 1230254df..7f8f42219 100644 --- a/src/plugins/scripts/script-api.c +++ b/src/plugins/scripts/script-api.c @@ -481,11 +481,12 @@ struct t_hook * script_api_hook_print (struct t_weechat_plugin *weechat_plugin, struct t_plugin_script *script, struct t_gui_buffer *buffer, - char *message, int strip_colors, + char *tags, char *message, int strip_colors, int (*callback)(void *data, struct t_gui_buffer *buffer, - time_t date, char *prefix, - char *message), + time_t date, + int tags_count, char **tags, + char *prefix, char *message), char *function) { struct t_script_callback *new_script_callback; @@ -495,7 +496,7 @@ script_api_hook_print (struct t_weechat_plugin *weechat_plugin, if (!new_script_callback) return NULL; - new_hook = weechat_hook_print (buffer, message, strip_colors, + new_hook = weechat_hook_print (buffer, tags, message, strip_colors, callback, new_script_callback); if (!new_hook) { diff --git a/src/plugins/scripts/script-api.h b/src/plugins/scripts/script-api.h index 2aa7bd085..50fa7254c 100644 --- a/src/plugins/scripts/script-api.h +++ b/src/plugins/scripts/script-api.h @@ -95,10 +95,14 @@ extern struct t_hook *script_api_hook_fd (struct t_weechat_plugin *weechat_plugi extern struct t_hook *script_api_hook_print (struct t_weechat_plugin *weechat_plugin, struct t_plugin_script *script, struct t_gui_buffer *buffer, - char *message, int strip_colors, + char *tags, + char *message, + int strip_colors, int (*callback)(void *data, struct t_gui_buffer *buffer, time_t date, + int tags_count, + char **tags, char *prefix, char *message), char *function); |