summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/core/hook/wee-hook-line.c2
-rw-r--r--src/core/wee-command.c12
-rw-r--r--src/core/wee-secure-buffer.c33
-rw-r--r--src/gui/curses/gui-curses-color.c32
-rw-r--r--src/gui/gui-buffer.c113
-rw-r--r--src/gui/gui-buffer.h19
-rw-r--r--src/gui/gui-input.c4
7 files changed, 165 insertions, 50 deletions
diff --git a/src/core/hook/wee-hook-line.c b/src/core/hook/wee-hook-line.c
index f4b605964..6c1d3f03c 100644
--- a/src/core/hook/wee-hook-line.c
+++ b/src/core/hook/wee-hook-line.c
@@ -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
diff --git a/src/core/wee-command.c b/src/core/wee-command.c
index 219c0400e..7d218ae6d 100644
--- a/src/core/wee-command.c
+++ b/src/core/wee-command.c
@@ -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
diff --git a/src/core/wee-secure-buffer.c b/src/core/wee-secure-buffer.c
index 86dab6a36..2fea6fcc3 100644
--- a/src/core/wee-secure-buffer.c
+++ b/src/core/wee-secure-buffer.c
@@ -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)
diff --git a/src/gui/curses/gui-curses-color.c b/src/gui/curses/gui-curses-color.c
index 466f33dca..47b002fd7 100644
--- a/src/gui/curses/gui-curses-color.c
+++ b/src/gui/curses/gui-curses-color.c
@@ -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,
- &gui_color_buffer_input_cb, NULL, NULL,
- &gui_color_buffer_close_cb, NULL, NULL);
- if (gui_color_buffer)
+ properties = hashtable_new (
+ 32,
+ WEECHAT_HASHTABLE_STRING,
+ WEECHAT_HASHTABLE_STRING,
+ NULL, NULL);
+ if (properties)
{
- 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");
+ 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 && !gui_color_buffer->short_name)
+ gui_color_buffer->short_name = strdup (GUI_COLOR_BUFFER_NAME);
+
+ if (properties)
+ hashtable_free (properties);
}
if (!gui_color_buffer)
diff --git a/src/gui/gui-buffer.c b/src/gui/gui-buffer.c
index 51e52fef7..c8efb3ea9 100644
--- a/src/gui/gui-buffer.c
+++ b/src/gui/gui-buffer.c
@@ -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);
@@ -837,6 +862,35 @@ gui_buffer_new (struct t_weechat_plugin *plugin,
}
/*
+ * 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;
}
diff --git a/src/gui/gui-buffer.h b/src/gui/gui-buffer.h
index 4e440e33d..c9f4ccbb6 100644
--- a/src/gui/gui-buffer.h
+++ b/src/gui/gui-buffer.h
@@ -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,
diff --git a/src/gui/gui-input.c b/src/gui/gui-input.c
index e4400a3a2..e8b6f5593 100644
--- a/src/gui/gui-input.c
+++ b/src/gui/gui-input.c
@@ -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)