summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorSébastien Helleu <flashcode@flashtux.org>2017-08-21 07:41:28 +0200
committerSébastien Helleu <flashcode@flashtux.org>2017-08-21 07:41:28 +0200
commitdb0bdc2ac69c27728fa415dd452fc88bb9e92f0f (patch)
treec5ff585133bde66c7653b113bcce1d9abb0ea7fe /src
parent8c554d88c93a48bec48317b15d1da61fa20d6cbb (diff)
downloadweechat-db0bdc2ac69c27728fa415dd452fc88bb9e92f0f.zip
core: add flag "input_get_empty" in buffer
The default value is 0 (legacy behavior). When it is set to 1, an empty input (just by pressing Return with nothing in input) is sent to the input callback, which receives an empty string.
Diffstat (limited to 'src')
-rw-r--r--src/core/wee-input.c7
-rw-r--r--src/core/wee-upgrade.c3
-rw-r--r--src/gui/gui-buffer.c36
-rw-r--r--src/gui/gui-buffer.h2
-rw-r--r--src/gui/gui-input.c3
5 files changed, 42 insertions, 9 deletions
diff --git a/src/core/wee-input.c b/src/core/wee-input.c
index e90e31650..efbea6766 100644
--- a/src/core/wee-input.c
+++ b/src/core/wee-input.c
@@ -194,8 +194,7 @@ input_data (struct t_gui_buffer *buffer, const char *data)
rc = WEECHAT_RC_OK;
- if (!buffer || !gui_buffer_valid (buffer)
- || !data || !data[0] || (data[0] == '\r') || (data[0] == '\n'))
+ if (!buffer || !gui_buffer_valid (buffer) || !data)
{
return WEECHAT_RC_ERROR;
}
@@ -213,12 +212,12 @@ input_data (struct t_gui_buffer *buffer, const char *data)
data);
/* data was dropped? */
- if (new_data && !new_data[0])
+ if (data[0] && new_data && !new_data[0])
goto end;
first_command = 1;
ptr_data = (new_data) ? new_data : data;
- while (ptr_data && ptr_data[0])
+ while (ptr_data)
{
/*
* if the buffer pointer is not valid any more (or if it's another
diff --git a/src/core/wee-upgrade.c b/src/core/wee-upgrade.c
index 3dbf05272..5da9074a8 100644
--- a/src/core/wee-upgrade.c
+++ b/src/core/wee-upgrade.c
@@ -509,6 +509,9 @@ upgrade_weechat_read_buffer (struct t_infolist *infolist)
ptr_buffer->input = infolist_integer (infolist, "input");
ptr_buffer->input_get_unknown_commands =
infolist_integer (infolist, "input_get_unknown_commands");
+ ptr_buffer->input_get_empty =
+ infolist_integer (infolist, "input_get_empty");
+
if (infolist_integer (infolist, "input_buffer_alloc") > 0)
{
ptr_buffer->input_buffer =
diff --git a/src/gui/gui-buffer.c b/src/gui/gui-buffer.c
index f30a78db7..f2dbb5d30 100644
--- a/src/gui/gui-buffer.c
+++ b/src/gui/gui-buffer.c
@@ -84,9 +84,9 @@ char *gui_buffer_properties_get_integer[] =
"nicklist_case_sensitive", "nicklist_max_length", "nicklist_display_groups",
"nicklist_count", "nicklist_groups_count", "nicklist_nicks_count",
"nicklist_visible_count", "input", "input_get_unknown_commands",
- "input_size", "input_length", "input_pos", "input_1st_display",
- "num_history", "text_search", "text_search_exact", "text_search_regex",
- "text_search_where", "text_search_found",
+ "input_get_empty", "input_size", "input_length", "input_pos",
+ "input_1st_display", "num_history", "text_search", "text_search_exact",
+ "text_search_regex", "text_search_where", "text_search_found",
NULL
};
char *gui_buffer_properties_get_string[] =
@@ -107,7 +107,7 @@ char *gui_buffer_properties_set[] =
"highlight_words_del", "highlight_regex", "highlight_tags_restrict",
"highlight_tags", "hotlist_max_level_nicks", "hotlist_max_level_nicks_add",
"hotlist_max_level_nicks_del", "input", "input_pos",
- "input_get_unknown_commands",
+ "input_get_unknown_commands", "input_get_empty",
NULL
};
@@ -661,6 +661,7 @@ gui_buffer_new (struct t_weechat_plugin *plugin,
new_buffer->input_callback_pointer = input_callback_pointer;
new_buffer->input_callback_data = input_callback_data;
new_buffer->input_get_unknown_commands = 0;
+ new_buffer->input_get_empty = 0;
gui_buffer_input_buffer_init (new_buffer);
/* undo for input */
@@ -1063,6 +1064,8 @@ gui_buffer_get_integer (struct t_gui_buffer *buffer, const char *property)
return buffer->input;
else if (string_strcasecmp (property, "input_get_unknown_commands") == 0)
return buffer->input_get_unknown_commands;
+ else if (string_strcasecmp (property, "input_get_empty") == 0)
+ return buffer->input_get_empty;
else if (string_strcasecmp (property, "input_size") == 0)
return buffer->input_buffer_size;
else if (string_strcasecmp (property, "input_length") == 0)
@@ -1761,6 +1764,20 @@ gui_buffer_set_input_get_unknown_commands (struct t_gui_buffer *buffer,
}
/*
+ * Sets flag "input_get_empty" for a buffer.
+ */
+
+void
+gui_buffer_set_input_get_empty (struct t_gui_buffer *buffer,
+ int input_get_empty)
+{
+ if (!buffer)
+ return;
+
+ buffer->input_get_empty = (input_get_empty) ? 1 : 0;
+}
+
+/*
* Sets unread marker for a buffer.
*/
@@ -2025,6 +2042,13 @@ gui_buffer_set (struct t_gui_buffer *buffer, const char *property,
if (error && !error[0])
gui_buffer_set_input_get_unknown_commands (buffer, number);
}
+ else if (string_strcasecmp (property, "input_get_empty") == 0)
+ {
+ error = NULL;
+ number = strtol (value, &error, 10);
+ if (error && !error[0])
+ gui_buffer_set_input_get_empty (buffer, number);
+ }
else if (string_strncasecmp (property, "localvar_set_", 13) == 0)
{
if (value)
@@ -4125,6 +4149,7 @@ gui_buffer_hdata_buffer_cb (const void *pointer, void *data,
HDATA_VAR(struct t_gui_buffer, input_callback_pointer, POINTER, 0, NULL, NULL);
HDATA_VAR(struct t_gui_buffer, input_callback_data, POINTER, 0, NULL, NULL);
HDATA_VAR(struct t_gui_buffer, input_get_unknown_commands, INTEGER, 0, NULL, NULL);
+ HDATA_VAR(struct t_gui_buffer, input_get_empty, INTEGER, 0, NULL, NULL);
HDATA_VAR(struct t_gui_buffer, input_buffer, STRING, 0, NULL, NULL);
HDATA_VAR(struct t_gui_buffer, input_buffer_alloc, INTEGER, 0, NULL, NULL);
HDATA_VAR(struct t_gui_buffer, input_buffer_size, INTEGER, 0, NULL, NULL);
@@ -4321,6 +4346,8 @@ gui_buffer_add_to_infolist (struct t_infolist *infolist,
return 0;
if (!infolist_new_var_integer (ptr_item, "input_get_unknown_commands", buffer->input_get_unknown_commands))
return 0;
+ if (!infolist_new_var_integer (ptr_item, "input_get_empty", buffer->input_get_empty))
+ return 0;
if (!infolist_new_var_string (ptr_item, "input_buffer", buffer->input_buffer))
return 0;
if (!infolist_new_var_integer (ptr_item, "input_buffer_alloc", buffer->input_buffer_alloc))
@@ -4532,6 +4559,7 @@ gui_buffer_print_log ()
log_printf (" input_callback_pointer. : 0x%lx", ptr_buffer->input_callback_pointer);
log_printf (" input_callback_data . . : 0x%lx", ptr_buffer->input_callback_data);
log_printf (" input_get_unknown_cmd . : %d", ptr_buffer->input_get_unknown_commands);
+ log_printf (" input_get_empty . . . . : %d", ptr_buffer->input_get_empty);
log_printf (" input_buffer. . . . . . : '%s'", ptr_buffer->input_buffer);
log_printf (" input_buffer_alloc. . . : %d", ptr_buffer->input_buffer_alloc);
log_printf (" input_buffer_size . . . : %d", ptr_buffer->input_buffer_size);
diff --git a/src/gui/gui-buffer.h b/src/gui/gui-buffer.h
index 99aabcb6e..fe7cc9e9d 100644
--- a/src/gui/gui-buffer.h
+++ b/src/gui/gui-buffer.h
@@ -154,6 +154,8 @@ struct t_gui_buffer
/* to this buffer */
int input_get_unknown_commands; /* 1 if unknown commands are sent to */
/* input_callback */
+ int input_get_empty; /* 1 if empty input is sent to */
+ /* input_callback */
char *input_buffer; /* input buffer */
int input_buffer_alloc; /* input buffer: allocated size */
int input_buffer_size; /* buffer size in bytes */
diff --git a/src/gui/gui-input.c b/src/gui/gui-input.c
index 2c284677d..4efd1737d 100644
--- a/src/gui/gui-input.c
+++ b/src/gui/gui-input.c
@@ -412,7 +412,8 @@ gui_input_return (struct t_gui_buffer *buffer)
gui_window_bare_display_toggle (NULL);
}
- if (buffer->input && (buffer->input_buffer_size > 0))
+ if (buffer->input
+ && (buffer->input_get_empty || (buffer->input_buffer_size > 0)))
{
buffer->input_buffer[buffer->input_buffer_size] = '\0';
command = strdup (buffer->input_buffer);