mirror of
https://github.com/weechat/weechat.git
synced 2026-06-30 06:46:38 +02:00
core: add function gui_buffer_new_props (issue #1759)
This function allows to create a buffer and set properties via a hashtable, before the signal "buffer_opened" is sent.
This commit is contained in:
@@ -71,7 +71,7 @@ hook_line (struct t_weechat_plugin *plugin, const char *buffer_type,
|
||||
new_hook->hook_data = new_hook_line;
|
||||
new_hook_line->callback = callback;
|
||||
if (!buffer_type || !buffer_type[0])
|
||||
new_hook_line->buffer_type = GUI_BUFFER_TYPE_FORMATTED;
|
||||
new_hook_line->buffer_type = GUI_BUFFER_TYPE_DEFAULT;
|
||||
else if (strcmp (buffer_type, "*") == 0)
|
||||
new_hook_line->buffer_type = -1;
|
||||
else
|
||||
|
||||
@@ -628,9 +628,9 @@ COMMAND_CALLBACK(buffer)
|
||||
ptr_buffer = gui_buffer_search_by_name (PLUGIN_CORE, argv[arg_name]);
|
||||
if (!ptr_buffer)
|
||||
{
|
||||
ptr_buffer = gui_buffer_new_user (argv[arg_name]);
|
||||
if (ptr_buffer && type_free)
|
||||
gui_buffer_set (ptr_buffer, "type", "free");
|
||||
ptr_buffer = gui_buffer_new_user (
|
||||
argv[arg_name],
|
||||
(type_free) ? GUI_BUFFER_TYPE_FREE : GUI_BUFFER_TYPE_DEFAULT);
|
||||
}
|
||||
if (ptr_buffer && switch_to_buffer)
|
||||
gui_window_switch_to_buffer (gui_current_window, ptr_buffer, 1);
|
||||
@@ -5137,9 +5137,9 @@ COMMAND_CALLBACK(print)
|
||||
argv[arg_new_buffer_name]);
|
||||
if (!ptr_buffer)
|
||||
{
|
||||
ptr_buffer = gui_buffer_new_user (argv[arg_new_buffer_name]);
|
||||
if (ptr_buffer && new_buffer_type_free)
|
||||
gui_buffer_set (ptr_buffer, "type", "free");
|
||||
ptr_buffer = gui_buffer_new_user (
|
||||
argv[arg_new_buffer_name],
|
||||
(new_buffer_type_free) ? GUI_BUFFER_TYPE_FREE : GUI_BUFFER_TYPE_DEFAULT);
|
||||
}
|
||||
}
|
||||
else
|
||||
|
||||
@@ -204,20 +204,35 @@ secure_buffer_assign ()
|
||||
void
|
||||
secure_buffer_open ()
|
||||
{
|
||||
struct t_hashtable *properties;
|
||||
|
||||
if (!secure_buffer)
|
||||
{
|
||||
secure_buffer = gui_buffer_new (NULL, SECURE_BUFFER_NAME,
|
||||
&secure_buffer_input_cb, NULL, NULL,
|
||||
&secure_buffer_close_cb, NULL, NULL);
|
||||
if (secure_buffer)
|
||||
properties = hashtable_new (
|
||||
32,
|
||||
WEECHAT_HASHTABLE_STRING,
|
||||
WEECHAT_HASHTABLE_STRING,
|
||||
NULL, NULL);
|
||||
if (properties)
|
||||
{
|
||||
if (!secure_buffer->short_name)
|
||||
secure_buffer->short_name = strdup (SECURE_BUFFER_NAME);
|
||||
gui_buffer_set (secure_buffer, "type", "free");
|
||||
gui_buffer_set (secure_buffer, "localvar_set_no_log", "1");
|
||||
gui_buffer_set (secure_buffer, "key_bind_meta-v", "/secure toggle_values");
|
||||
hashtable_set (properties, "type", "free");
|
||||
hashtable_set (properties, "localvar_set_no_log", "1");
|
||||
hashtable_set (properties,
|
||||
"key_bind_meta-v", "/secure toggle_values");
|
||||
}
|
||||
|
||||
secure_buffer = gui_buffer_new_props (
|
||||
NULL, SECURE_BUFFER_NAME, properties,
|
||||
&secure_buffer_input_cb, NULL, NULL,
|
||||
&secure_buffer_close_cb, NULL, NULL);
|
||||
|
||||
if (secure_buffer && !secure_buffer->short_name)
|
||||
secure_buffer->short_name = strdup (SECURE_BUFFER_NAME);
|
||||
|
||||
secure_buffer_display_values = 0;
|
||||
|
||||
if (properties)
|
||||
hashtable_free (properties);
|
||||
}
|
||||
|
||||
if (!secure_buffer)
|
||||
|
||||
@@ -1257,20 +1257,32 @@ gui_color_buffer_assign ()
|
||||
void
|
||||
gui_color_buffer_open ()
|
||||
{
|
||||
struct t_hashtable *properties;
|
||||
|
||||
if (!gui_color_buffer)
|
||||
{
|
||||
gui_color_buffer = gui_buffer_new (
|
||||
NULL, GUI_COLOR_BUFFER_NAME,
|
||||
properties = hashtable_new (
|
||||
32,
|
||||
WEECHAT_HASHTABLE_STRING,
|
||||
WEECHAT_HASHTABLE_STRING,
|
||||
NULL, NULL);
|
||||
if (properties)
|
||||
{
|
||||
hashtable_set (properties, "type", "free");
|
||||
hashtable_set (properties, "localvar_set_no_log", "1");
|
||||
hashtable_set (properties, "key_bind_meta-c", "/color switch");
|
||||
}
|
||||
|
||||
gui_color_buffer = gui_buffer_new_props (
|
||||
NULL, GUI_COLOR_BUFFER_NAME, properties,
|
||||
&gui_color_buffer_input_cb, NULL, NULL,
|
||||
&gui_color_buffer_close_cb, NULL, NULL);
|
||||
if (gui_color_buffer)
|
||||
{
|
||||
if (!gui_color_buffer->short_name)
|
||||
gui_color_buffer->short_name = strdup (GUI_COLOR_BUFFER_NAME);
|
||||
gui_buffer_set (gui_color_buffer, "type", "free");
|
||||
gui_buffer_set (gui_color_buffer, "localvar_set_no_log", "1");
|
||||
gui_buffer_set (gui_color_buffer, "key_bind_meta-c", "/color switch");
|
||||
}
|
||||
|
||||
if (gui_color_buffer && !gui_color_buffer->short_name)
|
||||
gui_color_buffer->short_name = strdup (GUI_COLOR_BUFFER_NAME);
|
||||
|
||||
if (properties)
|
||||
hashtable_free (properties);
|
||||
}
|
||||
|
||||
if (!gui_color_buffer)
|
||||
|
||||
+92
-21
@@ -79,6 +79,9 @@ char *gui_buffer_reserved_names[] =
|
||||
NULL
|
||||
};
|
||||
|
||||
int gui_buffer_set_signals = 1; /* 0 to disable signals sent in */
|
||||
/* function gui_buffer_set */
|
||||
|
||||
char *gui_buffer_type_string[GUI_BUFFER_NUM_TYPES] =
|
||||
{ "formatted", "free" };
|
||||
|
||||
@@ -630,25 +633,43 @@ gui_buffer_is_reserved_name (const char *name)
|
||||
}
|
||||
|
||||
/*
|
||||
* Creates a new buffer in current window.
|
||||
* Applies buffer properties (callback of hashtable_map).
|
||||
*/
|
||||
|
||||
void
|
||||
gui_buffer_apply_properties_cb (void *data,
|
||||
struct t_hashtable *hashtable,
|
||||
const void *key, const void *value)
|
||||
{
|
||||
/* make C compiler happy */
|
||||
(void) hashtable;
|
||||
|
||||
gui_buffer_set ((struct t_gui_buffer *)data,
|
||||
(const char *)key,
|
||||
(const char *)value);
|
||||
}
|
||||
|
||||
/*
|
||||
* Creates a new buffer in current window with some optional properties.
|
||||
*
|
||||
* Returns pointer to new buffer, NULL if error.
|
||||
*/
|
||||
|
||||
struct t_gui_buffer *
|
||||
gui_buffer_new (struct t_weechat_plugin *plugin,
|
||||
const char *name,
|
||||
int (*input_callback)(const void *pointer,
|
||||
void *data,
|
||||
struct t_gui_buffer *buffer,
|
||||
const char *input_data),
|
||||
const void *input_callback_pointer,
|
||||
void *input_callback_data,
|
||||
int (*close_callback)(const void *pointer,
|
||||
void *data,
|
||||
struct t_gui_buffer *buffer),
|
||||
const void *close_callback_pointer,
|
||||
void *close_callback_data)
|
||||
gui_buffer_new_props (struct t_weechat_plugin *plugin,
|
||||
const char *name,
|
||||
struct t_hashtable *properties,
|
||||
int (*input_callback)(const void *pointer,
|
||||
void *data,
|
||||
struct t_gui_buffer *buffer,
|
||||
const char *input_data),
|
||||
const void *input_callback_pointer,
|
||||
void *input_callback_data,
|
||||
int (*close_callback)(const void *pointer,
|
||||
void *data,
|
||||
struct t_gui_buffer *buffer),
|
||||
const void *close_callback_pointer,
|
||||
void *close_callback_data)
|
||||
{
|
||||
struct t_gui_buffer *new_buffer;
|
||||
int first_buffer_creation;
|
||||
@@ -694,7 +715,7 @@ gui_buffer_new (struct t_weechat_plugin *plugin,
|
||||
new_buffer->old_full_name = NULL;
|
||||
gui_buffer_build_full_name (new_buffer);
|
||||
new_buffer->short_name = NULL;
|
||||
new_buffer->type = GUI_BUFFER_TYPE_FORMATTED;
|
||||
new_buffer->type = GUI_BUFFER_TYPE_DEFAULT;
|
||||
new_buffer->notify = CONFIG_INTEGER(config_look_buffer_notify_default);
|
||||
new_buffer->num_displayed = 0;
|
||||
new_buffer->active = 1;
|
||||
@@ -823,6 +844,10 @@ gui_buffer_new (struct t_weechat_plugin *plugin,
|
||||
/* assign this buffer to windows of layout */
|
||||
gui_layout_window_assign_buffer (new_buffer);
|
||||
|
||||
/* apply properties */
|
||||
if (properties)
|
||||
hashtable_map (properties, &gui_buffer_apply_properties_cb, new_buffer);
|
||||
|
||||
if (first_buffer_creation)
|
||||
{
|
||||
gui_buffer_visited_add (new_buffer);
|
||||
@@ -836,6 +861,35 @@ gui_buffer_new (struct t_weechat_plugin *plugin,
|
||||
return new_buffer;
|
||||
}
|
||||
|
||||
/*
|
||||
* Creates a new buffer in current window.
|
||||
*
|
||||
* Returns pointer to new buffer, NULL if error.
|
||||
*/
|
||||
|
||||
struct t_gui_buffer *
|
||||
gui_buffer_new (struct t_weechat_plugin *plugin,
|
||||
const char *name,
|
||||
int (*input_callback)(const void *pointer,
|
||||
void *data,
|
||||
struct t_gui_buffer *buffer,
|
||||
const char *input_data),
|
||||
const void *input_callback_pointer,
|
||||
void *input_callback_data,
|
||||
int (*close_callback)(const void *pointer,
|
||||
void *data,
|
||||
struct t_gui_buffer *buffer),
|
||||
const void *close_callback_pointer,
|
||||
void *close_callback_data)
|
||||
{
|
||||
return gui_buffer_new_props (
|
||||
plugin,
|
||||
name,
|
||||
NULL, /* properties */
|
||||
input_callback, input_callback_pointer, input_callback_data,
|
||||
close_callback, close_callback_pointer, close_callback_data);
|
||||
}
|
||||
|
||||
/*
|
||||
* Input callback for user buffers.
|
||||
*/
|
||||
@@ -863,15 +917,32 @@ gui_buffer_user_input_cb (const void *pointer, void *data,
|
||||
*/
|
||||
|
||||
struct t_gui_buffer *
|
||||
gui_buffer_new_user (const char *name)
|
||||
gui_buffer_new_user (const char *name, enum t_gui_buffer_type buffer_type)
|
||||
{
|
||||
struct t_hashtable *properties;
|
||||
struct t_gui_buffer *new_buffer;
|
||||
|
||||
new_buffer = gui_buffer_new (NULL, name,
|
||||
&gui_buffer_user_input_cb, NULL, NULL,
|
||||
NULL, NULL, NULL);
|
||||
if (new_buffer)
|
||||
gui_buffer_set (new_buffer, "localvar_set_type", "user");
|
||||
properties = hashtable_new (
|
||||
32,
|
||||
WEECHAT_HASHTABLE_STRING,
|
||||
WEECHAT_HASHTABLE_STRING,
|
||||
NULL, NULL);
|
||||
if (properties)
|
||||
{
|
||||
if (buffer_type != GUI_BUFFER_TYPE_DEFAULT)
|
||||
{
|
||||
hashtable_set (properties,
|
||||
"type", gui_buffer_type_string[buffer_type]);
|
||||
}
|
||||
hashtable_set (properties, "localvar_set_type", "user");
|
||||
}
|
||||
|
||||
new_buffer = gui_buffer_new_props (NULL, name, properties,
|
||||
&gui_buffer_user_input_cb, NULL, NULL,
|
||||
NULL, NULL, NULL);
|
||||
|
||||
if (properties)
|
||||
hashtable_free (properties);
|
||||
|
||||
return new_buffer;
|
||||
}
|
||||
|
||||
+18
-1
@@ -45,6 +45,8 @@ enum t_gui_buffer_notify
|
||||
GUI_BUFFER_NUM_NOTIFY,
|
||||
};
|
||||
|
||||
#define GUI_BUFFER_TYPE_DEFAULT GUI_BUFFER_TYPE_FORMATTED
|
||||
|
||||
#define GUI_BUFFER_MAIN "weechat"
|
||||
|
||||
#define GUI_BUFFERS_MAX 10000
|
||||
@@ -264,6 +266,20 @@ extern void gui_buffer_local_var_remove (struct t_gui_buffer *buffer,
|
||||
extern void gui_buffer_notify_set_all ();
|
||||
extern void gui_buffer_input_buffer_init (struct t_gui_buffer *buffer);
|
||||
extern int gui_buffer_is_reserved_name (const char *name);
|
||||
extern struct t_gui_buffer *gui_buffer_new_props (struct t_weechat_plugin *plugin,
|
||||
const char *name,
|
||||
struct t_hashtable *properties,
|
||||
int (*input_callback)(const void *pointer,
|
||||
void *data,
|
||||
struct t_gui_buffer *buffer,
|
||||
const char *input_data),
|
||||
const void *input_callback_pointer,
|
||||
void *input_callback_data,
|
||||
int (*close_callback)(const void *pointer,
|
||||
void *data,
|
||||
struct t_gui_buffer *buffer),
|
||||
const void *close_callback_pointer,
|
||||
void *close_callback_data);
|
||||
extern struct t_gui_buffer *gui_buffer_new (struct t_weechat_plugin *plugin,
|
||||
const char *name,
|
||||
int (*input_callback)(const void *pointer,
|
||||
@@ -277,7 +293,8 @@ extern struct t_gui_buffer *gui_buffer_new (struct t_weechat_plugin *plugin,
|
||||
struct t_gui_buffer *buffer),
|
||||
const void *close_callback_pointer,
|
||||
void *close_callback_data);
|
||||
extern struct t_gui_buffer *gui_buffer_new_user (const char *name);
|
||||
extern struct t_gui_buffer *gui_buffer_new_user (const char *name,
|
||||
enum t_gui_buffer_type buffer_type);
|
||||
extern void gui_buffer_user_set_callbacks ();
|
||||
extern int gui_buffer_valid (struct t_gui_buffer *buffer);
|
||||
extern char *gui_buffer_string_replace_local_var (struct t_gui_buffer *buffer,
|
||||
|
||||
+2
-2
@@ -690,8 +690,8 @@ gui_input_search_switch_where (struct t_gui_buffer *buffer)
|
||||
window = gui_window_search_with_buffer (buffer);
|
||||
if (window && (window->buffer->text_search != GUI_TEXT_SEARCH_DISABLED))
|
||||
{
|
||||
/* it's not possible to change that in a buffer with free content */
|
||||
if (window->buffer->type == GUI_BUFFER_TYPE_FREE)
|
||||
/* it's not possible to change that in a buffer not "formatted" */
|
||||
if (window->buffer->type != GUI_BUFFER_TYPE_FORMATTED)
|
||||
return;
|
||||
|
||||
if (window->buffer->text_search_where == GUI_TEXT_SEARCH_IN_MESSAGE)
|
||||
|
||||
Reference in New Issue
Block a user