summaryrefslogtreecommitdiff
path: root/src/plugins/scripts
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/scripts')
-rw-r--r--src/plugins/scripts/lua/weechat-lua-api.c762
-rw-r--r--src/plugins/scripts/perl/weechat-perl-api.c605
-rw-r--r--src/plugins/scripts/python/weechat-python-api.c666
-rw-r--r--src/plugins/scripts/ruby/weechat-ruby-api.c722
-rw-r--r--src/plugins/scripts/script-api.c65
-rw-r--r--src/plugins/scripts/script-api.h11
-rw-r--r--src/plugins/scripts/script-callback.c7
-rw-r--r--src/plugins/scripts/script-callback.h3
-rw-r--r--src/plugins/scripts/script.c5
9 files changed, 2844 insertions, 2 deletions
diff --git a/src/plugins/scripts/lua/weechat-lua-api.c b/src/plugins/scripts/lua/weechat-lua-api.c
index 9c79fdfe0..58d390092 100644
--- a/src/plugins/scripts/lua/weechat-lua-api.c
+++ b/src/plugins/scripts/lua/weechat-lua-api.c
@@ -25,6 +25,7 @@
#include <lauxlib.h>
#include <stdlib.h>
#include <string.h>
+#include <time.h>
#include "../../weechat-plugin.h"
#include "../script.h"
@@ -203,6 +204,7 @@ weechat_lua_api_iconv_to_internal (lua_State *L)
string = lua_tostring (lua_current_interpreter, -1);
result = weechat_iconv_to_internal ((char *)charset, (char *)string);
+
LUA_RETURN_STRING_FREE(result);
}
@@ -242,6 +244,7 @@ weechat_lua_api_iconv_from_internal (lua_State *L)
string = lua_tostring (lua_current_interpreter, -1);
result = weechat_iconv_from_internal ((char *)charset, (char *)string);
+
LUA_RETURN_STRING_FREE(result);
}
@@ -278,6 +281,7 @@ weechat_lua_api_gettext (lua_State *L)
string = lua_tostring (lua_current_interpreter, -1);
result = weechat_gettext ((char *)string);
+
LUA_RETURN_STRING(result);
}
@@ -318,6 +322,7 @@ weechat_lua_api_ngettext (lua_State *L)
count = lua_tonumber (lua_current_interpreter, -1);
result = weechat_ngettext ((char *)single, (char *)plural, count);
+
LUA_RETURN_STRING(result);
}
@@ -418,6 +423,7 @@ weechat_lua_api_list_new (lua_State *L)
}
result = script_ptr2str (weechat_list_new ());
+
LUA_RETURN_STRING_FREE(result);
}
@@ -460,6 +466,7 @@ weechat_lua_api_list_add (lua_State *L)
result = script_ptr2str (weechat_list_add (script_str2ptr ((char *)weelist),
(char *)data,
(char *)where));
+
LUA_RETURN_STRING_FREE(result);
}
@@ -499,6 +506,7 @@ weechat_lua_api_list_search (lua_State *L)
result = script_ptr2str (weechat_list_search (script_str2ptr ((char *)weelist),
(char *)data));
+
LUA_RETURN_STRING_FREE(result);
}
@@ -538,6 +546,7 @@ weechat_lua_api_list_casesearch (lua_State *L)
result = script_ptr2str (weechat_list_casesearch (script_str2ptr ((char *)weelist),
(char *)data));
+
LUA_RETURN_STRING_FREE(result);
}
@@ -577,6 +586,7 @@ weechat_lua_api_list_get (lua_State *L)
result = script_ptr2str (weechat_list_get (script_str2ptr ((char *)weelist),
position));
+
LUA_RETURN_STRING_FREE(result);
}
@@ -652,6 +662,7 @@ weechat_lua_api_list_next (lua_State *L)
item = lua_tostring (lua_current_interpreter, -1);
result = script_ptr2str (weechat_list_next (script_str2ptr ((char *)item)));
+
LUA_RETURN_STRING_FREE(result);
}
@@ -688,6 +699,7 @@ weechat_lua_api_list_prev (lua_State *L)
item = lua_tostring (lua_current_interpreter, -1);
result = script_ptr2str (weechat_list_prev (script_str2ptr ((char *)item)));
+
LUA_RETURN_STRING_FREE(result);
}
@@ -724,6 +736,7 @@ weechat_lua_api_list_string (lua_State *L)
item = lua_tostring (lua_current_interpreter, -1);
result = weechat_list_string (script_str2ptr ((char *)item));
+
LUA_RETURN_STRING(result);
}
@@ -759,6 +772,7 @@ weechat_lua_api_list_size (lua_State *L)
weelist = lua_tostring (lua_current_interpreter, -1);
size = weechat_list_size (script_str2ptr ((char *)weelist));
+
LUA_RETURN_INT(size);
}
@@ -952,6 +966,7 @@ weechat_lua_api_config_new (lua_State *L)
(char *)filename,
&weechat_lua_api_config_reload_cb,
(char *)function));
+
LUA_RETURN_STRING_FREE(result);
}
@@ -1107,6 +1122,7 @@ weechat_lua_api_config_new_section (lua_State *L)
(char *)function_write,
&weechat_lua_api_config_section_write_cb,
(char *)function_write_default));
+
LUA_RETURN_STRING_FREE(result);
}
@@ -1146,6 +1162,7 @@ weechat_lua_api_config_search_section (lua_State *L)
result = script_ptr2str (weechat_config_search_section (script_str2ptr ((char *)config_file),
(char *)section_name));
+
LUA_RETURN_STRING_FREE(result);
}
@@ -1240,6 +1257,7 @@ weechat_lua_api_config_new_option (lua_State *L)
(char *)default_value,
&weechat_lua_api_config_option_change_cb,
(char *)function));
+
LUA_RETURN_STRING_FREE(result);
}
@@ -1282,6 +1300,7 @@ weechat_lua_api_config_search_option (lua_State *L)
result = script_ptr2str (weechat_config_search_option (script_str2ptr ((char *)config_file),
script_str2ptr ((char *)section),
(char *)option_name));
+
LUA_RETURN_STRING_FREE(result);
}
@@ -1317,6 +1336,7 @@ weechat_lua_api_config_string_to_boolean (lua_State *L)
text = lua_tostring (lua_current_interpreter, -1);
value = weechat_config_string_to_boolean ((char *)text);
+
LUA_RETURN_INT(value);
}
@@ -1358,6 +1378,7 @@ weechat_lua_api_config_option_set (lua_State *L)
rc = weechat_config_option_set (script_str2ptr ((char *)option),
(char *)new_value,
run_callback);
+
LUA_RETURN_INT(rc);
}
@@ -1393,6 +1414,7 @@ weechat_lua_api_config_boolean (lua_State *L)
option = lua_tostring (lua_current_interpreter, -1);
value = weechat_config_boolean (script_str2ptr ((char *)option));
+
LUA_RETURN_INT(value);
}
@@ -1428,6 +1450,7 @@ weechat_lua_api_config_integer (lua_State *L)
option = lua_tostring (lua_current_interpreter, -1);
value = weechat_config_integer (script_str2ptr ((char *)option));
+
LUA_RETURN_INT(value);
}
@@ -1464,6 +1487,7 @@ weechat_lua_api_config_string (lua_State *L)
option = lua_tostring (lua_current_interpreter, -1);
value = weechat_config_string (script_str2ptr ((char *)option));
+
LUA_RETURN_STRING(value);
}
@@ -1499,6 +1523,7 @@ weechat_lua_api_config_color (lua_State *L)
option = lua_tostring (lua_current_interpreter, -1);
value = weechat_config_color (script_str2ptr ((char *)option));
+
LUA_RETURN_INT(value);
}
@@ -1577,6 +1602,7 @@ weechat_lua_api_config_write (lua_State *L)
config_file = lua_tostring (lua_current_interpreter, -1);
rc = weechat_config_write (script_str2ptr ((char *)config_file));
+
LUA_RETURN_INT(rc);
}
@@ -1612,6 +1638,7 @@ weechat_lua_api_config_read (lua_State *L)
config_file = lua_tostring (lua_current_interpreter, -1);
rc = weechat_config_read (script_str2ptr ((char *)config_file));
+
LUA_RETURN_INT(rc);
}
@@ -1647,6 +1674,7 @@ weechat_lua_api_config_reload (lua_State *L)
config_file = lua_tostring (lua_current_interpreter, -1);
rc = weechat_config_reload (script_str2ptr ((char *)config_file));
+
LUA_RETURN_INT(rc);
}
@@ -1721,6 +1749,7 @@ weechat_lua_api_prefix (lua_State *L)
prefix = lua_tostring (lua_current_interpreter, -1);
result = weechat_prefix ((char *)prefix);
+
LUA_RETURN_STRING(result);
}
@@ -1757,6 +1786,7 @@ weechat_lua_api_color (lua_State *L)
color = lua_tostring (lua_current_interpreter, -1);
result = weechat_prefix ((char *)color);
+
LUA_RETURN_STRING(result);
}
@@ -2005,6 +2035,7 @@ weechat_lua_api_hook_command (lua_State *L)
(char *)completion,
&weechat_lua_api_hook_command_cb,
(char *)function));
+
LUA_RETURN_STRING_FREE(result);
}
@@ -2084,6 +2115,7 @@ weechat_lua_api_hook_timer (lua_State *L)
max_calls,
&weechat_lua_api_hook_timer_cb,
(char *)function));
+
LUA_RETURN_STRING_FREE(result);
}
@@ -2166,6 +2198,7 @@ weechat_lua_api_hook_fd (lua_State *L)
exception,
&weechat_lua_api_hook_fd_cb,
(char *)function));
+
LUA_RETURN_STRING_FREE(result);
}
@@ -2253,6 +2286,7 @@ weechat_lua_api_hook_print (lua_State *L)
strip_colors,
&weechat_lua_api_hook_print_cb,
(char *)function));
+
LUA_RETURN_STRING_FREE(result);
}
@@ -2347,6 +2381,7 @@ weechat_lua_api_hook_signal (lua_State *L)
(char *)signal,
&weechat_lua_api_hook_signal_cb,
(char *)function));
+
LUA_RETURN_STRING_FREE(result);
}
@@ -2486,6 +2521,7 @@ weechat_lua_api_hook_config (lua_State *L)
(char *)option,
&weechat_lua_api_hook_config_cb,
(char *)function));
+
LUA_RETURN_STRING_FREE(result);
}
@@ -2568,6 +2604,7 @@ weechat_lua_api_hook_completion (lua_State *L)
(char *)completion,
&weechat_lua_api_hook_completion_cb,
(char *)function));
+
LUA_RETURN_STRING_FREE(result);
}
@@ -2634,6 +2671,7 @@ weechat_lua_api_hook_modifier (lua_State *L)
(char *)modifier,
&weechat_lua_api_hook_modifier_cb,
(char *)function));
+
LUA_RETURN_STRING_FREE(result);
}
@@ -2676,6 +2714,7 @@ weechat_lua_api_hook_modifier_exec (lua_State *L)
result = weechat_hook_modifier_exec ((char *)modifier,
(char *)modifier_data,
(char *)string);
+
LUA_RETURN_STRING_FREE(result);
}
@@ -2854,6 +2893,7 @@ weechat_lua_api_buffer_new (lua_State *L)
(char *)function_input,
&weechat_lua_api_close_cb,
(char *)function_close));
+
LUA_RETURN_STRING_FREE(result);
}
@@ -2893,6 +2933,7 @@ weechat_lua_api_buffer_search (lua_State *L)
result = script_ptr2str (weechat_buffer_search ((char *)category,
(char *)name));
+
LUA_RETURN_STRING_FREE(result);
}
@@ -2973,6 +3014,7 @@ weechat_lua_api_buffer_get (lua_State *L)
value = weechat_buffer_get (script_str2ptr ((char *)buffer),
(char *)property);
+
LUA_RETURN_STRING(value);
}
@@ -3062,6 +3104,7 @@ weechat_lua_api_nicklist_add_group (lua_State *L)
(char *)name,
(char *)color,
visible));
+
LUA_RETURN_STRING_FREE(result);
}
@@ -3104,6 +3147,7 @@ weechat_lua_api_nicklist_search_group (lua_State *L)
result = script_ptr2str (weechat_nicklist_search_group (script_str2ptr ((char *)buffer),
script_str2ptr ((char *)from_group),
(char *)name));
+
LUA_RETURN_STRING_FREE(result);
}
@@ -3163,6 +3207,7 @@ weechat_lua_api_nicklist_add_nick (lua_State *L)
char_prefix,
(char *)prefix_color,
visible));
+
LUA_RETURN_STRING_FREE(result);
}
@@ -3205,6 +3250,7 @@ weechat_lua_api_nicklist_search_nick (lua_State *L)
result = script_ptr2str (weechat_nicklist_search_nick (script_str2ptr ((char *)buffer),
script_str2ptr ((char *)from_group),
(char *)name));
+
LUA_RETURN_STRING_FREE(result);
}
@@ -3323,6 +3369,356 @@ weechat_lua_api_nicklist_remove_all (lua_State *L)
}
/*
+ * weechat_lua_api_bar_item_search: search a bar item
+ */
+
+static int
+weechat_lua_api_bar_item_search (lua_State *L)
+{
+ const char *name;
+ char *result;
+ int n;
+
+ /* make C compiler happy */
+ (void) L;
+
+ if (!lua_current_script)
+ {
+ WEECHAT_SCRIPT_MSG_NOT_INITIALIZED("bar_item_search");
+ LUA_RETURN_EMPTY;
+ }
+
+ name = NULL;
+
+ n = lua_gettop (lua_current_interpreter);
+
+ if (n < 1)
+ {
+ WEECHAT_SCRIPT_MSG_WRONG_ARGUMENTS("bar_item_search");
+ LUA_RETURN_EMPTY;
+ }
+
+ name = lua_tostring (lua_current_interpreter, -1);
+
+ result = script_ptr2str (weechat_bar_item_search ((char *)name));
+
+ LUA_RETURN_STRING_FREE(result);
+}
+
+/*
+ * weechat_lua_api_bar_item_build_cb: callback for building bar item
+ */
+
+char *
+weechat_lua_api_bar_item_build_cb (void *data, struct t_gui_bar_item *item,
+ struct t_gui_window *window,
+ int max_width)
+{
+ struct t_script_callback *script_callback;
+ char *lua_argv[4], *ret;
+ static char buf[32];
+
+ script_callback = (struct t_script_callback *)data;
+
+ snprintf (buf, sizeof (buf) - 1, "%d", max_width);
+
+ lua_argv[0] = script_ptr2str (item);
+ lua_argv[1] = script_ptr2str (window);
+ lua_argv[2] = buf;
+ lua_argv[3] = NULL;
+
+ ret = (char *)weechat_lua_exec (script_callback->script,
+ WEECHAT_SCRIPT_EXEC_STRING,
+ script_callback->function,
+ lua_argv);
+
+ if (lua_argv[0])
+ free (lua_argv[0]);
+ if (lua_argv[1])
+ free (lua_argv[1]);
+
+ return ret;
+}
+
+/*
+ * weechat_lua_api_bar_item_new: add a new bar item
+ */
+
+static int
+weechat_lua_api_bar_item_new (lua_State *L)
+{
+ const char *name, *function;
+ char *result;
+ int n;
+
+ /* make C compiler happy */
+ (void) L;
+
+ if (!lua_current_script)
+ {
+ WEECHAT_SCRIPT_MSG_NOT_INITIALIZED("bar_item_new");
+ LUA_RETURN_EMPTY;
+ }
+
+ name = NULL;
+ function = NULL;
+
+ n = lua_gettop (lua_current_interpreter);
+
+ if (n < 2)
+ {
+ WEECHAT_SCRIPT_MSG_WRONG_ARGUMENTS("bar_item_new");
+ LUA_RETURN_EMPTY;
+ }
+
+ name = lua_tostring (lua_current_interpreter, -2);
+ function = lua_tostring (lua_current_interpreter, -1);
+
+ result = script_ptr2str (script_api_bar_item_new (weechat_lua_plugin,
+ lua_current_script,
+ (char *)name,
+ &weechat_lua_api_bar_item_build_cb,
+ (char *)function));
+
+ LUA_RETURN_STRING_FREE(result);
+}
+
+/*
+ * weechat_lua_api_bar_item_update: update a bar item on screen
+ */
+
+static int
+weechat_lua_api_bar_item_update (lua_State *L)
+{
+ const char *name;
+ int n;
+
+ /* make C compiler happy */
+ (void) L;
+
+ if (!lua_current_script)
+ {
+ WEECHAT_SCRIPT_MSG_NOT_INITIALIZED("bar_item_update");
+ LUA_RETURN_ERROR;
+ }
+
+ name = NULL;
+
+ n = lua_gettop (lua_current_interpreter);
+
+ if (n < 1)
+ {
+ WEECHAT_SCRIPT_MSG_WRONG_ARGUMENTS("bar_item_update");
+ LUA_RETURN_ERROR;
+ }
+
+ name = lua_tostring (lua_current_interpreter, -1);
+
+ weechat_bar_item_update ((char *)name);
+
+ LUA_RETURN_OK;
+}
+
+/*
+ * weechat_lua_api_bar_item_remove: remove a bar item
+ */
+
+static int
+weechat_lua_api_bar_item_remove (lua_State *L)
+{
+ const char *item;
+ int n;
+
+ /* make C compiler happy */
+ (void) L;
+
+ if (!lua_current_script)
+ {
+ WEECHAT_SCRIPT_MSG_NOT_INITIALIZED("bar_item_remove");
+ LUA_RETURN_ERROR;
+ }
+
+ item = NULL;
+
+ n = lua_gettop (lua_current_interpreter);
+
+ if (n < 1)
+ {
+ WEECHAT_SCRIPT_MSG_WRONG_ARGUMENTS("bar_item_remove");
+ LUA_RETURN_ERROR;
+ }
+
+ item = lua_tostring (lua_current_interpreter, -1);
+
+ script_api_bar_item_remove (weechat_lua_plugin,
+ lua_current_script,
+ script_str2ptr ((char *)item));
+
+ LUA_RETURN_OK;
+}
+
+/*
+ * weechat_lua_api_bar_search: search a bar
+ */
+
+static int
+weechat_lua_api_bar_search (lua_State *L)
+{
+ const char *name;
+ char *result;
+ int n;
+
+ /* make C compiler happy */
+ (void) L;
+
+ if (!lua_current_script)
+ {
+ WEECHAT_SCRIPT_MSG_NOT_INITIALIZED("bar_search");
+ LUA_RETURN_EMPTY;
+ }
+
+ name = NULL;
+
+ n = lua_gettop (lua_current_interpreter);
+
+ if (n < 1)
+ {
+ WEECHAT_SCRIPT_MSG_WRONG_ARGUMENTS("bar_search");
+ LUA_RETURN_EMPTY;
+ }
+
+ name = lua_tostring (lua_current_interpreter, -1);
+
+ result = script_ptr2str (weechat_bar_search ((char *)name));
+
+ LUA_RETURN_STRING_FREE(result);
+}
+
+/*
+ * weechat_lua_api_bar_new: add a new bar
+ */
+
+static int
+weechat_lua_api_bar_new (lua_State *L)
+{
+ const char *name, *type, *position, *items;
+ char *result;
+ int n, size, separator;
+
+ /* make C compiler happy */
+ (void) L;
+
+ if (!lua_current_script)
+ {
+ WEECHAT_SCRIPT_MSG_NOT_INITIALIZED("bar_new");
+ LUA_RETURN_EMPTY;
+ }
+
+ name = NULL;
+ type = NULL;
+ position = NULL;
+ size = 0;
+ separator = 0;
+ items = NULL;
+
+ n = lua_gettop (lua_current_interpreter);
+
+ if (n < 6)
+ {
+ WEECHAT_SCRIPT_MSG_WRONG_ARGUMENTS("bar_new");
+ LUA_RETURN_EMPTY;
+ }
+
+ name = lua_tostring (lua_current_interpreter, -6);
+ type = lua_tostring (lua_current_interpreter, -5);
+ position = lua_tostring (lua_current_interpreter, -4);
+ size = lua_tonumber (lua_current_interpreter, -3);
+ separator = lua_tonumber (lua_current_interpreter, -2);
+ items = lua_tostring (lua_current_interpreter, -1);
+
+ result = script_ptr2str (weechat_bar_new ((char *)name,
+ (char *)type,
+ (char *)position,
+ size,
+ separator,
+ (char *)items));
+
+ LUA_RETURN_STRING_FREE(result);
+}
+
+/*
+ * weechat_lua_api_bar_update: update a bar on screen
+ */
+
+static int
+weechat_lua_api_bar_update (lua_State *L)
+{
+ const char *name;
+ int n;
+
+ /* make C compiler happy */
+ (void) L;
+
+ if (!lua_current_script)
+ {
+ WEECHAT_SCRIPT_MSG_NOT_INITIALIZED("bar_update");
+ LUA_RETURN_ERROR;
+ }
+
+ name = NULL;
+
+ n = lua_gettop (lua_current_interpreter);
+
+ if (n < 1)
+ {
+ WEECHAT_SCRIPT_MSG_WRONG_ARGUMENTS("bar_update");
+ LUA_RETURN_ERROR;
+ }
+
+ name = lua_tostring (lua_current_interpreter, -1);
+
+ weechat_bar_update ((char *)name);
+
+ LUA_RETURN_OK;
+}
+
+/*
+ * weechat_lua_api_bar_remove: remove a bar
+ */
+
+static int
+weechat_lua_api_bar_remove (lua_State *L)
+{
+ const char *bar;
+ int n;
+
+ /* make C compiler happy */
+ (void) L;
+
+ if (!lua_current_script)
+ {
+ WEECHAT_SCRIPT_MSG_NOT_INITIALIZED("bar_remove");
+ LUA_RETURN_ERROR;
+ }
+
+ bar = NULL;
+
+ n = lua_gettop (lua_current_interpreter);
+
+ if (n < 1)
+ {
+ WEECHAT_SCRIPT_MSG_WRONG_ARGUMENTS("bar_remove");
+ LUA_RETURN_ERROR;
+ }
+
+ bar = lua_tostring (lua_current_interpreter, -1);
+
+ weechat_bar_remove (script_str2ptr ((char *)bar));
+
+ LUA_RETURN_OK;
+}
+
+/*
* weechat_lua_api_command: send command to server
*/
@@ -3341,6 +3737,7 @@ weechat_lua_api_command (lua_State *L)
LUA_RETURN_ERROR;
}
+ buffer = NULL;
command = NULL;
n = lua_gettop (lua_current_interpreter);
@@ -3395,10 +3792,358 @@ weechat_lua_api_info_get (lua_State *L)
info = lua_tostring (lua_current_interpreter, -1);
value = weechat_info_get ((char *)info);
+
LUA_RETURN_STRING(value);
}
/*
+ * weechat_lua_api_infolist_get: get list with infos
+ */
+
+static int
+weechat_lua_api_infolist_get (lua_State *L)
+{
+ const char *name, *pointer;
+ char *value;
+ int n;
+
+ /* make C compiler happy */
+ (void) L;
+
+ if (!lua_current_script)
+ {
+ WEECHAT_SCRIPT_MSG_NOT_INITIALIZED("infolist_get");
+ LUA_RETURN_EMPTY;
+ }
+
+ name = NULL;
+ pointer = NULL;
+
+ n = lua_gettop (lua_current_interpreter);
+
+ if (n < 2)
+ {
+ WEECHAT_SCRIPT_MSG_WRONG_ARGUMENTS("infolist_get");
+ LUA_RETURN_EMPTY;
+ }
+
+ name = lua_tostring (lua_current_interpreter, -2);
+ pointer = lua_tostring (lua_current_interpreter, -1);
+
+ value = script_ptr2str (weechat_infolist_get ((char *)name,
+ script_str2ptr ((char *)pointer)));
+
+ LUA_RETURN_STRING_FREE(value);
+}
+
+/*
+ * weechat_lua_api_infolist_next: move item pointer to next item in infolist
+ */
+
+static int
+weechat_lua_api_infolist_next (lua_State *L)
+{
+ const char *infolist;
+ int n, value;
+
+ /* make C compiler happy */
+ (void) L;
+
+ if (!lua_current_script)
+ {
+ WEECHAT_SCRIPT_MSG_NOT_INITIALIZED("infolist_next");
+ LUA_RETURN_INT(0);
+ }
+
+ infolist = NULL;
+
+ n = lua_gettop (lua_current_interpreter);
+
+ if (n < 1)
+ {
+ WEECHAT_SCRIPT_MSG_WRONG_ARGUMENTS("infolist_next");
+ LUA_RETURN_INT(0);
+ }
+
+ infolist = lua_tostring (lua_current_interpreter, -1);
+
+ value = weechat_infolist_next (script_str2ptr ((char *)infolist));
+
+ LUA_RETURN_INT(value);
+}
+
+/*
+ * weechat_lua_api_infolist_prev: move item pointer to previous item in infolist
+ */
+
+static int
+weechat_lua_api_infolist_prev (lua_State *L)
+{
+ const char *infolist;
+ int n, value;
+
+ /* make C compiler happy */
+ (void) L;
+
+ if (!lua_current_script)
+ {
+ WEECHAT_SCRIPT_MSG_NOT_INITIALIZED("infolist_prev");
+ LUA_RETURN_INT(0);
+ }
+
+ infolist = NULL;
+
+ n = lua_gettop (lua_current_interpreter);
+
+ if (n < 1)
+ {
+ WEECHAT_SCRIPT_MSG_WRONG_ARGUMENTS("infolist_prev");
+ LUA_RETURN_INT(0);
+ }
+
+ infolist = lua_tostring (lua_current_interpreter, -1);
+
+ value = weechat_infolist_prev (script_str2ptr ((char *)infolist));
+
+ LUA_RETURN_INT(value);
+}
+
+/*
+ * weechat_lua_api_infolist_fields: get list of fields for current item of infolist
+ */
+
+static int
+weechat_lua_api_infolist_fields (lua_State *L)
+{
+ const char *infolist;
+ char *value;
+ int n;
+
+ /* make C compiler happy */
+ (void) L;
+
+ if (!lua_current_script)
+ {
+ WEECHAT_SCRIPT_MSG_NOT_INITIALIZED("infolist_fields");
+ LUA_RETURN_EMPTY;
+ }
+
+ infolist = NULL;
+
+ n = lua_gettop (lua_current_interpreter);
+
+ if (n < 1)
+ {
+ WEECHAT_SCRIPT_MSG_WRONG_ARGUMENTS("infolist_fields");
+ LUA_RETURN_EMPTY;
+ }
+
+ infolist = lua_tostring (lua_current_interpreter, -1);
+
+ value = weechat_infolist_fields (script_str2ptr ((char *)infolist));
+
+ LUA_RETURN_STRING(value);
+}
+
+/*
+ * weechat_lua_api_infolist_integer: get integer value of a variable in infolist
+ */
+
+static int
+weechat_lua_api_infolist_integer (lua_State *L)
+{
+ const char *infolist, *variable;
+ int n, value;
+
+ /* make C compiler happy */
+ (void) L;
+
+ if (!lua_current_script)
+ {
+ WEECHAT_SCRIPT_MSG_NOT_INITIALIZED("infolist_integer");
+ LUA_RETURN_INT(0);
+ }
+
+ infolist = NULL;
+ variable = NULL;
+
+ n = lua_gettop (lua_current_interpreter);
+
+ if (n < 2)
+ {
+ WEECHAT_SCRIPT_MSG_WRONG_ARGUMENTS("infolist_integer");
+ LUA_RETURN_INT(0);
+ }
+
+ infolist = lua_tostring (lua_current_interpreter, -2);
+ variable = lua_tostring (lua_current_interpreter, -1);
+
+ value = weechat_infolist_integer (script_str2ptr ((char *)infolist),
+ (char *)variable);
+
+ LUA_RETURN_INT(value);
+}
+
+/*
+ * weechat_lua_api_infolist_string: get string value of a variable in infolist
+ */
+
+static int
+weechat_lua_api_infolist_string (lua_State *L)
+{
+ const char *infolist, *variable;
+ char *value;
+ int n;
+
+ /* make C compiler happy */
+ (void) L;
+
+ if (!lua_current_script)
+ {
+ WEECHAT_SCRIPT_MSG_NOT_INITIALIZED("infolist_string");
+ LUA_RETURN_EMPTY;
+ }
+
+ infolist = NULL;
+ variable = NULL;
+
+ n = lua_gettop (lua_current_interpreter);
+
+ if (n < 2)
+ {
+ WEECHAT_SCRIPT_MSG_WRONG_ARGUMENTS("infolist_string");
+ LUA_RETURN_EMPTY;
+ }
+
+ infolist = lua_tostring (lua_current_interpreter, -2);
+ variable = lua_tostring (lua_current_interpreter, -1);
+
+ value = weechat_infolist_string (script_str2ptr ((char *)infolist),
+ (char *)variable);
+
+ LUA_RETURN_STRING(value);
+}
+
+/*
+ * weechat_lua_api_infolist_pointer: get pointer value of a variable in infolist
+ */
+
+static int
+weechat_lua_api_infolist_pointer (lua_State *L)
+{
+ const char *infolist, *variable;
+ char *value;
+ int n;
+
+ /* make C compiler happy */
+ (void) L;
+
+ if (!lua_current_script)
+ {
+ WEECHAT_SCRIPT_MSG_NOT_INITIALIZED("infolist_pointer");
+ LUA_RETURN_EMPTY;
+ }
+
+ infolist = NULL;
+ variable = NULL;
+
+ n = lua_gettop (lua_current_interpreter);
+
+ if (n < 2)
+ {
+ WEECHAT_SCRIPT_MSG_WRONG_ARGUMENTS("infolist_pointer");
+ LUA_RETURN_EMPTY;
+ }
+
+ infolist = lua_tostring (lua_current_interpreter, -2);
+ variable = lua_tostring (lua_current_interpreter, -1);
+
+ value = script_ptr2str (weechat_infolist_pointer (script_str2ptr ((char *)infolist),
+ (char *)variable));
+
+ LUA_RETURN_STRING_FREE(value);
+}
+
+/*
+ * weechat_lua_api_infolist_time: get time value of a variable in infolist
+ */
+
+static int
+weechat_lua_api_infolist_time (lua_State *L)
+{
+ const char *infolist, *variable;
+ time_t time;
+ char timebuffer[64], *value;
+ int n;
+
+ /* make C compiler happy */
+ (void) L;
+
+ if (!lua_current_script)
+ {
+ WEECHAT_SCRIPT_MSG_NOT_INITIALIZED("infolist_time");
+ LUA_RETURN_EMPTY;
+ }
+
+ infolist = NULL;
+ variable = NULL;
+
+ n = lua_gettop (lua_current_interpreter);
+
+ if (n < 2)
+ {
+ WEECHAT_SCRIPT_MSG_WRONG_ARGUMENTS("infolist_time");
+ LUA_RETURN_EMPTY;
+ }
+
+ infolist = lua_tostring (lua_current_interpreter, -2);
+ variable = lua_tostring (lua_current_interpreter, -1);
+
+ time = weechat_infolist_time (script_str2ptr ((char *)infolist),
+ (char *)variable);
+ strftime (timebuffer, sizeof (timebuffer), "%F %T", localtime (&time));
+ value = strdup (timebuffer);
+
+ LUA_RETURN_STRING_FREE(value);
+}
+
+/*
+ * weechat_lua_api_infolist_free: free infolist
+ */
+
+static int
+weechat_lua_api_infolist_free (lua_State *L)
+{
+ const char *infolist;
+ int n;
+
+ /* make C compiler happy */
+ (void) L;
+
+ if (!lua_current_script)
+ {
+ WEECHAT_SCRIPT_MSG_NOT_INITIALIZED("infolist_free");
+ LUA_RETURN_ERROR;
+ }
+
+ infolist = NULL;
+
+ n = lua_gettop (lua_current_interpreter);
+
+ if (n < 1)
+ {
+ WEECHAT_SCRIPT_MSG_WRONG_ARGUMENTS("infolist_free");
+ LUA_RETURN_ERROR;
+ }
+
+ infolist = lua_tostring (lua_current_interpreter, -1);
+
+ weechat_infolist_free (script_str2ptr ((char *)infolist));
+
+ LUA_RETURN_OK;
+}
+
+/*
* Lua constant as functions
*/
@@ -3634,8 +4379,25 @@ const struct luaL_reg weechat_lua_api_funcs[] = {
{ "nicklist_remove_group", &weechat_lua_api_nicklist_remove_group },
{ "nicklist_remove_nick", &weechat_lua_api_nicklist_remove_nick },
{ "nicklist_remove_all", &weechat_lua_api_nicklist_remove_all },
+ { "bar_item_search", &weechat_lua_api_bar_item_search },
+ { "bar_item_new", &weechat_lua_api_bar_item_new },
+ { "bar_item_update", &weechat_lua_api_bar_item_update },
+ { "bar_item_remove", &weechat_lua_api_bar_item_remove },
+ { "bar_search", &weechat_lua_api_bar_search },
+ { "bar_new", &weechat_lua_api_bar_new },
+ { "bar_update", &weechat_lua_api_bar_update },
+ { "bar_remove", &weechat_lua_api_bar_remove },
{ "command", &weechat_lua_api_command },
{ "info_get", &weechat_lua_api_info_get },
+ { "infolist_get", &weechat_lua_api_infolist_get },
+ { "infolist_next", &weechat_lua_api_infolist_next },
+ { "infolist_prev", &weechat_lua_api_infolist_prev },
+ { "infolist_fields", &weechat_lua_api_infolist_fields },
+ { "infolist_integer", &weechat_lua_api_infolist_integer },
+ { "infolist_string", &weechat_lua_api_infolist_string },
+ { "infolist_pointer", &weechat_lua_api_infolist_pointer },
+ { "infolist_time", &weechat_lua_api_infolist_time },
+ { "infolist_free", &weechat_lua_api_infolist_free },
/* 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 },
diff --git a/src/plugins/scripts/perl/weechat-perl-api.c b/src/plugins/scripts/perl/weechat-perl-api.c
index b689ba6d9..4136490c5 100644
--- a/src/plugins/scripts/perl/weechat-perl-api.c
+++ b/src/plugins/scripts/perl/weechat-perl-api.c
@@ -178,6 +178,7 @@ static XS (XS_weechat_iconv_to_internal)
result = weechat_iconv_to_internal (SvPV (ST (0), PL_na), /* charset */
SvPV (ST (1), PL_na)); /* string */
+
PERL_RETURN_STRING_FREE(result);
}
@@ -208,6 +209,7 @@ static XS (XS_weechat_iconv_from_internal)
result = weechat_iconv_from_internal (SvPV (ST (0), PL_na), /* charset */
SvPV (ST (1), PL_na)); /* string */
+
PERL_RETURN_STRING_FREE(result);
}
@@ -236,6 +238,7 @@ static XS (XS_weechat_gettext)
}
result = weechat_gettext (SvPV (ST (0), PL_na)); /* string */
+
PERL_RETURN_STRING(result);
}
@@ -266,6 +269,7 @@ static XS (XS_weechat_ngettext)
result = weechat_ngettext (SvPV (ST (0), PL_na), /* single */
SvPV (ST (1), PL_na), /* plural */
SvIV (ST (2))); /* count */
+
PERL_RETURN_STRING(result);
}
@@ -349,6 +353,7 @@ static XS (XS_weechat_list_new)
}
result = script_ptr2str (weechat_list_new ());
+
PERL_RETURN_STRING_FREE(result);
}
@@ -379,6 +384,7 @@ static XS (XS_weechat_list_add)
result = script_ptr2str (weechat_list_add (script_str2ptr (SvPV (ST (0), PL_na)), /* weelist */
SvPV (ST (1), PL_na), /* data */
SvPV (ST (2), PL_na))); /* where */
+
PERL_RETURN_STRING_FREE(result);
}
@@ -408,6 +414,7 @@ static XS (XS_weechat_list_search)
result = script_ptr2str (weechat_list_search (script_str2ptr (SvPV (ST (0), PL_na)), /* weelist */
SvPV (ST (1), PL_na))); /* data */
+
PERL_RETURN_STRING_FREE(result);
}
@@ -437,6 +444,7 @@ static XS (XS_weechat_list_casesearch)
result = script_ptr2str (weechat_list_casesearch (script_str2ptr (SvPV (ST (0), PL_na)), /* weelist */
SvPV (ST (1), PL_na))); /* data */
+
PERL_RETURN_STRING_FREE(result);
}
@@ -466,6 +474,7 @@ static XS (XS_weechat_list_get)
result = script_ptr2str (weechat_list_get (script_str2ptr (SvPV (ST (0), PL_na)), /* weelist */
SvIV (ST (1)))); /* position */
+
PERL_RETURN_STRING_FREE(result);
}
@@ -523,6 +532,7 @@ static XS (XS_weechat_list_next)
}
result = script_ptr2str (weechat_list_next (script_str2ptr (SvPV (ST (0), PL_na)))); /* item */
+
PERL_RETURN_STRING_FREE(result);
}
@@ -551,6 +561,7 @@ static XS (XS_weechat_list_prev)
}
result = script_ptr2str (weechat_list_prev (script_str2ptr (SvPV (ST (0), PL_na)))); /* item */
+
PERL_RETURN_STRING_FREE(result);
}
@@ -579,6 +590,7 @@ static XS (XS_weechat_list_string)
}
result = weechat_list_string (script_str2ptr (SvPV (ST (0), PL_na))); /* item */
+
PERL_RETURN_STRING(result);
}
@@ -607,6 +619,7 @@ static XS (XS_weechat_list_size)
}
size = weechat_list_size (script_str2ptr (SvPV (ST (0), PL_na))); /* weelist */
+
PERL_RETURN_INT(size);
}
@@ -764,6 +777,7 @@ static XS (XS_weechat_config_new)
SvPV (ST (0), PL_na), /* filename */
&weechat_perl_api_config_reload_cb,
SvPV (ST (1), PL_na))); /* perl function */
+
PERL_RETURN_STRING_FREE(result);
}
@@ -902,6 +916,7 @@ static XS (XS_weechat_config_new_section)
SvPV (ST (3), PL_na), /* perl function (write cb) */
&weechat_perl_api_config_section_write_default_cb,
SvPV (ST (4), PL_na))); /* perl function (write default cb) */
+
PERL_RETURN_STRING_FREE(result);
}
@@ -931,6 +946,7 @@ static XS (XS_weechat_config_search_section)
result = script_ptr2str (weechat_config_search_section (script_str2ptr (SvPV (ST (0), PL_na)), /* config_file */
SvPV (ST (1), PL_na))); /* section_name */
+
PERL_RETURN_STRING_FREE(result);
}
@@ -998,6 +1014,7 @@ static XS (XS_weechat_config_new_option)
SvPV (ST (8), PL_na), /* default_value */
&weechat_perl_api_config_option_change_cb,
SvPV (ST (9), PL_na))); /* perl function */
+
PERL_RETURN_STRING_FREE(result);
}
@@ -1028,6 +1045,7 @@ static XS (XS_weechat_config_search_option)
result = script_ptr2str (weechat_config_search_option (script_str2ptr (SvPV (ST (0), PL_na)), /* config_file */
script_str2ptr (SvPV (ST (1), PL_na)), /* section */
SvPV (ST (2), PL_na))); /* option_name */
+
PERL_RETURN_STRING_FREE(result);
}
@@ -1056,6 +1074,7 @@ static XS (XS_weechat_config_string_to_boolean)
}
value = weechat_config_string_to_boolean (SvPV (ST (0), PL_na)); /* text */
+
PERL_RETURN_INT(value);
}
@@ -1086,6 +1105,7 @@ static XS (XS_weechat_config_option_set)
rc = weechat_config_option_set (script_str2ptr (SvPV (ST (0), PL_na)), /* option */
SvPV (ST (1), PL_na), /* new_value */
SvIV (ST (2))); /* run_callback */
+
PERL_RETURN_INT(rc);
}
@@ -1114,6 +1134,7 @@ static XS (XS_weechat_config_boolean)
}
value = weechat_config_boolean (script_str2ptr (SvPV (ST (0), PL_na))); /* option */
+
PERL_RETURN_INT(value);
}
@@ -1142,6 +1163,7 @@ static XS (XS_weechat_config_integer)
}
value = weechat_config_integer (script_str2ptr (SvPV (ST (0), PL_na))); /* option */
+
PERL_RETURN_INT(value);
}
@@ -1170,6 +1192,7 @@ static XS (XS_weechat_config_string)
}
value = weechat_config_string (script_str2ptr (SvPV (ST (0), PL_na))); /* option */
+
PERL_RETURN_STRING(value);
}
@@ -1198,6 +1221,7 @@ static XS (XS_weechat_config_color)
}
value = weechat_config_color (script_str2ptr (SvPV (ST (0), PL_na))); /* option */
+
PERL_RETURN_INT(value);
}
@@ -1257,6 +1281,7 @@ static XS (XS_weechat_config_write)
}
rc = weechat_config_write (script_str2ptr (SvPV (ST (0), PL_na))); /* config_file */
+
PERL_RETURN_INT(rc);
}
@@ -1285,6 +1310,7 @@ static XS (XS_weechat_config_read)
}
rc = weechat_config_read (script_str2ptr (SvPV (ST (0), PL_na))); /* config_file */
+
PERL_RETURN_INT(rc);
}
@@ -1313,6 +1339,7 @@ static XS (XS_weechat_config_reload)
}
rc = weechat_config_reload (script_str2ptr (SvPV (ST (0), PL_na))); /* config_file */
+
PERL_RETURN_INT(rc);
}
@@ -1371,6 +1398,7 @@ static XS (XS_weechat_prefix)
}
result = weechat_prefix (SvPV (ST (0), PL_na));
+
PERL_RETURN_STRING(result);
}
@@ -1399,6 +1427,7 @@ static XS (XS_weechat_color)
}
result = weechat_color (SvPV (ST (0), PL_na));
+
PERL_RETURN_STRING(result);
}
@@ -1590,6 +1619,7 @@ static XS (XS_weechat_hook_command)
SvPV (ST (4), PL_na), /* completion */
&weechat_perl_api_hook_command_cb,
SvPV (ST (5), PL_na))); /* perl function */
+
PERL_RETURN_STRING_FREE(result);
}
@@ -1655,6 +1685,7 @@ static XS (XS_weechat_hook_timer)
SvIV (ST (2)), /* max_calls */
&weechat_perl_api_hook_timer_cb,
SvPV (ST (3), PL_na))); /* perl function */
+
PERL_RETURN_STRING_FREE(result);
}
@@ -1721,6 +1752,7 @@ static XS (XS_weechat_hook_fd)
SvIV (ST (3)), /* exception */
&weechat_perl_api_hook_fd_cb,
SvPV (ST (4), PL_na))); /* perl function */
+
PERL_RETURN_STRING_FREE(result);
}
@@ -1796,6 +1828,7 @@ static XS (XS_weechat_hook_print)
SvIV (ST (2)), /* strip_colors */
&weechat_perl_api_hook_print_cb,
SvPV (ST (3), PL_na))); /* perl function */
+
PERL_RETURN_STRING_FREE(result);
}
@@ -1882,6 +1915,7 @@ static XS (XS_weechat_hook_signal)
SvPV (ST (0), PL_na), /* signal */
&weechat_perl_api_hook_signal_cb,
SvPV (ST (1), PL_na))); /* perl function */
+
PERL_RETURN_STRING_FREE(result);
}
@@ -2002,6 +2036,7 @@ static XS (XS_weechat_hook_config)
SvPV (ST (1), PL_na), /* option */
&weechat_perl_api_hook_config_cb,
SvPV (ST (2), PL_na))); /* perl function */
+
PERL_RETURN_STRING_FREE(result);
}
@@ -2074,6 +2109,7 @@ static XS (XS_weechat_hook_completion)
SvPV (ST (0), PL_na), /* completion */
&weechat_perl_api_hook_completion_cb,
SvPV (ST (1), PL_na))); /* perl function */
+
PERL_RETURN_STRING_FREE(result);
}
@@ -2130,6 +2166,7 @@ static XS (XS_weechat_hook_modifier)
SvPV (ST (0), PL_na), /* modifier */
&weechat_perl_api_hook_modifier_cb,
SvPV (ST (1), PL_na))); /* perl function */
+
PERL_RETURN_STRING_FREE(result);
}
@@ -2160,6 +2197,7 @@ static XS (XS_weechat_hook_modifier_exec)
result = weechat_hook_modifier_exec (SvPV (ST (0), PL_na), /* modifier */
SvPV (ST (1), PL_na), /* modifier_data */
SvPV (ST (2), PL_na)); /* string */
+
PERL_RETURN_STRING_FREE(result);
}
@@ -2316,6 +2354,7 @@ static XS (XS_weechat_buffer_new)
SvPV (ST (2), PL_na), /* function input */
&weechat_perl_api_close_cb,
SvPV (ST (3), PL_na))); /* function close */
+
PERL_RETURN_STRING_FREE(result);
}
@@ -2345,6 +2384,7 @@ static XS (XS_weechat_buffer_search)
result = script_ptr2str (weechat_buffer_search (SvPV (ST (0), PL_na), /* category */
SvPV (ST (1), PL_na))); /* name */
+
PERL_RETURN_STRING_FREE(result);
}
@@ -2405,6 +2445,7 @@ static XS (XS_weechat_buffer_get)
value = weechat_buffer_get (script_str2ptr (SvPV (ST (0), PL_na)), /* buffer */
SvPV (ST (1), PL_na)); /* property */
+
PERL_RETURN_STRING(value);
}
@@ -2467,6 +2508,7 @@ static XS (XS_weechat_nicklist_add_group)
SvPV (ST (2), PL_na), /* name */
SvPV (ST (3), PL_na), /* color */
SvIV (ST (4)))); /* visible */
+
PERL_RETURN_STRING_FREE(result);
}
@@ -2497,6 +2539,7 @@ static XS (XS_weechat_nicklist_search_group)
result = script_ptr2str (weechat_nicklist_search_group (script_str2ptr (SvPV (ST (0), PL_na)), /* buffer */
script_str2ptr (SvPV (ST (1), PL_na)), /* from_group */
SvPV (ST (2), PL_na))); /* name */
+
PERL_RETURN_STRING_FREE(result);
}
@@ -2537,6 +2580,7 @@ static XS (XS_weechat_nicklist_add_nick)
char_prefix,
SvPV (ST (5), PL_na), /* prefix_color */
SvIV (ST (6)))); /* visible */
+
PERL_RETURN_STRING_FREE(result);
}
@@ -2567,6 +2611,7 @@ static XS (XS_weechat_nicklist_search_nick)
result = script_ptr2str (weechat_nicklist_search_nick (script_str2ptr (SvPV (ST (0), PL_na)), /* buffer */
script_str2ptr (SvPV (ST (1), PL_na)), /* from_group */
SvPV (ST (2), PL_na))); /* name */
+
PERL_RETURN_STRING_FREE(result);
}
@@ -2657,6 +2702,280 @@ static XS (XS_weechat_nicklist_remove_all)
}
/*
+ * weechat::bar_item_search: search a bar item
+ */
+
+static XS (XS_weechat_bar_item_search)
+{
+ char *result;
+ dXSARGS;
+
+ /* make C compiler happy */
+ (void) cv;
+
+ if (!perl_current_script)
+ {
+ WEECHAT_SCRIPT_MSG_NOT_INITIALIZED("bar_item_search");
+ PERL_RETURN_EMPTY;
+ }
+
+ if (items < 1)
+ {
+ WEECHAT_SCRIPT_MSG_WRONG_ARGUMENTS("bar_item_search");
+ PERL_RETURN_EMPTY;
+ }
+
+ result = script_ptr2str (weechat_bar_item_search (SvPV (ST (0), PL_na))); /* name */
+
+ PERL_RETURN_STRING_FREE(result);
+}
+
+/*
+ * weechat_perl_api_bar_item_build_cb: callback for building bar item
+ */
+
+char *
+weechat_perl_api_bar_item_build_cb (void *data, struct t_gui_bar_item *item,
+ struct t_gui_window *window,
+ int max_width)
+{
+ struct t_script_callback *script_callback;
+ char *perl_argv[4], *ret;
+ static char buf[32];
+
+ script_callback = (struct t_script_callback *)data;
+
+ snprintf (buf, sizeof (buf) - 1, "%d", max_width);
+
+ perl_argv[0] = script_ptr2str (item);
+ perl_argv[1] = script_ptr2str (window);
+ perl_argv[2] = buf;
+ perl_argv[3] = NULL;
+
+ ret = (char *)weechat_perl_exec (script_callback->script,
+ WEECHAT_SCRIPT_EXEC_STRING,
+ script_callback->function,
+ perl_argv);
+
+ if (perl_argv[0])
+ free (perl_argv[0]);
+ if (perl_argv[1])
+ free (perl_argv[1]);
+
+ return ret;
+}
+
+/*
+ * weechat::bar_item_new: add a new bar item
+ */
+
+static XS (XS_weechat_bar_item_new)
+{
+ char *result;
+ dXSARGS;
+
+ /* make C compiler happy */
+ (void) cv;
+
+ if (!perl_current_script)
+ {
+ WEECHAT_SCRIPT_MSG_NOT_INITIALIZED("bar_item_new");
+ PERL_RETURN_EMPTY;
+ }
+
+ if (items < 2)
+ {
+ WEECHAT_SCRIPT_MSG_WRONG_ARGUMENTS("bar_item_new");
+ PERL_RETURN_EMPTY;
+ }
+
+ result = script_ptr2str (script_api_bar_item_new (weechat_perl_plugin,
+ perl_current_script,
+ SvPV (ST (0), PL_na), /* name */
+ &weechat_perl_api_bar_item_build_cb,
+ SvPV (ST (1), PL_na))); /* function build */
+
+ PERL_RETURN_STRING_FREE(result);
+}
+
+/*
+ * weechat::bar_item_update: update a bar item on screen
+ */
+
+static XS (XS_weechat_bar_item_update)
+{
+ dXSARGS;
+
+ /* make C compiler happy */
+ (void) cv;
+
+ if (!perl_current_script)
+ {
+ WEECHAT_SCRIPT_MSG_NOT_INITIALIZED("bar_item_update");
+ PERL_RETURN_ERROR;
+ }
+
+ if (items < 1)
+ {
+ WEECHAT_SCRIPT_MSG_WRONG_ARGUMENTS("bar_item_update");
+ PERL_RETURN_ERROR;
+ }
+
+ weechat_bar_item_update (SvPV (ST (0), PL_na)); /* name */
+
+ PERL_RETURN_OK;
+}
+
+/*
+ * weechat::bar_item_remove: remove a bar item
+ */
+
+static XS (XS_weechat_bar_item_remove)
+{
+ dXSARGS;
+
+ /* make C compiler happy */
+ (void) cv;
+
+ if (!perl_current_script)
+ {
+ WEECHAT_SCRIPT_MSG_NOT_INITIALIZED("bar_item_remove");
+ PERL_RETURN_ERROR;
+ }
+
+ if (items < 1)
+ {
+ WEECHAT_SCRIPT_MSG_WRONG_ARGUMENTS("bar_item_remove");
+ PERL_RETURN_ERROR;
+ }
+
+ script_api_bar_item_remove (weechat_perl_plugin,
+ perl_current_script,
+ script_str2ptr (SvPV (ST (0), PL_na))); /* item */
+
+ PERL_RETURN_OK;
+}
+
+/*
+ * weechat::bar_search: search a bar
+ */
+
+static XS (XS_weechat_bar_search)
+{
+ char *result;
+ dXSARGS;
+
+ /* make C compiler happy */
+ (void) cv;
+
+ if (!perl_current_script)
+ {
+ WEECHAT_SCRIPT_MSG_NOT_INITIALIZED("bar_search");
+ PERL_RETURN_EMPTY;
+ }
+
+ if (items < 1)
+ {
+ WEECHAT_SCRIPT_MSG_WRONG_ARGUMENTS("bar_search");
+ PERL_RETURN_EMPTY;
+ }
+
+ result = script_ptr2str (weechat_bar_search (SvPV (ST (0), PL_na))); /* name */
+
+ PERL_RETURN_STRING_FREE(result);
+}
+
+/*
+ * weechat::bar_new: add a new bar
+ */
+
+static XS (XS_weechat_bar_new)
+{
+ char *result;
+ dXSARGS;
+
+ /* make C compiler happy */
+ (void) cv;
+
+ if (!perl_current_script)
+ {
+ WEECHAT_SCRIPT_MSG_NOT_INITIALIZED("bar_new");
+ PERL_RETURN_EMPTY;
+ }
+
+ if (items < 6)
+ {
+ WEECHAT_SCRIPT_MSG_WRONG_ARGUMENTS("bar_new");
+ PERL_RETURN_EMPTY;
+ }
+
+ result = script_ptr2str (weechat_bar_new (SvPV (ST (0), PL_na), /* name */
+ SvPV (ST (1), PL_na), /* type */
+ SvPV (ST (2), PL_na), /* position */
+ SvIV (ST (3)), /* size */
+ SvIV (ST (4)), /* separator */
+ SvPV (ST (5), PL_na))); /* items */
+
+ PERL_RETURN_STRING_FREE(result);
+}
+
+/*
+ * weechat::bar_update: update a bar on screen
+ */
+
+static XS (XS_weechat_bar_update)
+{
+ dXSARGS;
+
+ /* make C compiler happy */
+ (void) cv;
+
+ if (!perl_current_script)
+ {
+ WEECHAT_SCRIPT_MSG_NOT_INITIALIZED("bar_update");
+ PERL_RETURN_ERROR;
+ }
+
+ if (items < 1)
+ {
+ WEECHAT_SCRIPT_MSG_WRONG_ARGUMENTS("bar_update");
+ PERL_RETURN_ERROR;
+ }
+
+ weechat_bar_update (SvPV (ST (0), PL_na)); /* name */
+
+ PERL_RETURN_OK;
+}
+
+/*
+ * weechat::bar_remove: remove a bar
+ */
+
+static XS (XS_weechat_bar_remove)
+{
+ dXSARGS;
+
+ /* make C compiler happy */
+ (void) cv;
+
+ if (!perl_current_script)
+ {
+ WEECHAT_SCRIPT_MSG_NOT_INITIALIZED("bar_remove");
+ PERL_RETURN_ERROR;
+ }
+
+ if (items < 1)
+ {
+ WEECHAT_SCRIPT_MSG_WRONG_ARGUMENTS("bar_remove");
+ PERL_RETURN_ERROR;
+ }
+
+ weechat_bar_remove (script_str2ptr (SvPV (ST (0), PL_na))); /* bar */
+
+ PERL_RETURN_OK;
+}
+
+/*
* weechat::command: execute a command on a buffer
*/
@@ -2712,10 +3031,279 @@ static XS (XS_weechat_info_get)
}
value = weechat_info_get (SvPV (ST (0), PL_na));
+
+ PERL_RETURN_STRING(value);
+}
+
+/*
+ * weechat::infolist_get: get list with infos
+ */
+
+static XS (XS_weechat_infolist_get)
+{
+ char *value;
+ dXSARGS;
+
+ /* make C compiler happy */
+ (void) cv;
+
+ if (!perl_current_script)
+ {
+ WEECHAT_SCRIPT_MSG_NOT_INITIALIZED("infolist_get");
+ PERL_RETURN_EMPTY;
+ }
+
+ if (items < 2)
+ {
+ WEECHAT_SCRIPT_MSG_WRONG_ARGUMENTS("infolist_get");
+ PERL_RETURN_EMPTY;
+ }
+
+ value = script_ptr2str (weechat_infolist_get (SvPV (ST (0), PL_na), /* name */
+ script_str2ptr (SvPV (ST (1), PL_na)))); /* pointer */
+
+ PERL_RETURN_STRING_FREE(value);
+}
+
+/*
+ * weechat::infolist_next: move item pointer to next item in infolist
+ */
+
+static XS (XS_weechat_infolist_next)
+{
+ int value;
+ dXSARGS;
+
+ /* make C compiler happy */
+ (void) cv;
+
+ if (!perl_current_script)
+ {
+ WEECHAT_SCRIPT_MSG_NOT_INITIALIZED("infolist_next");
+ PERL_RETURN_INT(0);
+ }
+
+ if (items < 1)
+ {
+ WEECHAT_SCRIPT_MSG_WRONG_ARGUMENTS("infolist_next");
+ PERL_RETURN_INT(0);
+ }
+
+ value = weechat_infolist_next (script_str2ptr (SvPV (ST (0), PL_na))); /* infolist */
+
+ PERL_RETURN_INT(value);
+}
+
+/*
+ * weechat::infolist_prev: move item pointer to previous item in infolist
+ */
+
+static XS (XS_weechat_infolist_prev)
+{
+ int value;
+ dXSARGS;
+
+ /* make C compiler happy */
+ (void) cv;
+
+ if (!perl_current_script)
+ {
+ WEECHAT_SCRIPT_MSG_NOT_INITIALIZED("infolist_prev");
+ PERL_RETURN_INT(0);
+ }
+
+ if (items < 1)
+ {
+ WEECHAT_SCRIPT_MSG_WRONG_ARGUMENTS("infolist_prev");
+ PERL_RETURN_INT(0);
+ }
+
+ value = weechat_infolist_prev (script_str2ptr (SvPV (ST (0), PL_na))); /* infolist */
+
+ PERL_RETURN_INT(value);
+}
+
+/*
+ * weechat::infolist_fields: get list of fields for current item of infolist
+ */
+
+static XS (XS_weechat_infolist_fields)
+{
+ char *value;
+ dXSARGS;
+
+ /* make C compiler happy */
+ (void) cv;
+
+ if (!perl_current_script)
+ {
+ WEECHAT_SCRIPT_MSG_NOT_INITIALIZED("infolist_fields");
+ PERL_RETURN_EMPTY;
+ }
+
+ if (items < 1)
+ {
+ WEECHAT_SCRIPT_MSG_WRONG_ARGUMENTS("infolist_fields");
+ PERL_RETURN_EMPTY;
+ }
+
+ value = weechat_infolist_fields (script_str2ptr (SvPV (ST (0), PL_na))); /* infolist */
+
PERL_RETURN_STRING(value);
}
/*
+ * weechat::infolist_integer: get integer value of a variable in infolist
+ */
+
+static XS (XS_weechat_infolist_integer)
+{
+ int value;
+ dXSARGS;
+
+ /* make C compiler happy */
+ (void) cv;
+
+ if (!perl_current_script)
+ {
+ WEECHAT_SCRIPT_MSG_NOT_INITIALIZED("infolist_integer");
+ PERL_RETURN_INT(0);
+ }
+
+ if (items < 2)
+ {
+ WEECHAT_SCRIPT_MSG_WRONG_ARGUMENTS("infolist_integer");
+ PERL_RETURN_INT(0);
+ }
+
+ value = weechat_infolist_integer (script_str2ptr (SvPV (ST (0), PL_na)), /* infolist */
+ SvPV (ST (1), PL_na)); /* variable */
+
+ PERL_RETURN_INT(value);
+}
+
+/*
+ * weechat::infolist_string: get string value of a variable in infolist
+ */
+
+static XS (XS_weechat_infolist_string)
+{
+ char *value;
+ dXSARGS;
+
+ /* make C compiler happy */
+ (void) cv;
+
+ if (!perl_current_script)
+ {
+ WEECHAT_SCRIPT_MSG_NOT_INITIALIZED("infolist_string");
+ PERL_RETURN_EMPTY;
+ }
+
+ if (items < 2)
+ {
+ WEECHAT_SCRIPT_MSG_WRONG_ARGUMENTS("infolist_string");
+ PERL_RETURN_EMPTY;
+ }
+
+ value = weechat_infolist_string (script_str2ptr (SvPV (ST (0), PL_na)), /* infolist */
+ SvPV (ST (1), PL_na)); /* variable */
+
+ PERL_RETURN_STRING(value);
+}
+
+/*
+ * weechat::infolist_pointer: get pointer value of a variable in infolist
+ */
+
+static XS (XS_weechat_infolist_pointer)
+{
+ char *value;
+ dXSARGS;
+
+ /* make C compiler happy */
+ (void) cv;
+
+ if (!perl_current_script)
+ {
+ WEECHAT_SCRIPT_MSG_NOT_INITIALIZED("infolist_pointer");
+ PERL_RETURN_EMPTY;
+ }
+
+ if (items < 2)
+ {
+ WEECHAT_SCRIPT_MSG_WRONG_ARGUMENTS("infolist_pointer");
+ PERL_RETURN_EMPTY;
+ }
+
+ value = script_ptr2str (weechat_infolist_pointer (script_str2ptr (SvPV (ST (0), PL_na)), /* infolist */
+ SvPV (ST (1), PL_na))); /* variable */
+
+ PERL_RETURN_STRING_FREE(value);
+}
+
+/*
+ * weechat::infolist_time: get time value of a variable in infolist
+ */
+
+static XS (XS_weechat_infolist_time)
+{
+ time_t time;
+ char timebuffer[64], *value;
+ dXSARGS;
+
+ /* make C compiler happy */
+ (void) cv;
+
+ if (!perl_current_script)
+ {
+ WEECHAT_SCRIPT_MSG_NOT_INITIALIZED("infolist_time");
+ PERL_RETURN_EMPTY;
+ }
+
+ if (items < 2)
+ {
+ WEECHAT_SCRIPT_MSG_WRONG_ARGUMENTS("infolist_time");
+ PERL_RETURN_EMPTY;
+ }
+
+ time = weechat_infolist_time (script_str2ptr (SvPV (ST (0), PL_na)), /* infolist */
+ SvPV (ST (1), PL_na)); /* variable */
+ strftime (timebuffer, sizeof (timebuffer), "%F %T", localtime (&time));
+ value = strdup (timebuffer);
+
+ PERL_RETURN_STRING_FREE(value);
+}
+
+/*
+ * weechat::infolist_free: free infolist
+ */
+
+static XS (XS_weechat_infolist_free)
+{
+ dXSARGS;
+
+ /* make C compiler happy */
+ (void) cv;
+
+ if (!perl_current_script)
+ {
+ WEECHAT_SCRIPT_MSG_NOT_INITIALIZED("infolist_free");
+ PERL_RETURN_ERROR;
+ }
+
+ if (items < 1)
+ {
+ WEECHAT_SCRIPT_MSG_WRONG_ARGUMENTS("infolist_free");
+ PERL_RETURN_ERROR;
+ }
+
+ weechat_infolist_free (script_str2ptr (SvPV (ST (0), PL_na))); /* infolist */
+
+ PERL_RETURN_OK;
+}
+
+/*
* weechat_perl_api_init: initialize subroutines
*/
@@ -2794,8 +3382,25 @@ weechat_perl_api_init (pTHX)
newXS ("weechat::nicklist_remove_group", XS_weechat_nicklist_remove_group, "weechat");
newXS ("weechat::nicklist_remove_nick", XS_weechat_nicklist_remove_nick, "weechat");
newXS ("weechat::nicklist_remove_all", XS_weechat_nicklist_remove_all, "weechat");
+ newXS ("weechat::bar_item_search", XS_weechat_bar_item_search, "weechat");
+ newXS ("weechat::bar_item_new", XS_weechat_bar_item_new, "weechat");
+ newXS ("weechat::bar_item_update", XS_weechat_bar_item_update, "weechat");
+ newXS ("weechat::bar_item_remove", XS_weechat_bar_item_remove, "weechat");
+ newXS ("weechat::bar_search", XS_weechat_bar_search, "weechat");
+ newXS ("weechat::bar_new", XS_weechat_bar_new, "weechat");
+ newXS ("weechat::bar_update", XS_weechat_bar_update, "weechat");
+ newXS ("weechat::bar_remove", XS_weechat_bar_remove, "weechat");
newXS ("weechat::command", XS_weechat_command, "weechat");
newXS ("weechat::info_get", XS_weechat_info_get, "weechat");
+ newXS ("weechat::infolist_get", XS_weechat_infolist_get, "weechat");
+ newXS ("weechat::infolist_next", XS_weechat_infolist_next, "weechat");
+ newXS ("weechat::infolist_prev", XS_weechat_infolist_prev, "weechat");
+ newXS ("weechat::infolist_fields", XS_weechat_infolist_fields, "weechat");
+ newXS ("weechat::infolist_integer", XS_weechat_infolist_integer, "weechat");
+ newXS ("weechat::infolist_string", XS_weechat_infolist_string, "weechat");
+ newXS ("weechat::infolist_pointer", XS_weechat_infolist_pointer, "weechat");
+ newXS ("weechat::infolist_time", XS_weechat_infolist_time, "weechat");
+ newXS ("weechat::infolist_free", XS_weechat_infolist_free, "weechat");
/* interface constants */
stash = gv_stashpv ("weechat", TRUE);
diff --git a/src/plugins/scripts/python/weechat-python-api.c b/src/plugins/scripts/python/weechat-python-api.c
index f9893ff59..e4a1dd232 100644
--- a/src/plugins/scripts/python/weechat-python-api.c
+++ b/src/plugins/scripts/python/weechat-python-api.c
@@ -175,6 +175,7 @@ weechat_python_api_iconv_to_internal (PyObject *self, PyObject *args)
}
result = weechat_iconv_to_internal (charset, string);
+
PYTHON_RETURN_STRING_FREE(result);
}
@@ -208,6 +209,7 @@ weechat_python_api_iconv_from_internal (PyObject *self, PyObject *args)
}
result = weechat_iconv_from_internal (charset, string);
+
PYTHON_RETURN_STRING_FREE(result);
}
@@ -238,6 +240,7 @@ weechat_python_api_gettext (PyObject *self, PyObject *args)
}
result = weechat_gettext (string);
+
PYTHON_RETURN_STRING(result);
}
@@ -271,6 +274,7 @@ weechat_python_api_ngettext (PyObject *self, PyObject *args)
}
result = weechat_ngettext (single, plural, count);
+
PYTHON_RETURN_STRING(result);
}
@@ -363,6 +367,7 @@ weechat_python_api_list_new (PyObject *self, PyObject *args)
}
result = script_ptr2str (weechat_list_new ());
+
PYTHON_RETURN_STRING_FREE(result);
}
@@ -398,6 +403,7 @@ weechat_python_api_list_add (PyObject *self, PyObject *args)
result = script_ptr2str (weechat_list_add (script_str2ptr (weelist),
data,
where));
+
PYTHON_RETURN_STRING_FREE(result);
}
@@ -431,6 +437,7 @@ weechat_python_api_list_search (PyObject *self, PyObject *args)
result = script_ptr2str (weechat_list_search (script_str2ptr (weelist),
data));
+
PYTHON_RETURN_STRING_FREE(result);
}
@@ -464,6 +471,7 @@ weechat_python_api_list_casesearch (PyObject *self, PyObject *args)
result = script_ptr2str (weechat_list_casesearch (script_str2ptr (weelist),
data));
+
PYTHON_RETURN_STRING_FREE(result);
}
@@ -562,6 +570,7 @@ weechat_python_api_list_next (PyObject *self, PyObject *args)
}
result = script_ptr2str (weechat_list_next (script_str2ptr (item)));
+
PYTHON_RETURN_STRING_FREE(result);
}
@@ -593,6 +602,7 @@ weechat_python_api_list_prev (PyObject *self, PyObject *args)
}
result = script_ptr2str (weechat_list_prev (script_str2ptr (item)));
+
PYTHON_RETURN_STRING_FREE(result);
}
@@ -623,6 +633,7 @@ weechat_python_api_list_string (PyObject *self, PyObject *args)
}
result = weechat_list_string (script_str2ptr (item));
+
PYTHON_RETURN_STRING(result);
}
@@ -654,6 +665,7 @@ weechat_python_api_list_size (PyObject *self, PyObject *args)
}
size = weechat_list_size (script_str2ptr (weelist));
+
PYTHON_RETURN_INT(size);
}
@@ -825,6 +837,7 @@ weechat_python_api_config_new (PyObject *self, PyObject *args)
filename,
&weechat_python_api_config_reload_cb,
function));
+
PYTHON_RETURN_STRING_FREE(result);
}
@@ -972,6 +985,7 @@ weechat_python_api_config_new_section (PyObject *self, PyObject *args)
function_write,
&weechat_python_api_config_section_write_default_cb,
function_write_default));
+
PYTHON_RETURN_STRING_FREE(result);
}
@@ -1005,6 +1019,7 @@ weechat_python_api_config_search_section (PyObject *self, PyObject *args)
result = script_ptr2str (weechat_config_search_section (script_str2ptr (config_file),
section_name));
+
PYTHON_RETURN_STRING_FREE(result);
}
@@ -1086,6 +1101,7 @@ weechat_python_api_config_new_option (PyObject *self, PyObject *args)
default_value,
&weechat_python_api_config_option_change_cb,
function));
+
PYTHON_RETURN_STRING_FREE(result);
}
@@ -1121,6 +1137,7 @@ weechat_python_api_config_search_option (PyObject *self, PyObject *args)
result = script_ptr2str (weechat_config_search_option (script_str2ptr (config_file),
script_str2ptr (section),
option_name));
+
PYTHON_RETURN_STRING_FREE(result);
}
@@ -1152,6 +1169,7 @@ weechat_python_api_config_string_to_boolean (PyObject *self, PyObject *args)
}
value = weechat_config_string_to_boolean (text);
+
PYTHON_RETURN_INT(value);
}
@@ -1187,6 +1205,7 @@ weechat_python_api_config_option_set (PyObject *self, PyObject *args)
rc = weechat_config_option_set (script_str2ptr (option),
new_value,
run_callback);
+
PYTHON_RETURN_INT(rc);
}
@@ -1218,6 +1237,7 @@ weechat_python_api_config_boolean (PyObject *self, PyObject *args)
}
value = weechat_config_boolean (script_str2ptr (option));
+
PYTHON_RETURN_INT(value);
}
@@ -1249,6 +1269,7 @@ weechat_python_api_config_integer (PyObject *self, PyObject *args)
}
value = weechat_config_integer (script_str2ptr (option));
+
PYTHON_RETURN_INT(value);
}
@@ -1279,6 +1300,7 @@ weechat_python_api_config_string (PyObject *self, PyObject *args)
}
value = weechat_config_string (script_str2ptr (option));
+
PYTHON_RETURN_STRING(value);
}
@@ -1310,6 +1332,7 @@ weechat_python_api_config_color (PyObject *self, PyObject *args)
}
value = weechat_config_color (script_str2ptr (option));
+
PYTHON_RETURN_INT(value);
}
@@ -1377,6 +1400,7 @@ weechat_python_api_config_write (PyObject *self, PyObject *args)
}
rc = weechat_config_write (script_str2ptr (config_file));
+
PYTHON_RETURN_INT(rc);
}
@@ -1408,6 +1432,7 @@ weechat_python_api_config_read (PyObject *self, PyObject *args)
}
rc = weechat_config_read (script_str2ptr (config_file));
+
PYTHON_RETURN_INT(rc);
}
@@ -1439,6 +1464,7 @@ weechat_python_api_config_reload (PyObject *self, PyObject *args)
}
rc = weechat_config_reload (script_str2ptr (config_file));
+
PYTHON_RETURN_INT(rc);
}
@@ -1502,6 +1528,7 @@ weechat_python_api_prefix (PyObject *self, PyObject *args)
}
result = weechat_prefix (prefix);
+
PYTHON_RETURN_STRING(result);
}
@@ -1532,6 +1559,7 @@ weechat_python_api_color (PyObject *self, PyObject *args)
}
result = weechat_color (color);
+
PYTHON_RETURN_STRING(result);
}
@@ -1751,6 +1779,7 @@ weechat_python_api_hook_command (PyObject *self, PyObject *args)
completion,
&weechat_python_api_hook_command_cb,
function));
+
PYTHON_RETURN_STRING_FREE(result);
}
@@ -1824,6 +1853,7 @@ weechat_python_api_hook_timer (PyObject *self, PyObject *args)
max_calls,
&weechat_python_api_hook_timer_cb,
function));
+
PYTHON_RETURN_STRING_FREE(result);
}
@@ -1899,6 +1929,7 @@ weechat_python_api_hook_fd (PyObject *self, PyObject *args)
exception,
&weechat_python_api_hook_fd_cb,
function));
+
PYTHON_RETURN_STRING_FREE(result);
}
@@ -1982,6 +2013,7 @@ weechat_python_api_hook_print (PyObject *self, PyObject *args)
strip_colors,
&weechat_python_api_hook_print_cb,
function));
+
PYTHON_RETURN_STRING_FREE(result);
}
@@ -2072,6 +2104,7 @@ weechat_python_api_hook_signal (PyObject *self, PyObject *args)
signal,
&weechat_python_api_hook_signal_cb,
function));
+
PYTHON_RETURN_STRING_FREE(result);
}
@@ -2199,6 +2232,7 @@ weechat_python_api_hook_config (PyObject *self, PyObject *args)
option,
&weechat_python_api_hook_config_cb,
function));
+
PYTHON_RETURN_STRING_FREE(result);
}
@@ -2275,6 +2309,7 @@ weechat_python_api_hook_completion (PyObject *self, PyObject *args)
completion,
&weechat_python_api_hook_completion_cb,
function));
+
PYTHON_RETURN_STRING_FREE(result);
}
@@ -2335,6 +2370,7 @@ weechat_python_api_hook_modifier (PyObject *self, PyObject *args)
modifier,
&weechat_python_api_hook_modifier_cb,
function));
+
PYTHON_RETURN_STRING_FREE(result);
}
@@ -2368,6 +2404,7 @@ weechat_python_api_hook_modifier_exec (PyObject *self, PyObject *args)
}
result = weechat_hook_modifier_exec (modifier, modifier_data, string);
+
PYTHON_RETURN_STRING_FREE(result);
}
@@ -2533,6 +2570,7 @@ weechat_python_api_buffer_new (PyObject *self, PyObject *args)
function_input,
&weechat_python_api_close_cb,
function_close));
+
PYTHON_RETURN_STRING_FREE(result);
}
@@ -2566,6 +2604,7 @@ weechat_python_api_buffer_search (PyObject *self, PyObject *args)
}
result = script_ptr2str (weechat_buffer_search (category, name));
+
PYTHON_RETURN_STRING_FREE(result);
}
@@ -2633,6 +2672,7 @@ weechat_python_api_buffer_get (PyObject *self, PyObject *args)
}
value = weechat_buffer_get (script_str2ptr (buffer), property);
+
PYTHON_RETURN_STRING(value);
}
@@ -2709,6 +2749,7 @@ weechat_python_api_nicklist_add_group (PyObject *self, PyObject *args)
name,
color,
visible));
+
PYTHON_RETURN_STRING_FREE(result);
}
@@ -2744,6 +2785,7 @@ weechat_python_api_nicklist_search_group (PyObject *self, PyObject *args)
result = script_ptr2str (weechat_nicklist_search_group (script_str2ptr (buffer),
script_str2ptr (from_group),
name));
+
PYTHON_RETURN_STRING_FREE(result);
}
@@ -2795,6 +2837,7 @@ weechat_python_api_nicklist_add_nick (PyObject *self, PyObject *args)
char_prefix,
prefix_color,
visible));
+
PYTHON_RETURN_STRING_FREE(result);
}
@@ -2830,6 +2873,7 @@ weechat_python_api_nicklist_search_nick (PyObject *self, PyObject *args)
result = script_ptr2str (weechat_nicklist_search_nick (script_str2ptr (buffer),
script_str2ptr (from_group),
name));
+
PYTHON_RETURN_STRING_FREE(result);
}
@@ -2931,6 +2975,312 @@ weechat_python_api_nicklist_remove_all (PyObject *self, PyObject *args)
}
/*
+ * weechat_python_api_bar_item_search: search a bar item
+ */
+
+static PyObject *
+weechat_python_api_bar_item_search (PyObject *self, PyObject *args)
+{
+ char *name, *result;
+ PyObject *object;
+
+ /* make C compiler happy */
+ (void) self;
+
+ if (!python_current_script)
+ {
+ WEECHAT_SCRIPT_MSG_NOT_INITIALIZED("bar_item_search");
+ PYTHON_RETURN_EMPTY;
+ }
+
+ name = NULL;
+
+ if (!PyArg_ParseTuple (args, "s", &name))
+ {
+ WEECHAT_SCRIPT_MSG_WRONG_ARGUMENTS("bar_item_search");
+ PYTHON_RETURN_EMPTY;
+ }
+
+ result = script_ptr2str (weechat_bar_item_search (name));
+
+ PYTHON_RETURN_STRING_FREE(result);
+}
+
+/*
+ * weechat_python_api_bar_item_build_cb: callback for building bar item
+ */
+
+char *
+weechat_python_api_bar_item_build_cb (void *data, struct t_gui_bar_item *item,
+ struct t_gui_window *window,
+ int max_width)
+{
+ struct t_script_callback *script_callback;
+ char *python_argv[4], *ret;
+ static char buf[32];
+
+ script_callback = (struct t_script_callback *)data;
+
+ snprintf (buf, sizeof (buf) - 1, "%d", max_width);
+
+ python_argv[0] = script_ptr2str (item);
+ python_argv[1] = script_ptr2str (window);
+ python_argv[2] = buf;
+ python_argv[3] = NULL;
+
+ ret = (char *)weechat_python_exec (script_callback->script,
+ WEECHAT_SCRIPT_EXEC_STRING,
+ script_callback->function,
+ python_argv);
+
+ if (python_argv[0])
+ free (python_argv[0]);
+ if (python_argv[1])
+ free (python_argv[1]);
+
+ return ret;
+}
+
+/*
+ * weechat_python_api_bar_item_new: add a new bar item
+ */
+
+static PyObject *
+weechat_python_api_bar_item_new (PyObject *self, PyObject *args)
+{
+ char *name, *function, *result;
+ PyObject *object;
+
+ /* make C compiler happy */
+ (void) self;
+
+ if (!python_current_script)
+ {
+ WEECHAT_SCRIPT_MSG_NOT_INITIALIZED("bar_item_new");
+ PYTHON_RETURN_EMPTY;
+ }
+
+ name = NULL;
+ function = NULL;
+
+ if (!PyArg_ParseTuple (args, "ss", &name, &function))
+ {
+ WEECHAT_SCRIPT_MSG_WRONG_ARGUMENTS("bar_item_new");
+ PYTHON_RETURN_EMPTY;
+ }
+
+ result = script_ptr2str (script_api_bar_item_new (weechat_python_plugin,
+ python_current_script,
+ name,
+ &weechat_python_api_bar_item_build_cb,
+ function));
+
+ PYTHON_RETURN_STRING_FREE(result);
+}
+
+/*
+ * weechat_python_api_bar_item_update: update a bar item on screen
+ */
+
+static PyObject *
+weechat_python_api_bar_item_update (PyObject *self, PyObject *args)
+{
+ char *name;
+
+ /* make C compiler happy */
+ (void) self;
+
+ if (!python_current_script)
+ {
+ WEECHAT_SCRIPT_MSG_NOT_INITIALIZED("bar_item_update");
+ PYTHON_RETURN_ERROR;
+ }
+
+ name = NULL;
+
+ if (!PyArg_ParseTuple (args, "s", &name))
+ {
+ WEECHAT_SCRIPT_MSG_WRONG_ARGUMENTS("bar_item_update");
+ PYTHON_RETURN_ERROR;
+ }
+
+ weechat_bar_item_update (name);
+
+ PYTHON_RETURN_OK;
+}
+
+/*
+ * weechat_python_api_bar_item_remove: remove a bar item
+ */
+
+static PyObject *
+weechat_python_api_bar_item_remove (PyObject *self, PyObject *args)
+{
+ char *item;
+
+ /* make C compiler happy */
+ (void) self;
+
+ if (!python_current_script)
+ {
+ WEECHAT_SCRIPT_MSG_NOT_INITIALIZED("bar_item_remove");
+ PYTHON_RETURN_ERROR;
+ }
+
+ item = NULL;
+
+ if (!PyArg_ParseTuple (args, "s", &item))
+ {
+ WEECHAT_SCRIPT_MSG_WRONG_ARGUMENTS("bar_item_remove");
+ PYTHON_RETURN_ERROR;
+ }
+
+ script_api_bar_item_remove (weechat_python_plugin,
+ python_current_script,
+ script_str2ptr (item));
+
+ PYTHON_RETURN_OK;
+}
+
+/*
+ * weechat_python_api_bar_search: search a bar
+ */
+
+static PyObject *
+weechat_python_api_bar_search (PyObject *self, PyObject *args)
+{
+ char *name, *result;
+ PyObject *object;
+
+ /* make C compiler happy */
+ (void) self;
+
+ if (!python_current_script)
+ {
+ WEECHAT_SCRIPT_MSG_NOT_INITIALIZED("bar_search");
+ PYTHON_RETURN_EMPTY;
+ }
+
+ name = NULL;
+
+ if (!PyArg_ParseTuple (args, "s", &name))
+ {
+ WEECHAT_SCRIPT_MSG_WRONG_ARGUMENTS("bar_search");
+ PYTHON_RETURN_EMPTY;
+ }
+
+ result = script_ptr2str (weechat_bar_search (name));
+
+ PYTHON_RETURN_STRING_FREE(result);
+}
+
+/*
+ * weechat_python_api_bar_new: add a new bar
+ */
+
+static PyObject *
+weechat_python_api_bar_new (PyObject *self, PyObject *args)
+{
+ char *name, *type, *position, *items, *result;
+ int size, separator;
+ PyObject *object;
+
+ /* make C compiler happy */
+ (void) self;
+
+ if (!python_current_script)
+ {
+ WEECHAT_SCRIPT_MSG_NOT_INITIALIZED("bar_new");
+ PYTHON_RETURN_EMPTY;
+ }
+
+ name = NULL;
+ type = NULL;
+ position = NULL;
+ size = 0;
+ separator = 0;
+ items = NULL;
+
+ if (!PyArg_ParseTuple (args, "sssiis", &name, &type, &position, &size,
+ &separator, &items))
+ {
+ WEECHAT_SCRIPT_MSG_WRONG_ARGUMENTS("bar_new");
+ PYTHON_RETURN_EMPTY;
+ }
+
+ result = script_ptr2str (weechat_bar_new (name,
+ type,
+ position,
+ size,
+ separator,
+ items));
+
+ PYTHON_RETURN_STRING_FREE(result);
+}
+
+/*
+ * weechat_python_api_bar_update: update a bar on screen
+ */
+
+static PyObject *
+weechat_python_api_bar_update (PyObject *self, PyObject *args)
+{
+ char *name;
+
+ /* make C compiler happy */
+ (void) self;
+
+ if (!python_current_script)
+ {
+ WEECHAT_SCRIPT_MSG_NOT_INITIALIZED("bar_item");
+ PYTHON_RETURN_ERROR;
+ }
+
+ name = NULL;
+
+ if (!PyArg_ParseTuple (args, "s", &name))
+ {
+ WEECHAT_SCRIPT_MSG_WRONG_ARGUMENTS("bar_item");
+ PYTHON_RETURN_ERROR;
+ }
+
+ weechat_bar_update (name);
+
+ PYTHON_RETURN_OK;
+}
+
+/*
+ * weechat_python_api_bar_remove: remove a bar
+ */
+
+static PyObject *
+weechat_python_api_bar_remove (PyObject *self, PyObject *args)
+{
+ char *bar;
+
+ /* make C compiler happy */
+ (void) self;
+
+ if (!python_current_script)
+ {
+ WEECHAT_SCRIPT_MSG_NOT_INITIALIZED("bar_remove");
+ PYTHON_RETURN_ERROR;
+ }
+
+ bar = NULL;
+
+ if (!PyArg_ParseTuple (args, "s", &bar))
+ {
+ WEECHAT_SCRIPT_MSG_WRONG_ARGUMENTS("bar_remove");
+ PYTHON_RETURN_ERROR;
+ }
+
+ weechat_bar_remove (script_str2ptr (bar));
+
+ PYTHON_RETURN_OK;
+}
+
+/*
* weechat_python_api_command: send command to server
*/
@@ -2992,10 +3342,309 @@ weechat_python_api_info_get (PyObject *self, PyObject *args)
}
value = weechat_info_get (info);
+
+ PYTHON_RETURN_STRING(value);
+}
+
+/*
+ * weechat_python_api_infolist_get: get list with infos
+ */
+
+static PyObject *
+weechat_python_api_infolist_get (PyObject *self, PyObject *args)
+{
+ char *name, *pointer, *value;
+ PyObject *object;
+
+ /* make C compiler happy */
+ (void) self;
+
+ if (!python_current_script)
+ {
+ WEECHAT_SCRIPT_MSG_NOT_INITIALIZED("infolist_get");
+ PYTHON_RETURN_EMPTY;
+ }
+
+ name = NULL;
+ pointer = NULL;
+
+ if (!PyArg_ParseTuple (args, "ss", &name, &pointer))
+ {
+ WEECHAT_SCRIPT_MSG_WRONG_ARGUMENTS("infolist_get");
+ PYTHON_RETURN_EMPTY;
+ }
+
+ value = script_ptr2str (weechat_infolist_get (name,
+ script_str2ptr (pointer)));
+
+ PYTHON_RETURN_STRING_FREE(value);
+}
+
+/*
+ * weechat_python_api_infolist_next: move item pointer to next item in infolist
+ */
+
+static PyObject *
+weechat_python_api_infolist_next (PyObject *self, PyObject *args)
+{
+ char *infolist;
+ int value;
+
+ /* make C compiler happy */
+ (void) self;
+
+ if (!python_current_script)
+ {
+ WEECHAT_SCRIPT_MSG_NOT_INITIALIZED("infolist_next");
+ PYTHON_RETURN_INT(0);
+ }
+
+ infolist = NULL;
+
+ if (!PyArg_ParseTuple (args, "s", &infolist))
+ {
+ WEECHAT_SCRIPT_MSG_WRONG_ARGUMENTS("infolist_next");
+ PYTHON_RETURN_INT(0);
+ }
+
+ value = weechat_infolist_next (script_str2ptr (infolist));
+
+ PYTHON_RETURN_INT(value);
+}
+
+/*
+ * weechat_python_api_infolist_prev: move item pointer to previous item in infolist
+ */
+
+static PyObject *
+weechat_python_api_infolist_prev (PyObject *self, PyObject *args)
+{
+ char *infolist;
+ int value;
+
+ /* make C compiler happy */
+ (void) self;
+
+ if (!python_current_script)
+ {
+ WEECHAT_SCRIPT_MSG_NOT_INITIALIZED("infolist_prev");
+ PYTHON_RETURN_INT(0);
+ }
+
+ infolist = NULL;
+
+ if (!PyArg_ParseTuple (args, "s", &infolist))
+ {
+ WEECHAT_SCRIPT_MSG_WRONG_ARGUMENTS("infolist_prev");
+ PYTHON_RETURN_INT(0);
+ }
+
+ value = weechat_infolist_prev (script_str2ptr (infolist));
+
+ PYTHON_RETURN_INT(value);
+}
+
+/*
+ * weechat_python_api_infolist_fields: get list of fields for current item of infolist
+ */
+
+static PyObject *
+weechat_python_api_infolist_fields (PyObject *self, PyObject *args)
+{
+ char *infolist, *value;
+
+ /* make C compiler happy */
+ (void) self;
+
+ if (!python_current_script)
+ {
+ WEECHAT_SCRIPT_MSG_NOT_INITIALIZED("infolist_fields");
+ PYTHON_RETURN_EMPTY;
+ }
+
+ infolist = NULL;
+
+ if (!PyArg_ParseTuple (args, "s", &infolist))
+ {
+ WEECHAT_SCRIPT_MSG_WRONG_ARGUMENTS("infolist_fields");
+ PYTHON_RETURN_EMPTY;
+ }
+
+ value = weechat_infolist_fields (script_str2ptr (infolist));
+
+ PYTHON_RETURN_STRING(value);
+}
+
+/*
+ * weechat_python_api_infolist_integer: get integer value of a variable in infolist
+ */
+
+static PyObject *
+weechat_python_api_infolist_integer (PyObject *self, PyObject *args)
+{
+ char *infolist, *variable;
+ int value;
+
+ /* make C compiler happy */
+ (void) self;
+
+ if (!python_current_script)
+ {
+ WEECHAT_SCRIPT_MSG_NOT_INITIALIZED("infolist_integer");
+ PYTHON_RETURN_INT(0);
+ }
+
+ infolist = NULL;
+ variable = NULL;
+
+ if (!PyArg_ParseTuple (args, "s&", &infolist, &variable))
+ {
+ WEECHAT_SCRIPT_MSG_WRONG_ARGUMENTS("infolist_integer");
+ PYTHON_RETURN_INT(0);
+ }
+
+ value = weechat_infolist_integer (script_str2ptr (infolist),
+ variable);
+
+ PYTHON_RETURN_INT(value);
+}
+
+/*
+ * weechat_python_api_infolist_string: get string value of a variable in infolist
+ */
+
+static PyObject *
+weechat_python_api_infolist_string (PyObject *self, PyObject *args)
+{
+ char *infolist, *variable, *value;
+
+ /* make C compiler happy */
+ (void) self;
+
+ if (!python_current_script)
+ {
+ WEECHAT_SCRIPT_MSG_NOT_INITIALIZED("infolist_string");
+ PYTHON_RETURN_EMPTY;
+ }
+
+ infolist = NULL;
+ variable = NULL;
+
+ if (!PyArg_ParseTuple (args, "ss", &infolist, &variable))
+ {
+ WEECHAT_SCRIPT_MSG_WRONG_ARGUMENTS("infolist_string");
+ PYTHON_RETURN_EMPTY;
+ }
+
+ value = weechat_infolist_string (script_str2ptr (infolist),
+ variable);
+
PYTHON_RETURN_STRING(value);
}
/*
+ * weechat_python_api_infolist_pointer: get pointer value of a variable in infolist
+ */
+
+static PyObject *
+weechat_python_api_infolist_pointer (PyObject *self, PyObject *args)
+{
+ char *infolist, *variable, *value;
+ PyObject *object;
+
+ /* make C compiler happy */
+ (void) self;
+
+ if (!python_current_script)
+ {
+ WEECHAT_SCRIPT_MSG_NOT_INITIALIZED("infolist_pointer");
+ PYTHON_RETURN_EMPTY;
+ }
+
+ infolist = NULL;
+ variable = NULL;
+
+ if (!PyArg_ParseTuple (args, "ss", &infolist, &variable))
+ {
+ WEECHAT_SCRIPT_MSG_WRONG_ARGUMENTS("infolist_pointer");
+ PYTHON_RETURN_EMPTY;
+ }
+
+ value = script_ptr2str (weechat_infolist_string (script_str2ptr (infolist),
+ variable));
+
+ PYTHON_RETURN_STRING_FREE(value);
+}
+
+/*
+ * weechat_python_api_infolist_time: get time value of a variable in infolist
+ */
+
+static PyObject *
+weechat_python_api_infolist_time (PyObject *self, PyObject *args)
+{
+ char *infolist, *variable, timebuffer[64], *value;
+ time_t time;
+ PyObject *object;
+
+ /* make C compiler happy */
+ (void) self;
+
+ if (!python_current_script)
+ {
+ WEECHAT_SCRIPT_MSG_NOT_INITIALIZED("infolist_time");
+ PYTHON_RETURN_EMPTY;
+ }
+
+ infolist = NULL;
+ variable = NULL;
+
+ if (!PyArg_ParseTuple (args, "ss", &infolist, &variable))
+ {
+ WEECHAT_SCRIPT_MSG_WRONG_ARGUMENTS("infolist_time");
+ PYTHON_RETURN_EMPTY;
+ }
+
+ time = weechat_infolist_time (script_str2ptr (infolist),
+ variable);
+ strftime (timebuffer, sizeof (timebuffer), "%F %T", localtime (&time));
+ value = strdup (timebuffer);
+
+ PYTHON_RETURN_STRING_FREE(value);
+}
+
+/*
+ * weechat_python_api_infolist_free: free infolist
+ */
+
+static PyObject *
+weechat_python_api_infolist_free (PyObject *self, PyObject *args)
+{
+ char *infolist;
+
+ /* make C compiler happy */
+ (void) self;
+
+ if (!python_current_script)
+ {
+ WEECHAT_SCRIPT_MSG_NOT_INITIALIZED("infolist_free");
+ PYTHON_RETURN_ERROR;
+ }
+
+ infolist = NULL;
+
+ if (!PyArg_ParseTuple (args, "s", &infolist))
+ {
+ WEECHAT_SCRIPT_MSG_WRONG_ARGUMENTS("infolist_free");
+ PYTHON_RETURN_ERROR;
+ }
+
+ weechat_infolist_free (script_str2ptr (infolist));
+
+ PYTHON_RETURN_OK;
+}
+
+/*
* Python subroutines
*/
@@ -3068,7 +3717,24 @@ PyMethodDef weechat_python_funcs[] =
{ "nicklist_remove_group", &weechat_python_api_nicklist_remove_group, METH_VARARGS, "" },
{ "nicklist_remove_nick", &weechat_python_api_nicklist_remove_nick, METH_VARARGS, "" },
{ "nicklist_remove_all", &weechat_python_api_nicklist_remove_all, METH_VARARGS, "" },
+ { "bar_item_search", &weechat_python_api_bar_item_search, METH_VARARGS, "" },
+ { "bar_item_new", &weechat_python_api_bar_item_new, METH_VARARGS, "" },
+ { "bar_item_update", &weechat_python_api_bar_item_update, METH_VARARGS, "" },
+ { "bar_item_remove", &weechat_python_api_bar_item_remove, METH_VARARGS, "" },
+ { "bar_search", &weechat_python_api_bar_search, METH_VARARGS, "" },
+ { "bar_new", &weechat_python_api_bar_new, METH_VARARGS, "" },
+ { "bar_update", &weechat_python_api_bar_update, METH_VARARGS, "" },
+ { "bar_remove", &weechat_python_api_bar_remove, METH_VARARGS, "" },
{ "command", &weechat_python_api_command, METH_VARARGS, "" },
{ "info_get", &weechat_python_api_info_get, METH_VARARGS, "" },
+ { "infolist_get", &weechat_python_api_infolist_get, METH_VARARGS, "" },
+ { "infolist_next", &weechat_python_api_infolist_next, METH_VARARGS, "" },
+ { "infolist_prev", &weechat_python_api_infolist_prev, METH_VARARGS, "" },
+ { "infolist_fields", &weechat_python_api_infolist_fields, METH_VARARGS, "" },
+ { "infolist_integer", &weechat_python_api_infolist_integer, METH_VARARGS, "" },
+ { "infolist_string", &weechat_python_api_infolist_string, METH_VARARGS, "" },
+ { "infolist_pointer", &weechat_python_api_infolist_pointer, METH_VARARGS, "" },
+ { "infolist_time", &weechat_python_api_infolist_time, METH_VARARGS, "" },
+ { "infolist_free", &weechat_python_api_infolist_free, METH_VARARGS, "" },
{ NULL, NULL, 0, NULL }
};
diff --git a/src/plugins/scripts/ruby/weechat-ruby-api.c b/src/plugins/scripts/ruby/weechat-ruby-api.c
index 8dc1d388f..152e3d5f6 100644
--- a/src/plugins/scripts/ruby/weechat-ruby-api.c
+++ b/src/plugins/scripts/ruby/weechat-ruby-api.c
@@ -202,6 +202,7 @@ weechat_ruby_api_iconv_to_internal (VALUE class, VALUE charset, VALUE string)
c_string = STR2CSTR (string);
result = weechat_iconv_to_internal (c_charset, c_string);
+
RUBY_RETURN_STRING_FREE(result);
}
@@ -241,6 +242,7 @@ weechat_ruby_api_iconv_from_internal (VALUE class, VALUE charset, VALUE string)
c_string = STR2CSTR (string);
result = weechat_iconv_from_internal (c_charset, c_string);
+
RUBY_RETURN_STRING_FREE(result);
}
@@ -275,6 +277,7 @@ weechat_ruby_api_gettext (VALUE class, VALUE string)
c_string = STR2CSTR (string);
result = weechat_gettext (c_string);
+
RUBY_RETURN_STRING(result);
}
@@ -317,6 +320,7 @@ weechat_ruby_api_ngettext (VALUE class, VALUE single, VALUE plural,
c_count = FIX2INT (count);
result = weechat_ngettext (c_single, c_plural, c_count);
+
RUBY_RETURN_STRING(result);
}
@@ -419,6 +423,7 @@ weechat_ruby_api_list_new (VALUE class)
}
result = script_ptr2str (weechat_list_new ());
+
RUBY_RETURN_STRING(result);
}
@@ -461,6 +466,7 @@ weechat_ruby_api_list_add (VALUE class, VALUE weelist, VALUE data, VALUE where)
result = script_ptr2str (weechat_list_add (script_str2ptr(c_weelist),
c_data,
c_where));
+
RUBY_RETURN_STRING(result);
}
@@ -499,6 +505,7 @@ weechat_ruby_api_list_search (VALUE class, VALUE weelist, VALUE data)
result = script_ptr2str (weechat_list_search (script_str2ptr(c_weelist),
c_data));
+
RUBY_RETURN_STRING(result);
}
@@ -537,6 +544,7 @@ weechat_ruby_api_list_casesearch (VALUE class, VALUE weelist, VALUE data)
result = script_ptr2str (weechat_list_casesearch (script_str2ptr(c_weelist),
c_data));
+
RUBY_RETURN_STRING(result);
}
@@ -576,6 +584,7 @@ weechat_ruby_api_list_get (VALUE class, VALUE weelist, VALUE position)
result = script_ptr2str (weechat_list_get (script_str2ptr(c_weelist),
c_position));
+
RUBY_RETURN_STRING(result);
}
@@ -649,6 +658,7 @@ weechat_ruby_api_list_next (VALUE class, VALUE item)
c_item = STR2CSTR (item);
result = script_ptr2str (weechat_list_next (script_str2ptr(c_item)));
+
RUBY_RETURN_STRING(result);
}
@@ -683,6 +693,7 @@ weechat_ruby_api_list_prev (VALUE class, VALUE item)
c_item = STR2CSTR (item);
result = script_ptr2str (weechat_list_prev (script_str2ptr(c_item)));
+
RUBY_RETURN_STRING(result);
}
@@ -717,6 +728,7 @@ weechat_ruby_api_list_string (VALUE class, VALUE item)
c_item = STR2CSTR (item);
result = weechat_list_string (script_str2ptr(c_item));
+
RUBY_RETURN_STRING(result);
}
@@ -752,6 +764,7 @@ weechat_ruby_api_list_size (VALUE class, VALUE weelist)
c_weelist = STR2CSTR (weelist);
size = weechat_list_size (script_str2ptr(c_weelist));
+
RUBY_RETURN_INT(size);
}
@@ -943,6 +956,7 @@ weechat_ruby_api_config_new (VALUE class, VALUE filename, VALUE function)
c_filename,
&weechat_ruby_api_config_reload_cb,
c_function));
+
RUBY_RETURN_STRING_FREE(result);
}
@@ -1105,6 +1119,7 @@ weechat_ruby_api_config_new_section (VALUE class, VALUE config_file,
c_function_write,
&weechat_ruby_api_config_section_write_default_cb,
c_function_write_default));
+
RUBY_RETURN_STRING_FREE(result);
}
@@ -1145,6 +1160,7 @@ weechat_ruby_api_config_search_section (VALUE class, VALUE config_file,
result = script_ptr2str (weechat_config_search_section (script_str2ptr (c_config_file),
c_section_name));
+
RUBY_RETURN_STRING_FREE(result);
}
@@ -1254,6 +1270,7 @@ weechat_ruby_api_config_new_option (VALUE class, VALUE config_file,
c_default_value,
&weechat_ruby_api_config_option_change_cb,
c_function));
+
RUBY_RETURN_STRING_FREE(result);
}
@@ -1298,6 +1315,7 @@ weechat_ruby_api_config_search_option (VALUE class, VALUE config_file,
result = script_ptr2str (weechat_config_search_option (script_str2ptr (c_config_file),
script_str2ptr (c_section),
c_option_name));
+
RUBY_RETURN_STRING_FREE(result);
}
@@ -1333,6 +1351,7 @@ weechat_ruby_api_config_string_to_boolean (VALUE class, VALUE text)
c_text = STR2CSTR (text);
value = weechat_config_string_to_boolean (c_text);
+
RUBY_RETURN_INT(value);
}
@@ -1377,6 +1396,7 @@ weechat_ruby_api_config_option_set (VALUE class, VALUE option, VALUE new_value,
rc = weechat_config_option_set (script_str2ptr (c_option),
c_new_value,
c_run_callback);
+
RUBY_RETURN_INT(rc);
}
@@ -1412,6 +1432,7 @@ weechat_ruby_api_config_boolean (VALUE class, VALUE option)
c_option = STR2CSTR (option);
value = weechat_config_boolean (script_str2ptr (c_option));
+
RUBY_RETURN_INT(value);
}
@@ -1447,6 +1468,7 @@ weechat_ruby_api_config_integer (VALUE class, VALUE option)
c_option = STR2CSTR (option);
value = weechat_config_integer (script_str2ptr (c_option));
+
RUBY_RETURN_INT(value);
}
@@ -1481,6 +1503,7 @@ weechat_ruby_api_config_string (VALUE class, VALUE option)
c_option = STR2CSTR (option);
value = weechat_config_string (script_str2ptr (c_option));
+
RUBY_RETURN_STRING(value);
}
@@ -1516,6 +1539,7 @@ weechat_ruby_api_config_color (VALUE class, VALUE option)
c_option = STR2CSTR (option);
value = weechat_config_color (script_str2ptr (c_option));
+
RUBY_RETURN_INT(value);
}
@@ -1596,6 +1620,7 @@ weechat_ruby_api_config_write (VALUE class, VALUE config_file)
c_config_file = STR2CSTR (config_file);
rc = weechat_config_write (script_str2ptr (c_config_file));
+
RUBY_RETURN_INT(rc);
}
@@ -1631,6 +1656,7 @@ weechat_ruby_api_config_read (VALUE class, VALUE config_file)
c_config_file = STR2CSTR (config_file);
rc = weechat_config_read (script_str2ptr (c_config_file));
+
RUBY_RETURN_INT(rc);
}
@@ -1666,6 +1692,7 @@ weechat_ruby_api_config_reload (VALUE class, VALUE config_file)
c_config_file = STR2CSTR (config_file);
rc = weechat_config_reload (script_str2ptr (c_config_file));
+
RUBY_RETURN_INT(rc);
}
@@ -1737,6 +1764,7 @@ weechat_ruby_api_prefix (VALUE class, VALUE prefix)
c_prefix = STR2CSTR (prefix);
result = weechat_prefix (c_prefix);
+
RUBY_RETURN_STRING(result);
}
@@ -1771,6 +1799,7 @@ weechat_ruby_api_color (VALUE class, VALUE color)
c_color = STR2CSTR (color);
result = weechat_color (c_color);
+
RUBY_RETURN_STRING(result);
}
@@ -2031,6 +2060,7 @@ weechat_ruby_api_hook_command (VALUE class, VALUE command, VALUE description,
c_completion,
&weechat_ruby_api_hook_command_cb,
c_function));
+
RUBY_RETURN_STRING_FREE(result);
}
@@ -2115,6 +2145,7 @@ weechat_ruby_api_hook_timer (VALUE class, VALUE interval, VALUE align_second,
c_max_calls,
&weechat_ruby_api_hook_timer_cb,
c_function));
+
RUBY_RETURN_STRING_FREE(result);
}
@@ -2203,6 +2234,7 @@ weechat_ruby_api_hook_fd (VALUE class, VALUE fd, VALUE read, VALUE write,
c_exception,
&weechat_ruby_api_hook_fd_cb,
c_function));
+
RUBY_RETURN_STRING_FREE(result);
}
@@ -2297,6 +2329,7 @@ weechat_ruby_api_hook_print (VALUE class, VALUE buffer, VALUE message,
c_strip_colors,
&weechat_ruby_api_hook_print_cb,
c_function));
+
RUBY_RETURN_STRING_FREE(result);
}
@@ -2393,6 +2426,7 @@ weechat_ruby_api_hook_signal (VALUE class, VALUE signal, VALUE function)
c_signal,
&weechat_ruby_api_hook_signal_cb,
c_function));
+
RUBY_RETURN_STRING_FREE(result);
}
@@ -2537,6 +2571,7 @@ weechat_ruby_api_hook_config (VALUE class, VALUE type, VALUE option,
c_option,
&weechat_ruby_api_hook_config_cb,
c_function));
+
RUBY_RETURN_STRING_FREE(result);
}
@@ -2620,6 +2655,7 @@ weechat_ruby_api_hook_completion (VALUE class, VALUE completion,
c_completion,
&weechat_ruby_api_hook_completion_cb,
c_function));
+
RUBY_RETURN_STRING_FREE(result);
}
@@ -2686,6 +2722,7 @@ weechat_ruby_api_hook_modifier (VALUE class, VALUE modifier, VALUE function)
c_modifier,
&weechat_ruby_api_hook_modifier_cb,
c_function));
+
RUBY_RETURN_STRING_FREE(result);
}
@@ -2728,6 +2765,7 @@ weechat_ruby_api_hook_modifier_exec (VALUE class, VALUE modifier,
c_string = STR2CSTR (string);
result = weechat_hook_modifier_exec (c_modifier, c_modifier_data, c_string);
+
RUBY_RETURN_STRING_FREE(result);
}
@@ -2909,6 +2947,7 @@ weechat_ruby_api_buffer_new (VALUE class, VALUE category, VALUE name,
c_function_input,
&weechat_ruby_api_close_cb,
c_function_close));
+
RUBY_RETURN_STRING_FREE(result);
}
@@ -2947,6 +2986,7 @@ weechat_ruby_api_buffer_search (VALUE class, VALUE category, VALUE name)
c_name = STR2CSTR (name);
result = script_ptr2str (weechat_buffer_search (c_category, c_name));
+
RUBY_RETURN_STRING_FREE(result);
}
@@ -3025,6 +3065,7 @@ weechat_ruby_api_buffer_get (VALUE class, VALUE buffer, VALUE property)
value = weechat_buffer_get (script_str2ptr (c_buffer),
c_property);
+
RUBY_RETURN_STRING(value);
}
@@ -3120,6 +3161,7 @@ weechat_ruby_api_nicklist_add_group (VALUE class, VALUE buffer,
c_name,
c_color,
c_visible));
+
RUBY_RETURN_STRING_FREE(result);
}
@@ -3164,6 +3206,7 @@ weechat_ruby_api_nicklist_search_group (VALUE class, VALUE buffer,
result = script_ptr2str (weechat_nicklist_search_group (script_str2ptr (c_buffer),
script_str2ptr (c_from_group),
c_name));
+
RUBY_RETURN_STRING_FREE(result);
}
@@ -3233,6 +3276,7 @@ weechat_ruby_api_nicklist_add_nick (VALUE class, VALUE buffer, VALUE group,
char_prefix,
c_prefix_color,
c_visible));
+
RUBY_RETURN_STRING_FREE(result);
}
@@ -3277,6 +3321,7 @@ weechat_ruby_api_nicklist_search_nick (VALUE class, VALUE buffer,
result = script_ptr2str (weechat_nicklist_search_nick (script_str2ptr (c_buffer),
script_str2ptr (c_from_group),
c_name));
+
RUBY_RETURN_STRING_FREE(result);
}
@@ -3386,6 +3431,349 @@ weechat_ruby_api_nicklist_remove_all (VALUE class, VALUE buffer)
}
/*
+ * weechat_ruby_api_bar_item_search: search a bar item
+ */
+
+static VALUE
+weechat_ruby_api_bar_item_search (VALUE class, VALUE name)
+{
+ char *c_name, *result;
+ VALUE return_value;
+
+ /* make C compiler happy */
+ (void) class;
+
+ if (!ruby_current_script)
+ {
+ WEECHAT_SCRIPT_MSG_NOT_INITIALIZED("bar_item_search");
+ RUBY_RETURN_EMPTY;
+ }
+
+ c_name = NULL;
+
+ if (NIL_P (name))
+ {
+ WEECHAT_SCRIPT_MSG_WRONG_ARGUMENTS("bar_item_search");
+ RUBY_RETURN_EMPTY;
+ }
+
+ Check_Type (name, T_STRING);
+
+ c_name = STR2CSTR (name);
+
+ result = script_ptr2str (weechat_bar_item_search (c_name));
+
+ RUBY_RETURN_STRING_FREE(result);
+}
+
+/*
+ * weechat_ruby_api_bar_item_build_cb: callback for building bar item
+ */
+
+char *
+weechat_ruby_api_bar_item_build_cb (void *data, struct t_gui_bar_item *item,
+ struct t_gui_window *window,
+ int max_width)
+{
+ struct t_script_callback *script_callback;
+ char *ruby_argv[4], *ret;
+ static char buf[32];
+
+ script_callback = (struct t_script_callback *)data;
+
+ snprintf (buf, sizeof (buf) - 1, "%d", max_width);
+
+ ruby_argv[0] = script_ptr2str (item);
+ ruby_argv[1] = script_ptr2str (window);
+ ruby_argv[2] = buf;
+ ruby_argv[3] = NULL;
+
+ ret = (char *)weechat_ruby_exec (script_callback->script,
+ WEECHAT_SCRIPT_EXEC_STRING,
+ script_callback->function,
+ ruby_argv);
+
+ if (ruby_argv[0])
+ free (ruby_argv[0]);
+ if (ruby_argv[1])
+ free (ruby_argv[1]);
+
+ return ret;
+}
+
+/*
+ * weechat_ruby_api_bar_item_new: add a new bar item
+ */
+
+static VALUE
+weechat_ruby_api_bar_item_new (VALUE class, VALUE name, VALUE function)
+{
+ char *c_name, *c_function, *result;
+ VALUE return_value;
+
+ /* make C compiler happy */
+ (void) class;
+
+ if (!ruby_current_script)
+ {
+ WEECHAT_SCRIPT_MSG_NOT_INITIALIZED("bar_item_new");
+ RUBY_RETURN_EMPTY;
+ }
+
+ c_name = NULL;
+ c_function = NULL;
+
+ if (NIL_P (name) || NIL_P (function))
+ {
+ WEECHAT_SCRIPT_MSG_WRONG_ARGUMENTS("bar_item_new");
+ RUBY_RETURN_EMPTY;
+ }
+
+ Check_Type (name, T_STRING);
+ Check_Type (function, T_STRING);
+
+ c_name = STR2CSTR (name);
+ c_function = STR2CSTR (function);
+
+ result = script_ptr2str (script_api_bar_item_new (weechat_ruby_plugin,
+ ruby_current_script,
+ c_name,
+ &weechat_ruby_api_bar_item_build_cb,
+ c_function));
+
+ RUBY_RETURN_STRING_FREE(result);
+}
+
+/*
+ * weechat_ruby_api_bar_item_update: update a bar item on screen
+ */
+
+static VALUE
+weechat_ruby_api_bar_item_update (VALUE class, VALUE name)
+{
+ char *c_name;
+
+ /* make C compiler happy */
+ (void) class;
+
+ if (!ruby_current_script)
+ {
+ WEECHAT_SCRIPT_MSG_NOT_INITIALIZED("bar_item_update");
+ RUBY_RETURN_ERROR;
+ }
+
+ if (NIL_P (name))
+ {
+ WEECHAT_SCRIPT_MSG_WRONG_ARGUMENTS("bar_item_update");
+ RUBY_RETURN_ERROR;
+ }
+
+ Check_Type (name, T_STRING);
+
+ c_name = STR2CSTR (name);
+
+ weechat_bar_item_update (c_name);
+
+ RUBY_RETURN_OK;
+}
+
+/*
+ * weechat_ruby_api_bar_item_remove: remove a bar item
+ */
+
+static VALUE
+weechat_ruby_api_bar_item_remove (VALUE class, VALUE item)
+{
+ char *c_item;
+
+ /* make C compiler happy */
+ (void) class;
+
+ if (!ruby_current_script)
+ {
+ WEECHAT_SCRIPT_MSG_NOT_INITIALIZED("bar_item_remove");
+ RUBY_RETURN_ERROR;
+ }
+
+ if (NIL_P (item))
+ {
+ WEECHAT_SCRIPT_MSG_WRONG_ARGUMENTS("bar_item_remove");
+ RUBY_RETURN_ERROR;
+ }
+
+ Check_Type (item, T_STRING);
+
+ c_item = STR2CSTR (item);
+
+ script_api_bar_item_remove (weechat_ruby_plugin,
+ ruby_current_script,
+ script_str2ptr (c_item));
+
+ RUBY_RETURN_OK;
+}
+
+/*
+ * weechat_ruby_api_bar_search: search a bar
+ */
+
+static VALUE
+weechat_ruby_api_bar_search (VALUE class, VALUE name)
+{
+ char *c_name, *result;
+ VALUE return_value;
+
+ /* make C compiler happy */
+ (void) class;
+
+ if (!ruby_current_script)
+ {
+ WEECHAT_SCRIPT_MSG_NOT_INITIALIZED("bar_search");
+ RUBY_RETURN_EMPTY;
+ }
+
+ c_name = NULL;
+
+ if (NIL_P (name))
+ {
+ WEECHAT_SCRIPT_MSG_WRONG_ARGUMENTS("bar_search");
+ RUBY_RETURN_EMPTY;
+ }
+
+ Check_Type (name, T_STRING);
+
+ c_name = STR2CSTR (name);
+
+ result = script_ptr2str (weechat_bar_search (c_name));
+
+ RUBY_RETURN_STRING_FREE(result);
+}
+
+/*
+ * weechat_ruby_api_bar_new: add a new bar
+ */
+
+static VALUE
+weechat_ruby_api_bar_new (VALUE class, VALUE name, VALUE type, VALUE position,
+ VALUE size, VALUE separator, VALUE items)
+{
+ char *c_name, *c_type, *c_position, *c_items, *result;
+ int c_size, c_separator;
+ VALUE return_value;
+
+ /* make C compiler happy */
+ (void) class;
+
+ if (!ruby_current_script)
+ {
+ WEECHAT_SCRIPT_MSG_NOT_INITIALIZED("bar_new");
+ RUBY_RETURN_EMPTY;
+ }
+
+ c_name = NULL;
+ c_type = NULL;
+ c_position = NULL;
+ c_size = 0;
+ c_separator = 0;
+ c_items = NULL;
+
+ if (NIL_P (name) || NIL_P (type) || NIL_P (position) || NIL_P (size)
+ || NIL_P (separator) || NIL_P (items))
+ {
+ WEECHAT_SCRIPT_MSG_WRONG_ARGUMENTS("bar_new");
+ RUBY_RETURN_EMPTY;
+ }
+
+ Check_Type (name, T_STRING);
+ Check_Type (type, T_STRING);
+ Check_Type (position, T_STRING);
+ Check_Type (size, T_FIXNUM);
+ Check_Type (separator, T_FIXNUM);
+ Check_Type (items, T_STRING);
+
+ c_name = STR2CSTR (name);
+ c_type = STR2CSTR (type);
+ c_position = STR2CSTR (position);
+ c_size = FIX2INT (size);
+ c_separator = FIX2INT (separator);
+ c_items = STR2CSTR (items);
+
+ result = script_ptr2str (weechat_bar_new (c_name,
+ c_type,
+ c_position,
+ c_size,
+ c_separator,
+ c_items));
+
+ RUBY_RETURN_STRING_FREE(result);
+}
+
+/*
+ * weechat_ruby_api_bar_update: update a bar on screen
+ */
+
+static VALUE
+weechat_ruby_api_bar_update (VALUE class, VALUE name)
+{
+ char *c_name;
+
+ /* make C compiler happy */
+ (void) class;
+
+ if (!ruby_current_script)
+ {
+ WEECHAT_SCRIPT_MSG_NOT_INITIALIZED("bar_update");
+ RUBY_RETURN_ERROR;
+ }
+
+ if (NIL_P (name))
+ {
+ WEECHAT_SCRIPT_MSG_WRONG_ARGUMENTS("bar_update");
+ RUBY_RETURN_ERROR;
+ }
+
+ Check_Type (name, T_STRING);
+
+ c_name = STR2CSTR (name);
+
+ weechat_bar_update (c_name);
+
+ RUBY_RETURN_OK;
+}
+
+/*
+ * weechat_ruby_api_bar_remove: remove a bar
+ */
+
+static VALUE
+weechat_ruby_api_bar_remove (VALUE class, VALUE bar)
+{
+ char *c_bar;
+
+ /* make C compiler happy */
+ (void) class;
+
+ if (!ruby_current_script)
+ {
+ WEECHAT_SCRIPT_MSG_NOT_INITIALIZED("bar_remove");
+ RUBY_RETURN_ERROR;
+ }
+
+ if (NIL_P (bar))
+ {
+ WEECHAT_SCRIPT_MSG_WRONG_ARGUMENTS("bar_remove");
+ RUBY_RETURN_ERROR;
+ }
+
+ Check_Type (bar, T_STRING);
+
+ c_bar = STR2CSTR (bar);
+
+ weechat_bar_remove (script_str2ptr (c_bar));
+
+ RUBY_RETURN_OK;
+}
+
+/*
* weechat_ruby_api_command: send command to server
*/
@@ -3452,10 +3840,327 @@ weechat_ruby_api_info_get (VALUE class, VALUE info)
c_info = STR2CSTR (info);
value = weechat_info_get (c_info);
+
RUBY_RETURN_STRING(value);
}
/*
+ * weechat_ruby_api_infolist_get: get list with infos
+ */
+
+static VALUE
+weechat_ruby_api_infolist_get (VALUE class, VALUE name, VALUE pointer)
+{
+ char *c_name, *c_pointer, *value;
+ VALUE return_value;
+
+ /* make C compiler happy */
+ (void) class;
+
+ if (!ruby_current_script)
+ {
+ WEECHAT_SCRIPT_MSG_NOT_INITIALIZED("infolist_get");
+ RUBY_RETURN_EMPTY;
+ }
+
+ if (NIL_P (name) || NIL_P (pointer))
+ {
+ WEECHAT_SCRIPT_MSG_WRONG_ARGUMENTS("infolist_get");
+ RUBY_RETURN_EMPTY;
+ }
+
+ Check_Type (name, T_STRING);
+ Check_Type (pointer, T_STRING);
+
+ c_name = STR2CSTR (name);
+ c_pointer = STR2CSTR (pointer);
+
+ value = script_ptr2str (weechat_infolist_get (c_name, script_str2ptr (c_pointer)));
+
+ RUBY_RETURN_STRING_FREE(value);
+}
+
+/*
+ * weechat_ruby_api_infolist_next: move item pointer to next item in infolist
+ */
+
+static VALUE
+weechat_ruby_api_infolist_next (VALUE class, VALUE infolist)
+{
+ char *c_infolist;
+ int value;
+
+ /* make C compiler happy */
+ (void) class;
+
+ if (!ruby_current_script)
+ {
+ WEECHAT_SCRIPT_MSG_NOT_INITIALIZED("infolist_next");
+ RUBY_RETURN_INT(0);
+ }
+
+ if (NIL_P (infolist))
+ {
+ WEECHAT_SCRIPT_MSG_WRONG_ARGUMENTS("infolist_next");
+ RUBY_RETURN_INT(0);
+ }
+
+ Check_Type (infolist, T_STRING);
+
+ c_infolist = STR2CSTR (infolist);
+
+ value = weechat_infolist_next (script_str2ptr (c_infolist));
+
+ RUBY_RETURN_INT(value);
+}
+
+/*
+ * weechat_ruby_api_infolist_prev: move item pointer to previous item in infolist
+ */
+
+static VALUE
+weechat_ruby_api_infolist_prev (VALUE class, VALUE infolist)
+{
+ char *c_infolist;
+ int value;
+
+ /* make C compiler happy */
+ (void) class;
+
+ if (!ruby_current_script)
+ {
+ WEECHAT_SCRIPT_MSG_NOT_INITIALIZED("infolist_prev");
+ RUBY_RETURN_INT(0);
+ }
+
+ if (NIL_P (infolist))
+ {
+ WEECHAT_SCRIPT_MSG_WRONG_ARGUMENTS("infolist_prev");
+ RUBY_RETURN_INT(0);
+ }
+
+ Check_Type (infolist, T_STRING);
+
+ c_infolist = STR2CSTR (infolist);
+
+ value = weechat_infolist_prev (script_str2ptr (c_infolist));
+
+ RUBY_RETURN_INT(value);
+}
+
+/*
+ * weechat_ruby_api_infolist_fields: get list of fields for current item of infolist
+ */
+
+static VALUE
+weechat_ruby_api_infolist_fields (VALUE class, VALUE infolist)
+{
+ char *c_infolist, *value;
+
+ /* make C compiler happy */
+ (void) class;
+
+ if (!ruby_current_script)
+ {
+ WEECHAT_SCRIPT_MSG_NOT_INITIALIZED("infolist_fields");
+ RUBY_RETURN_EMPTY;
+ }
+
+ if (NIL_P (infolist))
+ {
+ WEECHAT_SCRIPT_MSG_WRONG_ARGUMENTS("infolist_fields");
+ RUBY_RETURN_EMPTY;
+ }
+
+ Check_Type (infolist, T_STRING);
+
+ c_infolist = STR2CSTR (infolist);
+
+ value = weechat_infolist_fields (script_str2ptr (c_infolist));
+
+ RUBY_RETURN_STRING(value);
+}
+
+/*
+ * weechat_ruby_api_infolist_integer: get integer value of a variable in infolist
+ */
+
+static VALUE
+weechat_ruby_api_infolist_integer (VALUE class, VALUE infolist, VALUE variable)
+{
+ char *c_infolist, *c_variable;
+ int value;
+
+ /* make C compiler happy */
+ (void) class;
+
+ if (!ruby_current_script)
+ {
+ WEECHAT_SCRIPT_MSG_NOT_INITIALIZED("infolist_integer");
+ RUBY_RETURN_INT(0);
+ }
+
+ if (NIL_P (infolist) || NIL_P (variable))
+ {
+ WEECHAT_SCRIPT_MSG_WRONG_ARGUMENTS("infolist_integer");
+ RUBY_RETURN_INT(0);
+ }
+
+ Check_Type (infolist, T_STRING);
+ Check_Type (variable, T_STRING);
+
+ c_infolist = STR2CSTR (infolist);
+ c_variable = STR2CSTR (variable);
+
+ value = weechat_infolist_integer (script_str2ptr (c_infolist), c_variable);
+
+ RUBY_RETURN_INT(value);
+}
+
+/*
+ * weechat_ruby_api_infolist_string: get string value of a variable in infolist
+ */
+
+static VALUE
+weechat_ruby_api_infolist_string (VALUE class, VALUE infolist, VALUE variable)
+{
+ char *c_infolist, *c_variable, *value;
+
+ /* make C compiler happy */
+ (void) class;
+
+ if (!ruby_current_script)
+ {
+ WEECHAT_SCRIPT_MSG_NOT_INITIALIZED("infolist_string");
+ RUBY_RETURN_EMPTY;
+ }
+
+ if (NIL_P (infolist) || NIL_P (variable))
+ {
+ WEECHAT_SCRIPT_MSG_WRONG_ARGUMENTS("infolist_string");
+ RUBY_RETURN_EMPTY;
+ }
+
+ Check_Type (infolist, T_STRING);
+ Check_Type (variable, T_STRING);
+
+ c_infolist = STR2CSTR (infolist);
+ c_variable = STR2CSTR (variable);
+
+ value = weechat_infolist_string (script_str2ptr (c_infolist), c_variable);
+
+ RUBY_RETURN_STRING(value);
+}
+
+/*
+ * weechat_ruby_api_infolist_pointer: get pointer value of a variable in infolist
+ */
+
+static VALUE
+weechat_ruby_api_infolist_pointer (VALUE class, VALUE infolist, VALUE variable)
+{
+ char *c_infolist, *c_variable, *value;
+ VALUE return_value;
+
+ /* make C compiler happy */
+ (void) class;
+
+ if (!ruby_current_script)
+ {
+ WEECHAT_SCRIPT_MSG_NOT_INITIALIZED("infolist_pointer");
+ RUBY_RETURN_EMPTY;
+ }
+
+ if (NIL_P (infolist) || NIL_P (variable))
+ {
+ WEECHAT_SCRIPT_MSG_WRONG_ARGUMENTS("infolist_pointer");
+ RUBY_RETURN_EMPTY;
+ }
+
+ Check_Type (infolist, T_STRING);
+ Check_Type (variable, T_STRING);
+
+ c_infolist = STR2CSTR (infolist);
+ c_variable = STR2CSTR (variable);
+
+ value = script_ptr2str (weechat_infolist_pointer (script_str2ptr (c_infolist), c_variable));
+
+ RUBY_RETURN_STRING_FREE(value);
+}
+
+/*
+ * weechat_ruby_api_infolist_time: get time value of a variable in infolist
+ */
+
+static VALUE
+weechat_ruby_api_infolist_time (VALUE class, VALUE infolist, VALUE variable)
+{
+ char *c_infolist, *c_variable, timebuffer[64], *value;
+ time_t time;
+ VALUE return_value;
+
+ /* make C compiler happy */
+ (void) class;
+
+ if (!ruby_current_script)
+ {
+ WEECHAT_SCRIPT_MSG_NOT_INITIALIZED("infolist_time");
+ RUBY_RETURN_EMPTY;
+ }
+
+ if (NIL_P (infolist) || NIL_P (variable))
+ {
+ WEECHAT_SCRIPT_MSG_WRONG_ARGUMENTS("infolist_time");
+ RUBY_RETURN_EMPTY;
+ }
+
+ Check_Type (infolist, T_STRING);
+ Check_Type (variable, T_STRING);
+
+ c_infolist = STR2CSTR (infolist);
+ c_variable = STR2CSTR (variable);
+
+ time = weechat_infolist_time (script_str2ptr (c_infolist), c_variable);
+ strftime (timebuffer, sizeof (timebuffer), "%F %T", localtime (&time));
+ value = strdup (timebuffer);
+
+ RUBY_RETURN_STRING_FREE(value);
+}
+
+/*
+ * weechat_ruby_api_infolist_free: free infolist
+ */
+
+static VALUE
+weechat_ruby_api_infolist_free (VALUE class, VALUE infolist)
+{
+ char *c_infolist;
+
+ /* make C compiler happy */
+ (void) class;
+
+ if (!ruby_current_script)
+ {
+ WEECHAT_SCRIPT_MSG_NOT_INITIALIZED("infolist_free");
+ RUBY_RETURN_ERROR;
+ }
+
+ if (NIL_P (infolist))
+ {
+ WEECHAT_SCRIPT_MSG_WRONG_ARGUMENTS("infolist_free");
+ RUBY_RETURN_ERROR;
+ }
+
+ Check_Type (infolist, T_STRING);
+
+ c_infolist = STR2CSTR (infolist);
+
+ weechat_infolist_free (script_str2ptr (c_infolist));
+
+ RUBY_RETURN_OK;
+}
+
+/*
* weechat_ruby_api_init: init Ruby API: add variables and functions
*/
@@ -3545,6 +4250,23 @@ weechat_ruby_api_init (VALUE ruby_mWeechat)
rb_define_module_function (ruby_mWeechat, "nicklist_remove_group", &weechat_ruby_api_nicklist_remove_group, 2);
rb_define_module_function (ruby_mWeechat, "nicklist_remove_nick", &weechat_ruby_api_nicklist_remove_nick, 2);
rb_define_module_function (ruby_mWeechat, "nicklist_remove_all", &weechat_ruby_api_nicklist_remove_all, 1);
+ rb_define_module_function (ruby_mWeechat, "bar_item_search", &weechat_ruby_api_bar_item_search, 1);
+ rb_define_module_function (ruby_mWeechat, "bar_item_new", &weechat_ruby_api_bar_item_new, 2);
+ rb_define_module_function (ruby_mWeechat, "bar_item_update", &weechat_ruby_api_bar_item_update, 1);
+ rb_define_module_function (ruby_mWeechat, "bar_item_remove", &weechat_ruby_api_bar_item_remove, 1);
+ rb_define_module_function (ruby_mWeechat, "bar_search", &weechat_ruby_api_bar_search, 1);
+ rb_define_module_function (ruby_mWeechat, "bar_new", &weechat_ruby_api_bar_new, 6);
+ rb_define_module_function (ruby_mWeechat, "bar_update", &weechat_ruby_api_bar_update, 1);
+ rb_define_module_function (ruby_mWeechat, "bar_remove", &weechat_ruby_api_bar_remove, 1);
rb_define_module_function (ruby_mWeechat, "command", &weechat_ruby_api_command, 2);
rb_define_module_function (ruby_mWeechat, "info_get", &weechat_ruby_api_info_get, 1);
+ rb_define_module_function (ruby_mWeechat, "infolist_get", &weechat_ruby_api_infolist_get, 2);
+ rb_define_module_function (ruby_mWeechat, "infolist_next", &weechat_ruby_api_infolist_next, 1);
+ rb_define_module_function (ruby_mWeechat, "infolist_prev", &weechat_ruby_api_infolist_prev, 1);
+ rb_define_module_function (ruby_mWeechat, "infolist_fields", &weechat_ruby_api_infolist_fields, 1);
+ rb_define_module_function (ruby_mWeechat, "infolist_integer", &weechat_ruby_api_infolist_integer, 2);
+ rb_define_module_function (ruby_mWeechat, "infolist_string", &weechat_ruby_api_infolist_string, 2);
+ rb_define_module_function (ruby_mWeechat, "infolist_pointer", &weechat_ruby_api_infolist_pointer, 2);
+ rb_define_module_function (ruby_mWeechat, "infolist_time", &weechat_ruby_api_infolist_time, 2);
+ rb_define_module_function (ruby_mWeechat, "infolist_free", &weechat_ruby_api_infolist_free, 1);
}
diff --git a/src/plugins/scripts/script-api.c b/src/plugins/scripts/script-api.c
index e3bc57056..ebb73ba15 100644
--- a/src/plugins/scripts/script-api.c
+++ b/src/plugins/scripts/script-api.c
@@ -815,6 +815,71 @@ script_api_buffer_close (struct t_weechat_plugin *weechat_plugin,
}
/*
+ * script_api_bar_item_new: add a new bar item
+ */
+
+struct t_gui_bar_item *
+script_api_bar_item_new (struct t_weechat_plugin *weechat_plugin,
+ struct t_plugin_script *script,
+ char *name,
+ char *(*build_callback)(void *data,
+ struct t_gui_bar_item *item,
+ struct t_gui_window *window,
+ int remaining_space),
+ char *function_build)
+{
+ struct t_script_callback *new_script_callback;
+ struct t_gui_bar_item *new_item;
+
+ new_script_callback = script_callback_alloc ();
+ if (!new_script_callback)
+ return NULL;
+
+ new_item = weechat_bar_item_new (name,
+ (function_build && function_build[0]) ?
+ build_callback : NULL,
+ (function_build && function_build[0]) ?
+ new_script_callback : NULL);
+ if (!new_item)
+ {
+ free (new_script_callback);
+ return NULL;
+ }
+
+ new_script_callback->script = script;
+ new_script_callback->function = (function_build && function_build[0]) ?
+ strdup (function_build) : NULL;
+ new_script_callback->bar_item = new_item;
+ script_callback_add (script, new_script_callback);
+
+ return new_item;
+}
+
+/*
+ * script_api_bar_item_remove: remove a bar item
+ */
+
+void
+script_api_bar_item_remove (struct t_weechat_plugin *weechat_plugin,
+ struct t_plugin_script *script,
+ struct t_gui_bar_item *item)
+{
+ struct t_script_callback *ptr_script_callback;
+
+ if (!weechat_plugin || !script || !item)
+ return;
+
+ weechat_bar_item_remove (item);
+
+ for (ptr_script_callback = script->callbacks; ptr_script_callback;
+ ptr_script_callback = ptr_script_callback->next_callback)
+ {
+ if (ptr_script_callback->bar_item == item)
+ script_callback_remove (script, ptr_script_callback);
+ }
+}
+
+/*
* script_api_command: execute a command (simulate user entry)
*/
diff --git a/src/plugins/scripts/script-api.h b/src/plugins/scripts/script-api.h
index 2081d9c99..5a7177bf6 100644
--- a/src/plugins/scripts/script-api.h
+++ b/src/plugins/scripts/script-api.h
@@ -151,6 +151,17 @@ extern void script_api_buffer_close (struct t_weechat_plugin *weechat_plugin,
struct t_plugin_script *script,
struct t_gui_buffer *buffer,
int switch_to_another);
+extern struct t_gui_bar_item *script_api_bar_item_new (struct t_weechat_plugin *weechat_plugin,
+ struct t_plugin_script *script,
+ char *name,
+ char *(*build_callback)(void *data,
+ struct t_gui_bar_item *item,
+ struct t_gui_window *window,
+ int remaining_space),
+ char *function_build);
+extern void script_api_bar_item_remove (struct t_weechat_plugin *weechat_plugin,
+ struct t_plugin_script *script,
+ struct t_gui_bar_item *item);
extern void script_api_command (struct t_weechat_plugin *weechat_plugin,
struct t_plugin_script *script,
struct t_gui_buffer *buffer,
diff --git a/src/plugins/scripts/script-callback.c b/src/plugins/scripts/script-callback.c
index 18b7039b7..537375820 100644
--- a/src/plugins/scripts/script-callback.c
+++ b/src/plugins/scripts/script-callback.c
@@ -46,6 +46,7 @@ script_callback_alloc ()
new_script_callback->config_option = NULL;
new_script_callback->hook = NULL;
new_script_callback->buffer = NULL;
+ new_script_callback->bar_item = NULL;
return new_script_callback;
}
@@ -85,7 +86,7 @@ script_callback_remove (struct t_plugin_script *script,
if (script->callbacks == script_callback)
script->callbacks = script_callback->next_callback;
- /* unhook and free data */
+ /* free data */
if (script_callback->function)
free (script_callback->function);
@@ -117,8 +118,12 @@ script_callback_print_log (struct t_weechat_plugin *weechat_plugin,
weechat_log_printf ("[callback (addr:0x%x)]", script_callback);
weechat_log_printf (" script. . . . . . . : 0x%x", script_callback->script);
weechat_log_printf (" function. . . . . . : '%s'", script_callback->function);
+ weechat_log_printf (" config_file . . . . : '%s'", script_callback->config_file);
+ weechat_log_printf (" config_section. . . : '%s'", script_callback->config_section);
+ weechat_log_printf (" config_option . . . : '%s'", script_callback->config_option);
weechat_log_printf (" hook. . . . . . . . : 0x%x", script_callback->hook);
weechat_log_printf (" buffer. . . . . . . : 0x%x", script_callback->buffer);
+ weechat_log_printf (" bar_item. . . . . . : 0x%x", script_callback->bar_item);
weechat_log_printf (" prev_callback . . . : 0x%x", script_callback->prev_callback);
weechat_log_printf (" next_callback . . . : 0x%x", script_callback->next_callback);
}
diff --git a/src/plugins/scripts/script-callback.h b/src/plugins/scripts/script-callback.h
index 0ca67806b..a9db3db49 100644
--- a/src/plugins/scripts/script-callback.h
+++ b/src/plugins/scripts/script-callback.h
@@ -27,7 +27,8 @@ struct t_script_callback
struct t_config_section *config_section; /* not NULL for config section */
struct t_config_option *config_option; /* not NULL for config option */
struct t_hook *hook; /* not NULL for hook */
- struct t_gui_buffer *buffer; /* not NULL for buffer callback*/
+ struct t_gui_buffer *buffer; /* not NULL for buffer */
+ struct t_gui_bar_item *bar_item; /* not NULL for bar item */
struct t_script_callback *prev_callback; /* link to next callback */
struct t_script_callback *next_callback; /* link to previous callback */
};
diff --git a/src/plugins/scripts/script.c b/src/plugins/scripts/script.c
index 242132e7a..fb28a46b5 100644
--- a/src/plugins/scripts/script.c
+++ b/src/plugins/scripts/script.c
@@ -416,10 +416,12 @@ script_remove (struct t_weechat_plugin *weechat_plugin,
for (ptr_script_callback = script->callbacks; ptr_script_callback;
ptr_script_callback = ptr_script_callback->next_callback)
{
+ /* unhook */
if (ptr_script_callback->hook)
{
weechat_unhook (ptr_script_callback->hook);
}
+ /* free config file */
if (ptr_script_callback->config_file
&& !ptr_script_callback->config_section
&& !ptr_script_callback->config_option)
@@ -428,6 +430,9 @@ script_remove (struct t_weechat_plugin *weechat_plugin,
weechat_config_write (ptr_script_callback->config_file);
weechat_config_free (ptr_script_callback->config_file);
}
+ /* remove bar item */
+ if (ptr_script_callback->bar_item)
+ weechat_bar_item_remove (ptr_script_callback->bar_item);
}
/* remove all callbacks created by this script */