mirror of
https://github.com/weechat/weechat.git
synced 2026-06-28 13:56:37 +02:00
core: add syntax "@buffer:item" in bar items to force the buffer used when displaying the bar item (task #12717)
This commit is contained in:
@@ -36,27 +36,24 @@
|
||||
|
||||
char *
|
||||
weechat_aspell_bar_item_dict (void *data, struct t_gui_bar_item *item,
|
||||
struct t_gui_window *window)
|
||||
struct t_gui_window *window,
|
||||
struct t_gui_buffer *buffer,
|
||||
struct t_hashtable *extra_info)
|
||||
{
|
||||
struct t_gui_buffer *buffer;
|
||||
const char *dict_list;
|
||||
|
||||
/* make C compiler happy */
|
||||
(void) data;
|
||||
(void) item;
|
||||
(void) window;
|
||||
(void) extra_info;
|
||||
|
||||
if (!window)
|
||||
window = weechat_current_window ();
|
||||
if (!buffer)
|
||||
return NULL;
|
||||
|
||||
buffer = weechat_window_get_pointer (window, "buffer");
|
||||
if (buffer)
|
||||
{
|
||||
dict_list = weechat_aspell_get_dict (buffer);
|
||||
if (dict_list)
|
||||
return strdup (dict_list);
|
||||
}
|
||||
dict_list = weechat_aspell_get_dict (buffer);
|
||||
|
||||
return NULL;
|
||||
return (dict_list) ? strdup (dict_list) : NULL;
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -65,9 +62,10 @@ weechat_aspell_bar_item_dict (void *data, struct t_gui_bar_item *item,
|
||||
|
||||
char *
|
||||
weechat_aspell_bar_item_suggest (void *data, struct t_gui_bar_item *item,
|
||||
struct t_gui_window *window)
|
||||
struct t_gui_window *window,
|
||||
struct t_gui_buffer *buffer,
|
||||
struct t_hashtable *extra_info)
|
||||
{
|
||||
struct t_gui_buffer *buffer;
|
||||
const char *ptr_suggestions, *pos;
|
||||
char **suggestions, *suggestions2;
|
||||
int i, num_suggestions, length;
|
||||
@@ -75,60 +73,56 @@ weechat_aspell_bar_item_suggest (void *data, struct t_gui_bar_item *item,
|
||||
/* make C compiler happy */
|
||||
(void) data;
|
||||
(void) item;
|
||||
(void) window;
|
||||
(void) extra_info;
|
||||
|
||||
if (!aspell_enabled)
|
||||
return NULL;
|
||||
|
||||
if (!window)
|
||||
window = weechat_current_window ();
|
||||
if (!buffer)
|
||||
return NULL;
|
||||
|
||||
buffer = weechat_window_get_pointer (window, "buffer");
|
||||
if (buffer)
|
||||
ptr_suggestions = weechat_buffer_get_string (buffer,
|
||||
"localvar_aspell_suggest");
|
||||
if (!ptr_suggestions)
|
||||
return NULL;
|
||||
|
||||
pos = strchr (ptr_suggestions, ':');
|
||||
if (pos)
|
||||
pos++;
|
||||
else
|
||||
pos = ptr_suggestions;
|
||||
suggestions = weechat_string_split (pos, "/", 0, 0, &num_suggestions);
|
||||
if (suggestions)
|
||||
{
|
||||
ptr_suggestions = weechat_buffer_get_string (buffer,
|
||||
"localvar_aspell_suggest");
|
||||
if (ptr_suggestions)
|
||||
length = 64 + 1;
|
||||
for (i = 0; i < num_suggestions; i++)
|
||||
{
|
||||
pos = strchr (ptr_suggestions, ':');
|
||||
if (pos)
|
||||
pos++;
|
||||
else
|
||||
pos = ptr_suggestions;
|
||||
suggestions = weechat_string_split (pos, "/", 0, 0, &num_suggestions);
|
||||
if (suggestions)
|
||||
length += strlen (suggestions[i]) + 64;
|
||||
}
|
||||
suggestions2 = malloc (length);
|
||||
if (suggestions2)
|
||||
{
|
||||
suggestions2[0] = '\0';
|
||||
strcat (suggestions2,
|
||||
weechat_color (weechat_config_string (weechat_aspell_config_color_suggestions)));
|
||||
for (i = 0; i < num_suggestions; i++)
|
||||
{
|
||||
length = 64 + 1;
|
||||
for (i = 0; i < num_suggestions; i++)
|
||||
if (i > 0)
|
||||
{
|
||||
length += strlen (suggestions[i]) + 64;
|
||||
}
|
||||
suggestions2 = malloc (length);
|
||||
if (suggestions2)
|
||||
{
|
||||
suggestions2[0] = '\0';
|
||||
strcat (suggestions2, weechat_color ("bar_delim"));
|
||||
strcat (suggestions2, "/");
|
||||
strcat (suggestions2,
|
||||
weechat_color (weechat_config_string (weechat_aspell_config_color_suggestions)));
|
||||
for (i = 0; i < num_suggestions; i++)
|
||||
{
|
||||
if (i > 0)
|
||||
{
|
||||
strcat (suggestions2, weechat_color ("bar_delim"));
|
||||
strcat (suggestions2, "/");
|
||||
strcat (suggestions2,
|
||||
weechat_color (weechat_config_string (weechat_aspell_config_color_suggestions)));
|
||||
}
|
||||
strcat (suggestions2, suggestions[i]);
|
||||
}
|
||||
weechat_string_free_split (suggestions);
|
||||
return suggestions2;
|
||||
}
|
||||
weechat_string_free_split (suggestions);
|
||||
strcat (suggestions2, suggestions[i]);
|
||||
}
|
||||
return strdup (pos);
|
||||
weechat_string_free_split (suggestions);
|
||||
return suggestions2;
|
||||
}
|
||||
weechat_string_free_split (suggestions);
|
||||
}
|
||||
|
||||
return NULL;
|
||||
return strdup (pos);
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
@@ -3639,29 +3639,56 @@ weechat_guile_api_bar_item_search (SCM name)
|
||||
|
||||
char *
|
||||
weechat_guile_api_bar_item_build_cb (void *data, struct t_gui_bar_item *item,
|
||||
struct t_gui_window *window)
|
||||
struct t_gui_window *window,
|
||||
struct t_gui_buffer *buffer,
|
||||
struct t_hashtable *extra_info)
|
||||
{
|
||||
struct t_plugin_script_cb *script_callback;
|
||||
void *func_argv[3];
|
||||
void *func_argv[5];
|
||||
char empty_arg[1] = { '\0' }, *ret;
|
||||
|
||||
script_callback = (struct t_plugin_script_cb *)data;
|
||||
|
||||
if (script_callback && script_callback->function && script_callback->function[0])
|
||||
{
|
||||
func_argv[0] = (script_callback->data) ? script_callback->data : empty_arg;
|
||||
func_argv[1] = API_PTR2STR(item);
|
||||
func_argv[2] = API_PTR2STR(window);
|
||||
if (strncmp (script_callback->function, "(extra)", 7) == 0)
|
||||
{
|
||||
/* new callback: data, item, window, buffer, extra_info */
|
||||
func_argv[0] = (script_callback->data) ? script_callback->data : empty_arg;
|
||||
func_argv[1] = API_PTR2STR(item);
|
||||
func_argv[2] = API_PTR2STR(window);
|
||||
func_argv[3] = API_PTR2STR(buffer);
|
||||
func_argv[4] = extra_info;
|
||||
|
||||
ret = (char *)weechat_guile_exec (script_callback->script,
|
||||
WEECHAT_SCRIPT_EXEC_STRING,
|
||||
script_callback->function,
|
||||
"sss", func_argv);
|
||||
ret = (char *)weechat_guile_exec (script_callback->script,
|
||||
WEECHAT_SCRIPT_EXEC_STRING,
|
||||
script_callback->function + 7,
|
||||
"ssssh", func_argv);
|
||||
|
||||
if (func_argv[1])
|
||||
free (func_argv[1]);
|
||||
if (func_argv[2])
|
||||
free (func_argv[2]);
|
||||
if (func_argv[1])
|
||||
free (func_argv[1]);
|
||||
if (func_argv[2])
|
||||
free (func_argv[2]);
|
||||
if (func_argv[3])
|
||||
free (func_argv[3]);
|
||||
}
|
||||
else
|
||||
{
|
||||
/* old callback: data, item, window */
|
||||
func_argv[0] = (script_callback->data) ? script_callback->data : empty_arg;
|
||||
func_argv[1] = API_PTR2STR(item);
|
||||
func_argv[2] = API_PTR2STR(window);
|
||||
|
||||
ret = (char *)weechat_guile_exec (script_callback->script,
|
||||
WEECHAT_SCRIPT_EXEC_STRING,
|
||||
script_callback->function,
|
||||
"sss", func_argv);
|
||||
|
||||
if (func_argv[1])
|
||||
free (func_argv[1]);
|
||||
if (func_argv[2])
|
||||
free (func_argv[2]);
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
+226
-252
@@ -39,9 +39,9 @@
|
||||
|
||||
char *
|
||||
irc_bar_item_away (void *data, struct t_gui_bar_item *item,
|
||||
struct t_gui_window *window)
|
||||
struct t_gui_window *window, struct t_gui_buffer *buffer,
|
||||
struct t_hashtable *extra_info)
|
||||
{
|
||||
struct t_gui_buffer *buffer;
|
||||
struct t_irc_server *server;
|
||||
char *buf, *message;
|
||||
int length;
|
||||
@@ -49,41 +49,38 @@ irc_bar_item_away (void *data, struct t_gui_bar_item *item,
|
||||
/* make C compiler happy */
|
||||
(void) data;
|
||||
(void) item;
|
||||
(void) window;
|
||||
(void) extra_info;
|
||||
|
||||
if (!buffer)
|
||||
return NULL;
|
||||
|
||||
buf = NULL;
|
||||
|
||||
if (!window)
|
||||
window = weechat_current_window ();
|
||||
irc_buffer_get_server_and_channel (buffer, &server, NULL);
|
||||
|
||||
buffer = weechat_window_get_pointer (window, "buffer");
|
||||
|
||||
if (buffer)
|
||||
if (server && server->is_away)
|
||||
{
|
||||
irc_buffer_get_server_and_channel (buffer, &server, NULL);
|
||||
|
||||
if (server && server->is_away)
|
||||
if (weechat_config_boolean (irc_config_look_item_away_message)
|
||||
&& server->away_message && server->away_message[0])
|
||||
{
|
||||
if (weechat_config_boolean (irc_config_look_item_away_message)
|
||||
&& server->away_message && server->away_message[0])
|
||||
message = strdup (server->away_message);
|
||||
}
|
||||
else
|
||||
{
|
||||
message = strdup (_("away"));
|
||||
}
|
||||
if (message)
|
||||
{
|
||||
length = strlen (message) + 64 + 1;
|
||||
buf = malloc (length);
|
||||
if (buf)
|
||||
{
|
||||
message = strdup (server->away_message);
|
||||
}
|
||||
else
|
||||
{
|
||||
message = strdup (_("away"));
|
||||
}
|
||||
if (message)
|
||||
{
|
||||
length = strlen (message) + 64 + 1;
|
||||
buf = malloc (length);
|
||||
if (buf)
|
||||
{
|
||||
snprintf (buf, length, "%s%s",
|
||||
IRC_COLOR_ITEM_AWAY,
|
||||
message);
|
||||
}
|
||||
free (message);
|
||||
snprintf (buf, length, "%s%s",
|
||||
IRC_COLOR_ITEM_AWAY,
|
||||
message);
|
||||
}
|
||||
free (message);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -96,35 +93,31 @@ irc_bar_item_away (void *data, struct t_gui_bar_item *item,
|
||||
|
||||
char *
|
||||
irc_bar_item_buffer_title (void *data, struct t_gui_bar_item *item,
|
||||
struct t_gui_window *window)
|
||||
struct t_gui_window *window,
|
||||
struct t_gui_buffer *buffer,
|
||||
struct t_hashtable *extra_info)
|
||||
{
|
||||
struct t_gui_buffer *buffer;
|
||||
const char *title;
|
||||
char *title_color;
|
||||
|
||||
/* make C compiler happy */
|
||||
(void) data;
|
||||
(void) item;
|
||||
(void) window;
|
||||
(void) extra_info;
|
||||
|
||||
if (!window)
|
||||
window = weechat_current_window ();
|
||||
if (!buffer)
|
||||
return NULL;
|
||||
|
||||
buffer = weechat_window_get_pointer (window, "buffer");
|
||||
title = weechat_buffer_get_string (buffer, "title");
|
||||
if (!title)
|
||||
return NULL;
|
||||
|
||||
if (buffer)
|
||||
{
|
||||
title = weechat_buffer_get_string (buffer, "title");
|
||||
if (!title)
|
||||
return NULL;
|
||||
title_color = irc_color_decode (title,
|
||||
(weechat_config_boolean (irc_config_look_topic_strip_colors)) ?
|
||||
0 : 1);
|
||||
|
||||
title_color = irc_color_decode (title,
|
||||
(weechat_config_boolean (irc_config_look_topic_strip_colors)) ?
|
||||
0 : 1);
|
||||
|
||||
return (title_color) ? title_color : strdup (title);
|
||||
}
|
||||
|
||||
return NULL;
|
||||
return (title_color) ? title_color : strdup (title);
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -133,10 +126,11 @@ irc_bar_item_buffer_title (void *data, struct t_gui_bar_item *item,
|
||||
|
||||
char *
|
||||
irc_bar_item_buffer_plugin (void *data, struct t_gui_bar_item *item,
|
||||
struct t_gui_window *window)
|
||||
struct t_gui_window *window,
|
||||
struct t_gui_buffer *buffer,
|
||||
struct t_hashtable *extra_info)
|
||||
{
|
||||
char buf[512];
|
||||
struct t_gui_buffer *buffer;
|
||||
struct t_weechat_plugin *ptr_plugin;
|
||||
const char *name;
|
||||
struct t_irc_server *server;
|
||||
@@ -145,41 +139,36 @@ irc_bar_item_buffer_plugin (void *data, struct t_gui_bar_item *item,
|
||||
/* make C compiler happy */
|
||||
(void) data;
|
||||
(void) item;
|
||||
(void) window;
|
||||
(void) extra_info;
|
||||
|
||||
if (!window)
|
||||
window = weechat_current_window ();
|
||||
if (!buffer)
|
||||
return NULL;
|
||||
|
||||
buffer = weechat_window_get_pointer (window, "buffer");
|
||||
|
||||
if (buffer)
|
||||
ptr_plugin = weechat_buffer_get_pointer (buffer, "plugin");
|
||||
name = weechat_plugin_get_name (ptr_plugin);
|
||||
if (ptr_plugin == weechat_irc_plugin)
|
||||
{
|
||||
ptr_plugin = weechat_buffer_get_pointer (buffer, "plugin");
|
||||
name = weechat_plugin_get_name (ptr_plugin);
|
||||
if (ptr_plugin == weechat_irc_plugin)
|
||||
irc_buffer_get_server_and_channel (buffer, &server, &channel);
|
||||
if (server && channel
|
||||
&& (weechat_config_integer (irc_config_look_item_display_server) == IRC_CONFIG_LOOK_ITEM_DISPLAY_SERVER_PLUGIN))
|
||||
{
|
||||
irc_buffer_get_server_and_channel (buffer, &server, &channel);
|
||||
if (server && channel
|
||||
&& (weechat_config_integer (irc_config_look_item_display_server) == IRC_CONFIG_LOOK_ITEM_DISPLAY_SERVER_PLUGIN))
|
||||
{
|
||||
snprintf (buf, sizeof (buf), "%s%s/%s%s",
|
||||
name,
|
||||
IRC_COLOR_BAR_DELIM,
|
||||
IRC_COLOR_BAR_FG,
|
||||
server->name);
|
||||
}
|
||||
else
|
||||
{
|
||||
snprintf (buf, sizeof (buf), "%s", name);
|
||||
}
|
||||
snprintf (buf, sizeof (buf), "%s%s/%s%s",
|
||||
name,
|
||||
IRC_COLOR_BAR_DELIM,
|
||||
IRC_COLOR_BAR_FG,
|
||||
server->name);
|
||||
}
|
||||
else
|
||||
{
|
||||
snprintf (buf, sizeof (buf), "%s", name);
|
||||
}
|
||||
return strdup (buf);
|
||||
}
|
||||
|
||||
return NULL;
|
||||
else
|
||||
{
|
||||
snprintf (buf, sizeof (buf), "%s", name);
|
||||
}
|
||||
return strdup (buf);
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -188,79 +177,76 @@ irc_bar_item_buffer_plugin (void *data, struct t_gui_bar_item *item,
|
||||
|
||||
char *
|
||||
irc_bar_item_buffer_name (void *data, struct t_gui_bar_item *item,
|
||||
struct t_gui_window *window)
|
||||
struct t_gui_window *window,
|
||||
struct t_gui_buffer *buffer,
|
||||
struct t_hashtable *extra_info)
|
||||
{
|
||||
char buf[512], buf_name[256], modes[128];
|
||||
const char *name;
|
||||
int part_from_channel, display_server;
|
||||
struct t_gui_buffer *buffer;
|
||||
struct t_irc_server *server;
|
||||
struct t_irc_channel *channel;
|
||||
|
||||
/* make C compiler happy */
|
||||
(void) data;
|
||||
(void) item;
|
||||
(void) window;
|
||||
(void) extra_info;
|
||||
|
||||
if (!window)
|
||||
window = weechat_current_window ();
|
||||
if (!buffer)
|
||||
return NULL;
|
||||
|
||||
buf_name[0] = '\0';
|
||||
modes[0] = '\0';
|
||||
|
||||
display_server = (weechat_config_integer (irc_config_look_item_display_server) == IRC_CONFIG_LOOK_ITEM_DISPLAY_SERVER_NAME);
|
||||
|
||||
buffer = weechat_window_get_pointer (window, "buffer");
|
||||
|
||||
if (buffer)
|
||||
irc_buffer_get_server_and_channel (buffer, &server, &channel);
|
||||
if (server || channel)
|
||||
{
|
||||
irc_buffer_get_server_and_channel (buffer, &server, &channel);
|
||||
if (server || channel)
|
||||
if (server && !channel)
|
||||
{
|
||||
if (server && !channel)
|
||||
{
|
||||
snprintf (buf_name, sizeof (buf_name), "%s%s[%s%s%s]",
|
||||
_("server"),
|
||||
IRC_COLOR_BAR_DELIM,
|
||||
(server && server->ssl_connected) ? IRC_COLOR_STATUS_NAME_SSL : IRC_COLOR_STATUS_NAME,
|
||||
server->name,
|
||||
IRC_COLOR_BAR_DELIM);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (channel)
|
||||
{
|
||||
part_from_channel = ((channel->type == IRC_CHANNEL_TYPE_CHANNEL)
|
||||
&& !channel->nicks);
|
||||
snprintf (buf_name, sizeof (buf_name),
|
||||
"%s%s%s%s%s%s%s%s%s%s",
|
||||
(part_from_channel) ? IRC_COLOR_BAR_DELIM : "",
|
||||
(part_from_channel) ? "(" : "",
|
||||
(server && server->ssl_connected) ? IRC_COLOR_STATUS_NAME_SSL : IRC_COLOR_STATUS_NAME,
|
||||
(server && display_server) ? server->name : "",
|
||||
(server && display_server) ? IRC_COLOR_BAR_DELIM : "",
|
||||
(server && display_server) ? "/" : "",
|
||||
(server && server->ssl_connected) ? IRC_COLOR_STATUS_NAME_SSL : IRC_COLOR_STATUS_NAME,
|
||||
channel->name,
|
||||
(part_from_channel) ? IRC_COLOR_BAR_DELIM : "",
|
||||
(part_from_channel) ? ")" : "");
|
||||
}
|
||||
}
|
||||
snprintf (buf_name, sizeof (buf_name), "%s%s[%s%s%s]",
|
||||
_("server"),
|
||||
IRC_COLOR_BAR_DELIM,
|
||||
(server && server->ssl_connected) ? IRC_COLOR_STATUS_NAME_SSL : IRC_COLOR_STATUS_NAME,
|
||||
server->name,
|
||||
IRC_COLOR_BAR_DELIM);
|
||||
}
|
||||
else
|
||||
{
|
||||
name = weechat_buffer_get_string (buffer, "name");
|
||||
if (name)
|
||||
snprintf (buf_name, sizeof (buf_name), "%s", name);
|
||||
if (channel)
|
||||
{
|
||||
part_from_channel = ((channel->type == IRC_CHANNEL_TYPE_CHANNEL)
|
||||
&& !channel->nicks);
|
||||
snprintf (buf_name, sizeof (buf_name),
|
||||
"%s%s%s%s%s%s%s%s%s%s",
|
||||
(part_from_channel) ? IRC_COLOR_BAR_DELIM : "",
|
||||
(part_from_channel) ? "(" : "",
|
||||
(server && server->ssl_connected) ? IRC_COLOR_STATUS_NAME_SSL : IRC_COLOR_STATUS_NAME,
|
||||
(server && display_server) ? server->name : "",
|
||||
(server && display_server) ? IRC_COLOR_BAR_DELIM : "",
|
||||
(server && display_server) ? "/" : "",
|
||||
(server && server->ssl_connected) ? IRC_COLOR_STATUS_NAME_SSL : IRC_COLOR_STATUS_NAME,
|
||||
channel->name,
|
||||
(part_from_channel) ? IRC_COLOR_BAR_DELIM : "",
|
||||
(part_from_channel) ? ")" : "");
|
||||
}
|
||||
}
|
||||
|
||||
snprintf (buf, sizeof (buf), "%s%s%s",
|
||||
(server && server->ssl_connected) ? IRC_COLOR_STATUS_NAME_SSL : IRC_COLOR_STATUS_NAME,
|
||||
buf_name,
|
||||
modes);
|
||||
return strdup (buf);
|
||||
}
|
||||
else
|
||||
{
|
||||
name = weechat_buffer_get_string (buffer, "name");
|
||||
if (name)
|
||||
snprintf (buf_name, sizeof (buf_name), "%s", name);
|
||||
}
|
||||
|
||||
return NULL;
|
||||
snprintf (buf, sizeof (buf), "%s%s%s",
|
||||
(server && server->ssl_connected) ? IRC_COLOR_STATUS_NAME_SSL : IRC_COLOR_STATUS_NAME,
|
||||
buf_name,
|
||||
modes);
|
||||
|
||||
return strdup (buf);
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -269,28 +255,27 @@ irc_bar_item_buffer_name (void *data, struct t_gui_bar_item *item,
|
||||
|
||||
char *
|
||||
irc_bar_item_buffer_modes (void *data, struct t_gui_bar_item *item,
|
||||
struct t_gui_window *window)
|
||||
struct t_gui_window *window,
|
||||
struct t_gui_buffer *buffer,
|
||||
struct t_hashtable *extra_info)
|
||||
{
|
||||
char modes[128], *modes_without_args;
|
||||
const char *pos_space, *pos_key;
|
||||
int part_from_channel;
|
||||
struct t_gui_buffer *buffer;
|
||||
struct t_irc_server *server;
|
||||
struct t_irc_channel *channel;
|
||||
|
||||
/* make C compiler happy */
|
||||
(void) data;
|
||||
(void) item;
|
||||
(void) window;
|
||||
(void) extra_info;
|
||||
|
||||
if (!window)
|
||||
window = weechat_current_window ();
|
||||
|
||||
modes[0] = '\0';
|
||||
|
||||
buffer = weechat_window_get_pointer (window, "buffer");
|
||||
if (!buffer)
|
||||
return NULL;
|
||||
|
||||
modes[0] = '\0';
|
||||
|
||||
irc_buffer_get_server_and_channel (buffer, &server, &channel);
|
||||
if (!channel)
|
||||
return NULL;
|
||||
@@ -334,79 +319,75 @@ irc_bar_item_buffer_modes (void *data, struct t_gui_bar_item *item,
|
||||
|
||||
char *
|
||||
irc_bar_item_channel (void *data, struct t_gui_bar_item *item,
|
||||
struct t_gui_window *window)
|
||||
struct t_gui_window *window, struct t_gui_buffer *buffer,
|
||||
struct t_hashtable *extra_info)
|
||||
{
|
||||
char buf[512], buf_name[256], modes[128];
|
||||
const char *name;
|
||||
int part_from_channel, display_server;
|
||||
struct t_gui_buffer *buffer;
|
||||
struct t_irc_server *server;
|
||||
struct t_irc_channel *channel;
|
||||
|
||||
/* make C compiler happy */
|
||||
(void) data;
|
||||
(void) item;
|
||||
(void) window;
|
||||
(void) extra_info;
|
||||
|
||||
if (!window)
|
||||
window = weechat_current_window ();
|
||||
if (!buffer)
|
||||
return NULL;
|
||||
|
||||
buf_name[0] = '\0';
|
||||
modes[0] = '\0';
|
||||
|
||||
display_server = (weechat_config_integer (irc_config_look_item_display_server) == IRC_CONFIG_LOOK_ITEM_DISPLAY_SERVER_NAME);
|
||||
|
||||
buffer = weechat_window_get_pointer (window, "buffer");
|
||||
|
||||
if (buffer)
|
||||
irc_buffer_get_server_and_channel (buffer, &server, &channel);
|
||||
if (server || channel)
|
||||
{
|
||||
irc_buffer_get_server_and_channel (buffer, &server, &channel);
|
||||
if (server || channel)
|
||||
if (server && !channel)
|
||||
{
|
||||
if (server && !channel)
|
||||
{
|
||||
snprintf (buf_name, sizeof (buf_name), "%s%s[%s%s%s]",
|
||||
_("server"),
|
||||
IRC_COLOR_BAR_DELIM,
|
||||
IRC_COLOR_STATUS_NAME,
|
||||
server->name,
|
||||
IRC_COLOR_BAR_DELIM);
|
||||
}
|
||||
else
|
||||
{
|
||||
if (channel)
|
||||
{
|
||||
part_from_channel = ((channel->type == IRC_CHANNEL_TYPE_CHANNEL)
|
||||
&& !channel->nicks);
|
||||
snprintf (buf_name, sizeof (buf_name),
|
||||
"%s%s%s%s%s%s%s%s%s%s",
|
||||
(part_from_channel) ? IRC_COLOR_BAR_DELIM : "",
|
||||
(part_from_channel) ? "(" : "",
|
||||
IRC_COLOR_STATUS_NAME,
|
||||
(server && display_server) ? server->name : "",
|
||||
(server && display_server) ? IRC_COLOR_BAR_DELIM : "",
|
||||
(server && display_server) ? "/" : "",
|
||||
IRC_COLOR_STATUS_NAME,
|
||||
channel->name,
|
||||
(part_from_channel) ? IRC_COLOR_BAR_DELIM : "",
|
||||
(part_from_channel) ? ")" : "");
|
||||
}
|
||||
}
|
||||
snprintf (buf_name, sizeof (buf_name), "%s%s[%s%s%s]",
|
||||
_("server"),
|
||||
IRC_COLOR_BAR_DELIM,
|
||||
IRC_COLOR_STATUS_NAME,
|
||||
server->name,
|
||||
IRC_COLOR_BAR_DELIM);
|
||||
}
|
||||
else
|
||||
{
|
||||
name = weechat_buffer_get_string (buffer, "name");
|
||||
if (name)
|
||||
snprintf (buf_name, sizeof (buf_name), "%s", name);
|
||||
if (channel)
|
||||
{
|
||||
part_from_channel = ((channel->type == IRC_CHANNEL_TYPE_CHANNEL)
|
||||
&& !channel->nicks);
|
||||
snprintf (buf_name, sizeof (buf_name),
|
||||
"%s%s%s%s%s%s%s%s%s%s",
|
||||
(part_from_channel) ? IRC_COLOR_BAR_DELIM : "",
|
||||
(part_from_channel) ? "(" : "",
|
||||
IRC_COLOR_STATUS_NAME,
|
||||
(server && display_server) ? server->name : "",
|
||||
(server && display_server) ? IRC_COLOR_BAR_DELIM : "",
|
||||
(server && display_server) ? "/" : "",
|
||||
IRC_COLOR_STATUS_NAME,
|
||||
channel->name,
|
||||
(part_from_channel) ? IRC_COLOR_BAR_DELIM : "",
|
||||
(part_from_channel) ? ")" : "");
|
||||
}
|
||||
}
|
||||
|
||||
snprintf (buf, sizeof (buf), "%s%s%s",
|
||||
IRC_COLOR_STATUS_NAME,
|
||||
buf_name,
|
||||
modes);
|
||||
return strdup (buf);
|
||||
}
|
||||
else
|
||||
{
|
||||
name = weechat_buffer_get_string (buffer, "name");
|
||||
if (name)
|
||||
snprintf (buf_name, sizeof (buf_name), "%s", name);
|
||||
}
|
||||
|
||||
return NULL;
|
||||
snprintf (buf, sizeof (buf), "%s%s%s",
|
||||
IRC_COLOR_STATUS_NAME,
|
||||
buf_name,
|
||||
modes);
|
||||
|
||||
return strdup (buf);
|
||||
}
|
||||
|
||||
/*
|
||||
@@ -415,37 +396,34 @@ irc_bar_item_channel (void *data, struct t_gui_bar_item *item,
|
||||
|
||||
char *
|
||||
irc_bar_item_lag (void *data, struct t_gui_bar_item *item,
|
||||
struct t_gui_window *window)
|
||||
struct t_gui_window *window, struct t_gui_buffer *buffer,
|
||||
struct t_hashtable *extra_info)
|
||||
{
|
||||
char buf[128];
|
||||
struct t_gui_buffer *buffer;
|
||||
struct t_irc_server *server;
|
||||
|
||||
/* make C compiler happy */
|
||||
(void) data;
|
||||
(void) item;
|
||||
(void) window;
|
||||
(void) extra_info;
|
||||
|
||||
if (!window)
|
||||
window = weechat_current_window ();
|
||||
if (!buffer)
|
||||
return NULL;
|
||||
|
||||
buffer = weechat_window_get_pointer (window, "buffer");
|
||||
irc_buffer_get_server_and_channel (buffer, &server, NULL);
|
||||
|
||||
if (buffer)
|
||||
if (server
|
||||
&& (server->lag >= weechat_config_integer (irc_config_network_lag_min_show)))
|
||||
{
|
||||
irc_buffer_get_server_and_channel (buffer, &server, NULL);
|
||||
|
||||
if (server
|
||||
&& (server->lag >= weechat_config_integer (irc_config_network_lag_min_show)))
|
||||
{
|
||||
snprintf (buf, sizeof (buf),
|
||||
((server->lag_check_time.tv_sec == 0) || (server->lag < 1000)) ?
|
||||
"%s: %s%.3f" : "%s: %s%.0f",
|
||||
_("Lag"),
|
||||
(server->lag_check_time.tv_sec == 0) ?
|
||||
IRC_COLOR_ITEM_LAG_FINISHED : IRC_COLOR_ITEM_LAG_COUNTING,
|
||||
((float)(server->lag)) / 1000);
|
||||
return strdup (buf);
|
||||
}
|
||||
snprintf (buf, sizeof (buf),
|
||||
((server->lag_check_time.tv_sec == 0) || (server->lag < 1000)) ?
|
||||
"%s: %s%.3f" : "%s: %s%.0f",
|
||||
_("Lag"),
|
||||
(server->lag_check_time.tv_sec == 0) ?
|
||||
IRC_COLOR_ITEM_LAG_FINISHED : IRC_COLOR_ITEM_LAG_COUNTING,
|
||||
((float)(server->lag)) / 1000);
|
||||
return strdup (buf);
|
||||
}
|
||||
|
||||
return NULL;
|
||||
@@ -457,9 +435,10 @@ irc_bar_item_lag (void *data, struct t_gui_bar_item *item,
|
||||
|
||||
char *
|
||||
irc_bar_item_input_prompt (void *data, struct t_gui_bar_item *item,
|
||||
struct t_gui_window *window)
|
||||
struct t_gui_window *window,
|
||||
struct t_gui_buffer *buffer,
|
||||
struct t_hashtable *extra_info)
|
||||
{
|
||||
struct t_gui_buffer *buffer;
|
||||
struct t_irc_server *server;
|
||||
struct t_irc_channel *channel;
|
||||
struct t_irc_nick *ptr_nick;
|
||||
@@ -469,68 +448,63 @@ irc_bar_item_input_prompt (void *data, struct t_gui_bar_item *item,
|
||||
/* make C compiler happy */
|
||||
(void) data;
|
||||
(void) item;
|
||||
(void) window;
|
||||
(void) extra_info;
|
||||
|
||||
if (!window)
|
||||
window = weechat_current_window ();
|
||||
if (!buffer)
|
||||
return NULL;
|
||||
|
||||
buffer = weechat_window_get_pointer (window, "buffer");
|
||||
irc_buffer_get_server_and_channel (buffer, &server, &channel);
|
||||
if (!server || !server->nick)
|
||||
return NULL;
|
||||
|
||||
if (buffer)
|
||||
/* build prefix */
|
||||
str_prefix[0] = '\0';
|
||||
if (weechat_config_boolean (irc_config_look_item_nick_prefix)
|
||||
&& channel
|
||||
&& (channel->type == IRC_CHANNEL_TYPE_CHANNEL))
|
||||
{
|
||||
irc_buffer_get_server_and_channel (buffer, &server, &channel);
|
||||
if (!server || !server->nick)
|
||||
return NULL;
|
||||
|
||||
/* build prefix */
|
||||
str_prefix[0] = '\0';
|
||||
if (weechat_config_boolean (irc_config_look_item_nick_prefix)
|
||||
&& channel
|
||||
&& (channel->type == IRC_CHANNEL_TYPE_CHANNEL))
|
||||
ptr_nick = irc_nick_search (server, channel, server->nick);
|
||||
if (ptr_nick)
|
||||
{
|
||||
ptr_nick = irc_nick_search (server, channel, server->nick);
|
||||
if (ptr_nick)
|
||||
if (ptr_nick->prefix[0] != ' ')
|
||||
{
|
||||
if (ptr_nick->prefix[0] != ' ')
|
||||
{
|
||||
snprintf (str_prefix, sizeof (str_prefix), "%s%s",
|
||||
weechat_color (irc_nick_get_prefix_color_name (server, ptr_nick->prefix[0])),
|
||||
ptr_nick->prefix);
|
||||
}
|
||||
snprintf (str_prefix, sizeof (str_prefix), "%s%s",
|
||||
weechat_color (irc_nick_get_prefix_color_name (server, ptr_nick->prefix[0])),
|
||||
ptr_nick->prefix);
|
||||
}
|
||||
}
|
||||
|
||||
/* build bar item */
|
||||
length = 64 + strlen (server->nick) + 64 +
|
||||
((server->nick_modes) ? strlen (server->nick_modes) : 0) + 64 + 1;
|
||||
|
||||
buf = malloc (length);
|
||||
if (buf)
|
||||
{
|
||||
if (weechat_config_boolean (irc_config_look_item_nick_modes)
|
||||
&& server->nick_modes && server->nick_modes[0])
|
||||
{
|
||||
snprintf (buf, length, "%s%s%s%s(%s%s%s)",
|
||||
str_prefix,
|
||||
IRC_COLOR_INPUT_NICK,
|
||||
server->nick,
|
||||
IRC_COLOR_BAR_DELIM,
|
||||
IRC_COLOR_BAR_FG,
|
||||
server->nick_modes,
|
||||
IRC_COLOR_BAR_DELIM);
|
||||
}
|
||||
else
|
||||
{
|
||||
snprintf (buf, length, "%s%s%s",
|
||||
str_prefix,
|
||||
IRC_COLOR_INPUT_NICK,
|
||||
server->nick);
|
||||
}
|
||||
}
|
||||
|
||||
return buf;
|
||||
}
|
||||
|
||||
return NULL;
|
||||
/* build bar item */
|
||||
length = 64 + strlen (server->nick) + 64 +
|
||||
((server->nick_modes) ? strlen (server->nick_modes) : 0) + 64 + 1;
|
||||
|
||||
buf = malloc (length);
|
||||
if (buf)
|
||||
{
|
||||
if (weechat_config_boolean (irc_config_look_item_nick_modes)
|
||||
&& server->nick_modes && server->nick_modes[0])
|
||||
{
|
||||
snprintf (buf, length, "%s%s%s%s(%s%s%s)",
|
||||
str_prefix,
|
||||
IRC_COLOR_INPUT_NICK,
|
||||
server->nick,
|
||||
IRC_COLOR_BAR_DELIM,
|
||||
IRC_COLOR_BAR_FG,
|
||||
server->nick_modes,
|
||||
IRC_COLOR_BAR_DELIM);
|
||||
}
|
||||
else
|
||||
{
|
||||
snprintf (buf, length, "%s%s%s",
|
||||
str_prefix,
|
||||
IRC_COLOR_INPUT_NICK,
|
||||
server->nick);
|
||||
}
|
||||
}
|
||||
|
||||
return buf;
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
@@ -3997,29 +3997,56 @@ weechat_lua_api_bar_item_search (lua_State *L)
|
||||
|
||||
char *
|
||||
weechat_lua_api_bar_item_build_cb (void *data, struct t_gui_bar_item *item,
|
||||
struct t_gui_window *window)
|
||||
struct t_gui_window *window,
|
||||
struct t_gui_buffer *buffer,
|
||||
struct t_hashtable *extra_info)
|
||||
{
|
||||
struct t_plugin_script_cb *script_callback;
|
||||
void *func_argv[3];
|
||||
void *func_argv[5];
|
||||
char empty_arg[1] = { '\0' }, *ret;
|
||||
|
||||
script_callback = (struct t_plugin_script_cb *)data;
|
||||
|
||||
if (script_callback && script_callback->function && script_callback->function[0])
|
||||
{
|
||||
func_argv[0] = (script_callback->data) ? script_callback->data : empty_arg;
|
||||
func_argv[1] = API_PTR2STR(item);
|
||||
func_argv[2] = API_PTR2STR(window);
|
||||
if (strncmp (script_callback->function, "(extra)", 7) == 0)
|
||||
{
|
||||
/* new callback: data, item, window, buffer, extra_info */
|
||||
func_argv[0] = (script_callback->data) ? script_callback->data : empty_arg;
|
||||
func_argv[1] = API_PTR2STR(item);
|
||||
func_argv[2] = API_PTR2STR(window);
|
||||
func_argv[3] = API_PTR2STR(buffer);
|
||||
func_argv[4] = extra_info;
|
||||
|
||||
ret = (char *)weechat_lua_exec (script_callback->script, NULL,
|
||||
WEECHAT_SCRIPT_EXEC_STRING,
|
||||
script_callback->function,
|
||||
"sss", func_argv);
|
||||
ret = (char *)weechat_lua_exec (script_callback->script, NULL,
|
||||
WEECHAT_SCRIPT_EXEC_STRING,
|
||||
script_callback->function + 7,
|
||||
"ssssh", func_argv);
|
||||
|
||||
if (func_argv[1])
|
||||
free (func_argv[1]);
|
||||
if (func_argv[2])
|
||||
free (func_argv[2]);
|
||||
if (func_argv[1])
|
||||
free (func_argv[1]);
|
||||
if (func_argv[2])
|
||||
free (func_argv[2]);
|
||||
if (func_argv[3])
|
||||
free (func_argv[3]);
|
||||
}
|
||||
else
|
||||
{
|
||||
/* old callback: data, item, window */
|
||||
func_argv[0] = (script_callback->data) ? script_callback->data : empty_arg;
|
||||
func_argv[1] = API_PTR2STR(item);
|
||||
func_argv[2] = API_PTR2STR(window);
|
||||
|
||||
ret = (char *)weechat_lua_exec (script_callback->script, NULL,
|
||||
WEECHAT_SCRIPT_EXEC_STRING,
|
||||
script_callback->function,
|
||||
"sss", func_argv);
|
||||
|
||||
if (func_argv[1])
|
||||
free (func_argv[1]);
|
||||
if (func_argv[2])
|
||||
free (func_argv[2]);
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -3783,29 +3783,56 @@ XS (XS_weechat_api_bar_item_search)
|
||||
|
||||
char *
|
||||
weechat_perl_api_bar_item_build_cb (void *data, struct t_gui_bar_item *item,
|
||||
struct t_gui_window *window)
|
||||
struct t_gui_window *window,
|
||||
struct t_gui_buffer *buffer,
|
||||
struct t_hashtable *extra_info)
|
||||
{
|
||||
struct t_plugin_script_cb *script_callback;
|
||||
void *func_argv[3];
|
||||
void *func_argv[5];
|
||||
char empty_arg[1] = { '\0' }, *ret;
|
||||
|
||||
script_callback = (struct t_plugin_script_cb *)data;
|
||||
|
||||
if (script_callback && script_callback->function && script_callback->function[0])
|
||||
{
|
||||
func_argv[0] = (script_callback->data) ? script_callback->data : empty_arg;
|
||||
func_argv[1] = API_PTR2STR(item);
|
||||
func_argv[2] = API_PTR2STR(window);
|
||||
if (strncmp (script_callback->function, "(extra)", 7) == 0)
|
||||
{
|
||||
/* new callback: data, item, window, buffer, extra_info */
|
||||
func_argv[0] = (script_callback->data) ? script_callback->data : empty_arg;
|
||||
func_argv[1] = API_PTR2STR(item);
|
||||
func_argv[2] = API_PTR2STR(window);
|
||||
func_argv[3] = API_PTR2STR(buffer);
|
||||
func_argv[4] = extra_info;
|
||||
|
||||
ret = (char *)weechat_perl_exec (script_callback->script,
|
||||
WEECHAT_SCRIPT_EXEC_STRING,
|
||||
script_callback->function,
|
||||
"sss", func_argv);
|
||||
ret = (char *)weechat_perl_exec (script_callback->script,
|
||||
WEECHAT_SCRIPT_EXEC_STRING,
|
||||
script_callback->function + 7,
|
||||
"ssssh", func_argv);
|
||||
|
||||
if (func_argv[1])
|
||||
free (func_argv[1]);
|
||||
if (func_argv[2])
|
||||
free (func_argv[2]);
|
||||
if (func_argv[1])
|
||||
free (func_argv[1]);
|
||||
if (func_argv[2])
|
||||
free (func_argv[2]);
|
||||
if (func_argv[3])
|
||||
free (func_argv[3]);
|
||||
}
|
||||
else
|
||||
{
|
||||
/* old callback: data, item, window */
|
||||
func_argv[0] = (script_callback->data) ? script_callback->data : empty_arg;
|
||||
func_argv[1] = API_PTR2STR(item);
|
||||
func_argv[2] = API_PTR2STR(window);
|
||||
|
||||
ret = (char *)weechat_perl_exec (script_callback->script,
|
||||
WEECHAT_SCRIPT_EXEC_STRING,
|
||||
script_callback->function,
|
||||
"sss", func_argv);
|
||||
|
||||
if (func_argv[1])
|
||||
free (func_argv[1]);
|
||||
if (func_argv[2])
|
||||
free (func_argv[2]);
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -1258,20 +1258,39 @@ plugin_script_api_bar_item_new (struct t_weechat_plugin *weechat_plugin,
|
||||
const char *name,
|
||||
char *(*build_callback)(void *data,
|
||||
struct t_gui_bar_item *item,
|
||||
struct t_gui_window *window),
|
||||
struct t_gui_window *window,
|
||||
struct t_gui_buffer *buffer,
|
||||
struct t_hashtable *extra_info),
|
||||
const char *function,
|
||||
const char *data)
|
||||
{
|
||||
struct t_plugin_script_cb *script_cb;
|
||||
struct t_gui_bar_item *new_item;
|
||||
char str_function[1024];
|
||||
int new_callback;
|
||||
|
||||
script_cb = plugin_script_callback_add (script, function, data);
|
||||
new_callback = 0;
|
||||
if (strncmp (name, "(extra)", 7) == 0)
|
||||
{
|
||||
name += 7;
|
||||
new_callback = 1;
|
||||
}
|
||||
str_function[0] = '\0';
|
||||
if (function && function[0])
|
||||
{
|
||||
snprintf (str_function, sizeof (str_function),
|
||||
"%s%s",
|
||||
(new_callback) ? "(extra)" : "",
|
||||
function);
|
||||
}
|
||||
|
||||
script_cb = plugin_script_callback_add (script, str_function, data);
|
||||
if (!script_cb)
|
||||
return NULL;
|
||||
|
||||
new_item = weechat_bar_item_new (name,
|
||||
(function && function[0]) ? build_callback : NULL,
|
||||
(function && function[0]) ? script_cb : NULL);
|
||||
(str_function[0]) ? build_callback : NULL,
|
||||
(str_function[0]) ? script_cb : NULL);
|
||||
if (new_item)
|
||||
script_cb->bar_item = new_item;
|
||||
else
|
||||
|
||||
@@ -322,7 +322,9 @@ extern struct t_gui_bar_item *plugin_script_api_bar_item_new (struct t_weechat_p
|
||||
const char *name,
|
||||
char *(*build_callback)(void *data,
|
||||
struct t_gui_bar_item *item,
|
||||
struct t_gui_window *window),
|
||||
struct t_gui_window *window,
|
||||
struct t_gui_buffer *buffer,
|
||||
struct t_hashtable *extra_info),
|
||||
const char *function,
|
||||
const char *data);
|
||||
extern void plugin_script_api_bar_item_remove (struct t_weechat_plugin *weechat_plugin,
|
||||
|
||||
@@ -3935,29 +3935,60 @@ weechat_python_api_bar_item_search (PyObject *self, PyObject *args)
|
||||
|
||||
char *
|
||||
weechat_python_api_bar_item_build_cb (void *data, struct t_gui_bar_item *item,
|
||||
struct t_gui_window *window)
|
||||
struct t_gui_window *window,
|
||||
struct t_gui_buffer *buffer,
|
||||
struct t_hashtable *extra_info)
|
||||
{
|
||||
struct t_plugin_script_cb *script_callback;
|
||||
void *func_argv[3];
|
||||
void *func_argv[5];
|
||||
char empty_arg[1] = { '\0' }, *ret;
|
||||
|
||||
script_callback = (struct t_plugin_script_cb *)data;
|
||||
|
||||
if (script_callback && script_callback->function && script_callback->function[0])
|
||||
{
|
||||
func_argv[0] = (script_callback->data) ? script_callback->data : empty_arg;
|
||||
func_argv[1] = API_PTR2STR(item);
|
||||
func_argv[2] = API_PTR2STR(window);
|
||||
if (strncmp (script_callback->function, "(extra)", 7) == 0)
|
||||
{
|
||||
/* new callback: data, item, window, buffer, extra_info */
|
||||
func_argv[0] = (script_callback->data) ? script_callback->data : empty_arg;
|
||||
func_argv[1] = API_PTR2STR(item);
|
||||
func_argv[2] = API_PTR2STR(window);
|
||||
func_argv[3] = API_PTR2STR(buffer);
|
||||
func_argv[4] = weechat_python_hashtable_to_dict (extra_info);
|
||||
|
||||
ret = (char *)weechat_python_exec (script_callback->script,
|
||||
WEECHAT_SCRIPT_EXEC_STRING,
|
||||
script_callback->function,
|
||||
"sss", func_argv);
|
||||
ret = (char *)weechat_python_exec (script_callback->script,
|
||||
WEECHAT_SCRIPT_EXEC_STRING,
|
||||
script_callback->function + 7,
|
||||
"ssssO", func_argv);
|
||||
|
||||
if (func_argv[1])
|
||||
free (func_argv[1]);
|
||||
if (func_argv[2])
|
||||
free (func_argv[2]);
|
||||
if (func_argv[1])
|
||||
free (func_argv[1]);
|
||||
if (func_argv[2])
|
||||
free (func_argv[2]);
|
||||
if (func_argv[3])
|
||||
free (func_argv[3]);
|
||||
if (func_argv[4])
|
||||
{
|
||||
Py_XDECREF((PyObject *)func_argv[4]);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
/* old callback: data, item, window */
|
||||
func_argv[0] = (script_callback->data) ? script_callback->data : empty_arg;
|
||||
func_argv[1] = API_PTR2STR(item);
|
||||
func_argv[2] = API_PTR2STR(window);
|
||||
|
||||
ret = (char *)weechat_python_exec (script_callback->script,
|
||||
WEECHAT_SCRIPT_EXEC_STRING,
|
||||
script_callback->function,
|
||||
"sss", func_argv);
|
||||
|
||||
if (func_argv[1])
|
||||
free (func_argv[1]);
|
||||
if (func_argv[2])
|
||||
free (func_argv[2]);
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -4590,29 +4590,56 @@ weechat_ruby_api_bar_item_search (VALUE class, VALUE name)
|
||||
|
||||
char *
|
||||
weechat_ruby_api_bar_item_build_cb (void *data, struct t_gui_bar_item *item,
|
||||
struct t_gui_window *window)
|
||||
struct t_gui_window *window,
|
||||
struct t_gui_buffer *buffer,
|
||||
struct t_hashtable *extra_info)
|
||||
{
|
||||
struct t_plugin_script_cb *script_callback;
|
||||
void *func_argv[3];
|
||||
void *func_argv[5];
|
||||
char empty_arg[1] = { '\0' }, *ret;
|
||||
|
||||
script_callback = (struct t_plugin_script_cb *)data;
|
||||
|
||||
if (script_callback && script_callback->function && script_callback->function[0])
|
||||
{
|
||||
func_argv[0] = (script_callback->data) ? script_callback->data : empty_arg;
|
||||
func_argv[1] = API_PTR2STR(item);
|
||||
func_argv[2] = API_PTR2STR(window);
|
||||
if (strncmp (script_callback->function, "(extra)", 7) == 0)
|
||||
{
|
||||
/* new callback: data, item, window, buffer, extra_info */
|
||||
func_argv[0] = (script_callback->data) ? script_callback->data : empty_arg;
|
||||
func_argv[1] = API_PTR2STR(item);
|
||||
func_argv[2] = API_PTR2STR(window);
|
||||
func_argv[3] = API_PTR2STR(buffer);
|
||||
func_argv[4] = extra_info;
|
||||
|
||||
ret = (char *)weechat_ruby_exec (script_callback->script,
|
||||
WEECHAT_SCRIPT_EXEC_STRING,
|
||||
script_callback->function,
|
||||
"sss", func_argv);
|
||||
ret = (char *)weechat_ruby_exec (script_callback->script,
|
||||
WEECHAT_SCRIPT_EXEC_STRING,
|
||||
script_callback->function + 7,
|
||||
"ssssh", func_argv);
|
||||
|
||||
if (func_argv[1])
|
||||
free (func_argv[1]);
|
||||
if (func_argv[2])
|
||||
free (func_argv[2]);
|
||||
if (func_argv[1])
|
||||
free (func_argv[1]);
|
||||
if (func_argv[2])
|
||||
free (func_argv[2]);
|
||||
if (func_argv[3])
|
||||
free (func_argv[3]);
|
||||
}
|
||||
else
|
||||
{
|
||||
/* old callback: data, item, window */
|
||||
func_argv[0] = (script_callback->data) ? script_callback->data : empty_arg;
|
||||
func_argv[1] = API_PTR2STR(item);
|
||||
func_argv[2] = API_PTR2STR(window);
|
||||
|
||||
ret = (char *)weechat_ruby_exec (script_callback->script,
|
||||
WEECHAT_SCRIPT_EXEC_STRING,
|
||||
script_callback->function,
|
||||
"sss", func_argv);
|
||||
|
||||
if (func_argv[1])
|
||||
free (func_argv[1]);
|
||||
if (func_argv[2])
|
||||
free (func_argv[2]);
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -4401,29 +4401,56 @@ weechat_tcl_api_bar_item_search (ClientData clientData, Tcl_Interp *interp,
|
||||
|
||||
char *
|
||||
weechat_tcl_api_bar_item_build_cb (void *data, struct t_gui_bar_item *item,
|
||||
struct t_gui_window *window)
|
||||
struct t_gui_window *window,
|
||||
struct t_gui_buffer *buffer,
|
||||
struct t_hashtable *extra_info)
|
||||
{
|
||||
struct t_plugin_script_cb *script_callback;
|
||||
void *func_argv[3];
|
||||
void *func_argv[5];
|
||||
char empty_arg[1] = { '\0' }, *ret;
|
||||
|
||||
script_callback = (struct t_plugin_script_cb *)data;
|
||||
|
||||
if (script_callback && script_callback->function && script_callback->function[0])
|
||||
{
|
||||
func_argv[0] = (script_callback->data) ? script_callback->data : empty_arg;
|
||||
func_argv[1] = API_PTR2STR(item);
|
||||
func_argv[2] = API_PTR2STR(window);
|
||||
if (strncmp (script_callback->function, "(extra)", 7) == 0)
|
||||
{
|
||||
/* new callback: data, item, window, buffer, extra_info */
|
||||
func_argv[0] = (script_callback->data) ? script_callback->data : empty_arg;
|
||||
func_argv[1] = API_PTR2STR(item);
|
||||
func_argv[2] = API_PTR2STR(window);
|
||||
func_argv[3] = API_PTR2STR(buffer);
|
||||
func_argv[4] = extra_info;
|
||||
|
||||
ret = (char *)weechat_tcl_exec (script_callback->script,
|
||||
WEECHAT_SCRIPT_EXEC_STRING,
|
||||
script_callback->function,
|
||||
"sss", func_argv);
|
||||
ret = (char *)weechat_tcl_exec (script_callback->script,
|
||||
WEECHAT_SCRIPT_EXEC_STRING,
|
||||
script_callback->function + 7,
|
||||
"ssssh", func_argv);
|
||||
|
||||
if (func_argv[1])
|
||||
free (func_argv[1]);
|
||||
if (func_argv[2])
|
||||
free (func_argv[2]);
|
||||
if (func_argv[1])
|
||||
free (func_argv[1]);
|
||||
if (func_argv[2])
|
||||
free (func_argv[2]);
|
||||
if (func_argv[3])
|
||||
free (func_argv[3]);
|
||||
}
|
||||
else
|
||||
{
|
||||
/* old callback: data, item, window */
|
||||
func_argv[0] = (script_callback->data) ? script_callback->data : empty_arg;
|
||||
func_argv[1] = API_PTR2STR(item);
|
||||
func_argv[2] = API_PTR2STR(window);
|
||||
|
||||
ret = (char *)weechat_tcl_exec (script_callback->script,
|
||||
WEECHAT_SCRIPT_EXEC_STRING,
|
||||
script_callback->function,
|
||||
"sss", func_argv);
|
||||
|
||||
if (func_argv[1])
|
||||
free (func_argv[1]);
|
||||
if (func_argv[2])
|
||||
free (func_argv[2]);
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -52,7 +52,7 @@ struct timeval;
|
||||
* please change the date with current one; for a second change at same
|
||||
* date, increment the 01, otherwise please keep 01.
|
||||
*/
|
||||
#define WEECHAT_PLUGIN_API_VERSION "20130810-01"
|
||||
#define WEECHAT_PLUGIN_API_VERSION "20130819-01"
|
||||
|
||||
/* macros for defining plugin infos */
|
||||
#define WEECHAT_PLUGIN_NAME(__name) \
|
||||
@@ -768,7 +768,9 @@ struct t_weechat_plugin
|
||||
const char *name,
|
||||
char *(*build_callback)(void *data,
|
||||
struct t_gui_bar_item *item,
|
||||
struct t_gui_window *window),
|
||||
struct t_gui_window *window,
|
||||
struct t_gui_buffer *buffer,
|
||||
struct t_hashtable *extra_info),
|
||||
void *build_callback_data);
|
||||
void (*bar_item_update) (const char *name);
|
||||
void (*bar_item_remove) (struct t_gui_bar_item *item);
|
||||
|
||||
Reference in New Issue
Block a user