diff options
-rw-r--r-- | src/core/hook/wee-hook-line.c | 2 | ||||
-rw-r--r-- | src/core/wee-command.c | 12 | ||||
-rw-r--r-- | src/core/wee-secure-buffer.c | 33 | ||||
-rw-r--r-- | src/gui/curses/gui-curses-color.c | 32 | ||||
-rw-r--r-- | src/gui/gui-buffer.c | 113 | ||||
-rw-r--r-- | src/gui/gui-buffer.h | 19 | ||||
-rw-r--r-- | src/gui/gui-input.c | 4 |
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) |