mirror of
https://github.com/weechat/weechat.git
synced 2026-06-29 06:16:40 +02:00
Reintroduce option "irc.network.send_unknown_commands", save extra data for buffers with /upgrade (title, input data, text search)
This commit is contained in:
+36
-21
@@ -57,8 +57,27 @@ input_is_command (const char *line)
|
||||
}
|
||||
|
||||
/*
|
||||
* input_exec_command: executes a command (WeeChat internal or a
|
||||
* plugin command)
|
||||
* input_exec_data: send data to buffer input callbackr
|
||||
*/
|
||||
|
||||
void
|
||||
input_exec_data (struct t_gui_buffer *buffer, const char *data)
|
||||
{
|
||||
if (buffer->input_callback)
|
||||
{
|
||||
(void)(buffer->input_callback) (buffer->input_callback_data,
|
||||
buffer,
|
||||
data);
|
||||
}
|
||||
else
|
||||
gui_chat_printf (buffer,
|
||||
_("%sYou can not write text in this "
|
||||
"buffer"),
|
||||
gui_chat_prefix[GUI_CHAT_PREFIX_ERROR]);
|
||||
}
|
||||
|
||||
/*
|
||||
* input_exec_command: execute a command (WeeChat internal or a plugin command)
|
||||
* if only_builtin == 1, then try only
|
||||
* WeeChat commands (not plugins neither aliases)
|
||||
* returns: 1 if command was executed succesfully
|
||||
@@ -120,11 +139,20 @@ input_exec_command (struct t_gui_buffer *buffer,
|
||||
command + 1);
|
||||
break;
|
||||
default: /* no command hooked */
|
||||
gui_chat_printf (NULL,
|
||||
_("%sError: unknown command \"%s\" (type /help "
|
||||
"for help)"),
|
||||
gui_chat_prefix[GUI_CHAT_PREFIX_ERROR],
|
||||
command + 1);
|
||||
/* if unknown commands are accepted by this buffer, just send
|
||||
input text as data to buffer, otherwise display error */
|
||||
if (buffer->input_get_unknown_commands)
|
||||
{
|
||||
input_exec_data (buffer, string);
|
||||
}
|
||||
else
|
||||
{
|
||||
gui_chat_printf (NULL,
|
||||
_("%sError: unknown command \"%s\" (type /help "
|
||||
"for help)"),
|
||||
gui_chat_prefix[GUI_CHAT_PREFIX_ERROR],
|
||||
command + 1);
|
||||
}
|
||||
break;
|
||||
}
|
||||
free (command);
|
||||
@@ -175,20 +203,7 @@ input_data (struct t_gui_buffer *buffer, const char *data)
|
||||
}
|
||||
else
|
||||
{
|
||||
if ((ptr_data[0] == '/') && (ptr_data[1] == '/'))
|
||||
ptr_data++;
|
||||
|
||||
if (buffer->input_callback)
|
||||
{
|
||||
(void)(buffer->input_callback) (buffer->input_callback_data,
|
||||
buffer,
|
||||
ptr_data);
|
||||
}
|
||||
else
|
||||
gui_chat_printf (buffer,
|
||||
_("%sYou can not write text in this "
|
||||
"buffer"),
|
||||
gui_chat_prefix[GUI_CHAT_PREFIX_ERROR]);
|
||||
input_exec_data (buffer, ptr_data);
|
||||
}
|
||||
|
||||
if (pos)
|
||||
|
||||
+43
-2
@@ -325,16 +325,57 @@ upgrade_weechat_read_cb (int object_id,
|
||||
{
|
||||
if (infolist_integer (infolist, "current_buffer"))
|
||||
upgrade_set_current_buffer = upgrade_current_buffer;
|
||||
upgrade_current_buffer->plugin_name_for_upgrade =
|
||||
strdup (infolist_string (infolist, "plugin_name"));
|
||||
upgrade_current_buffer->short_name =
|
||||
(infolist_string (infolist, "short_name")) ?
|
||||
strdup (infolist_string (infolist, "short_name")) :
|
||||
strdup (infolist_string (infolist, "name"));
|
||||
upgrade_current_buffer->plugin_name_for_upgrade =
|
||||
strdup (infolist_string (infolist, "plugin_name"));
|
||||
upgrade_current_buffer->type =
|
||||
infolist_integer (infolist, "type");
|
||||
upgrade_current_buffer->notify =
|
||||
infolist_integer (infolist, "notify");
|
||||
upgrade_current_buffer->nicklist_case_sensitive =
|
||||
infolist_integer (infolist, "nicklist_case_sensitive");
|
||||
upgrade_current_buffer->nicklist_display_groups =
|
||||
infolist_integer (infolist, "nicklist_display_groups");
|
||||
upgrade_current_buffer->title =
|
||||
(infolist_string (infolist, "title")) ?
|
||||
strdup (infolist_string (infolist, "title")) : NULL;
|
||||
upgrade_current_buffer->input =
|
||||
infolist_integer (infolist, "input");
|
||||
upgrade_current_buffer->input_get_unknown_commands =
|
||||
infolist_integer (infolist, "input_get_unknown_commands");
|
||||
if (infolist_integer (infolist, "input_buffer_alloc") > 0)
|
||||
{
|
||||
upgrade_current_buffer->input_buffer =
|
||||
malloc (infolist_integer (infolist, "input_buffer_alloc"));
|
||||
if (upgrade_current_buffer->input_buffer)
|
||||
{
|
||||
upgrade_current_buffer->input_buffer_size =
|
||||
infolist_integer (infolist, "input_buffer_size");
|
||||
upgrade_current_buffer->input_buffer_length =
|
||||
infolist_integer (infolist, "input_buffer_length");
|
||||
upgrade_current_buffer->input_buffer_pos =
|
||||
infolist_integer (infolist, "input_buffer_pos");
|
||||
upgrade_current_buffer->input_buffer_1st_display =
|
||||
infolist_integer (infolist, "input_buffer_1st_display");
|
||||
if (infolist_string (infolist, "input_buffer"))
|
||||
strcpy (upgrade_current_buffer->input_buffer,
|
||||
infolist_string (infolist, "input_buffer"));
|
||||
else
|
||||
upgrade_current_buffer->input_buffer[0] = '\0';
|
||||
}
|
||||
}
|
||||
upgrade_current_buffer->text_search =
|
||||
infolist_integer (infolist, "text_search");
|
||||
upgrade_current_buffer->text_search_exact =
|
||||
infolist_integer (infolist, "text_search_exact");
|
||||
upgrade_current_buffer->text_search_found =
|
||||
infolist_integer (infolist, "text_search_found");
|
||||
if (infolist_string (infolist, "text_search_input"))
|
||||
upgrade_current_buffer->text_search_input =
|
||||
strdup (infolist_string (infolist, "text_search_input"));
|
||||
gui_buffer_set_highlight_words (upgrade_current_buffer,
|
||||
infolist_string (infolist, "highlight_words"));
|
||||
gui_buffer_set_highlight_tags (upgrade_current_buffer,
|
||||
|
||||
+42
-1
@@ -316,6 +316,7 @@ gui_buffer_new (struct t_weechat_plugin *plugin,
|
||||
new_buffer->input = 1;
|
||||
new_buffer->input_callback = input_callback;
|
||||
new_buffer->input_callback_data = input_callback_data;
|
||||
new_buffer->input_get_unknown_commands = 0;
|
||||
new_buffer->input_buffer_alloc = GUI_BUFFER_INPUT_BLOCK_SIZE;
|
||||
new_buffer->input_buffer = malloc (GUI_BUFFER_INPUT_BLOCK_SIZE);
|
||||
new_buffer->input_buffer[0] = '\0';
|
||||
@@ -749,6 +750,18 @@ gui_buffer_set_highlight_tags (struct t_gui_buffer *buffer,
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* gui_buffer_set_input_get_unknown_commands: set "input_get_unknown_commands"
|
||||
* flag for a buffer
|
||||
*/
|
||||
|
||||
void
|
||||
gui_buffer_set_input_get_unknown_commands (struct t_gui_buffer *buffer,
|
||||
int input_get_unknown_commands)
|
||||
{
|
||||
buffer->input_get_unknown_commands = (input_get_unknown_commands) ? 1 : 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* gui_buffer_set_unread: set unread marker for a buffer
|
||||
*/
|
||||
@@ -892,6 +905,13 @@ gui_buffer_set (struct t_gui_buffer *buffer, const char *property,
|
||||
gui_input_text_changed_signal ();
|
||||
gui_buffer_ask_input_refresh (buffer, 1);
|
||||
}
|
||||
else if (string_strcasecmp (property, "input_get_unknown_commands") == 0)
|
||||
{
|
||||
error = NULL;
|
||||
number = strtol (value, &error, 10);
|
||||
if (error && !error[0])
|
||||
gui_buffer_set_input_get_unknown_commands (buffer, number);
|
||||
}
|
||||
else if (string_strncasecmp (property, "localvar_set_", 13) == 0)
|
||||
{
|
||||
if (value)
|
||||
@@ -1483,7 +1503,27 @@ gui_buffer_add_to_infolist (struct t_infolist *infolist,
|
||||
return 0;
|
||||
if (!infolist_new_var_integer (ptr_item, "input", buffer->input))
|
||||
return 0;
|
||||
if (!infolist_new_var_string (ptr_item, "input_string", buffer->input_buffer))
|
||||
if (!infolist_new_var_integer (ptr_item, "input_get_unknown_commands", buffer->input_get_unknown_commands))
|
||||
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))
|
||||
return 0;
|
||||
if (!infolist_new_var_integer (ptr_item, "input_buffer_size", buffer->input_buffer_size))
|
||||
return 0;
|
||||
if (!infolist_new_var_integer (ptr_item, "input_buffer_length", buffer->input_buffer_length))
|
||||
return 0;
|
||||
if (!infolist_new_var_integer (ptr_item, "input_buffer_pos", buffer->input_buffer_pos))
|
||||
return 0;
|
||||
if (!infolist_new_var_integer (ptr_item, "input_buffer_1st_display", buffer->input_buffer_1st_display))
|
||||
return 0;
|
||||
if (!infolist_new_var_integer (ptr_item, "text_search", buffer->text_search))
|
||||
return 0;
|
||||
if (!infolist_new_var_integer (ptr_item, "text_search_exact", buffer->text_search_exact))
|
||||
return 0;
|
||||
if (!infolist_new_var_integer (ptr_item, "text_search_found", buffer->text_search_found))
|
||||
return 0;
|
||||
if (!infolist_new_var_string (ptr_item, "text_search_input", buffer->text_search_input))
|
||||
return 0;
|
||||
if (!infolist_new_var_string (ptr_item, "highlight_words", buffer->highlight_words))
|
||||
return 0;
|
||||
@@ -1700,6 +1740,7 @@ gui_buffer_print_log ()
|
||||
log_printf (" input. . . . . . . . . : %d", ptr_buffer->input);
|
||||
log_printf (" input_callback . . . . : 0x%lx", ptr_buffer->input_callback);
|
||||
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_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);
|
||||
|
||||
@@ -128,6 +128,8 @@ struct t_gui_buffer
|
||||
const char *input_data);
|
||||
void *input_callback_data; /* data for callback */
|
||||
/* to this buffer */
|
||||
int input_get_unknown_commands; /* 1 if unknown commands are 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 */
|
||||
|
||||
@@ -105,6 +105,9 @@ irc_channel_new (struct t_irc_server *server, int channel_type,
|
||||
|
||||
weechat_hook_signal_send ("logger_backlog",
|
||||
WEECHAT_HOOK_SIGNAL_POINTER, new_buffer);
|
||||
|
||||
if (weechat_config_boolean (irc_config_network_send_unknown_commands))
|
||||
weechat_buffer_set (new_buffer, "input_get_unknown_commands", "1");
|
||||
}
|
||||
|
||||
if (channel_type == IRC_CHANNEL_TYPE_CHANNEL)
|
||||
|
||||
@@ -238,6 +238,63 @@ irc_config_change_network_away_check (void *data,
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* irc_config_change_network_send_unknown_commands: called when "send_unknown_commands"
|
||||
* is changed
|
||||
*/
|
||||
|
||||
void
|
||||
irc_config_change_network_send_unknown_commands (void *data,
|
||||
struct t_config_option *option)
|
||||
{
|
||||
char value[2];
|
||||
struct t_irc_server *ptr_server;
|
||||
struct t_irc_channel *ptr_channel;
|
||||
|
||||
/* make C compiler happy */
|
||||
(void) data;
|
||||
(void) option;
|
||||
|
||||
strcpy (value,
|
||||
(weechat_config_boolean (irc_config_network_send_unknown_commands)) ?
|
||||
"1" : "0");
|
||||
|
||||
if (weechat_config_boolean (irc_config_look_one_server_buffer))
|
||||
{
|
||||
if (irc_buffer_servers)
|
||||
{
|
||||
weechat_buffer_set (irc_buffer_servers,
|
||||
"input_get_unknown_commands", value);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
for (ptr_server = irc_servers; ptr_server;
|
||||
ptr_server = ptr_server->next_server)
|
||||
{
|
||||
if (ptr_server->buffer)
|
||||
{
|
||||
weechat_buffer_set (ptr_server->buffer,
|
||||
"input_get_unknown_commands", value);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for (ptr_server = irc_servers; ptr_server;
|
||||
ptr_server = ptr_server->next_server)
|
||||
{
|
||||
for (ptr_channel = ptr_server->channels; ptr_channel;
|
||||
ptr_channel = ptr_channel->next_channel)
|
||||
{
|
||||
if (ptr_channel->buffer)
|
||||
{
|
||||
weechat_buffer_set (ptr_channel->buffer,
|
||||
"input_get_unknown_commands", value);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* irc_config_server_default_change_cb: callback called when a default server
|
||||
* option is modified
|
||||
@@ -1129,7 +1186,8 @@ irc_config_init ()
|
||||
irc_config_file, ptr_section,
|
||||
"send_unknown_commands", "boolean",
|
||||
N_("send unknown commands to IRC server"),
|
||||
NULL, 0, 0, "off", NULL, NULL, NULL, NULL, NULL, NULL, NULL);
|
||||
NULL, 0, 0, "off", NULL, NULL, NULL,
|
||||
&irc_config_change_network_send_unknown_commands, NULL, NULL, NULL);
|
||||
|
||||
/* filters */
|
||||
ptr_section = weechat_config_new_section (irc_config_file, "ignore",
|
||||
|
||||
@@ -143,6 +143,7 @@ int
|
||||
irc_input_data_cb (void *data, struct t_gui_buffer *buffer,
|
||||
const char *input_data)
|
||||
{
|
||||
const char *ptr_data;
|
||||
char *data_with_colors, *msg;
|
||||
|
||||
/* make C compiler happy */
|
||||
@@ -150,12 +151,24 @@ irc_input_data_cb (void *data, struct t_gui_buffer *buffer,
|
||||
|
||||
IRC_GET_SERVER_CHANNEL(buffer);
|
||||
|
||||
/* if send unknown commands is enabled and that input data is a command,
|
||||
then send this command to IRC server */
|
||||
if (weechat_config_boolean (irc_config_network_send_unknown_commands)
|
||||
&& (input_data[0] == '/') && (input_data[1] != '/'))
|
||||
{
|
||||
if (ptr_server)
|
||||
irc_server_sendf (ptr_server, input_data + 1);
|
||||
return WEECHAT_RC_OK;
|
||||
}
|
||||
|
||||
if (ptr_channel)
|
||||
{
|
||||
data_with_colors = irc_color_encode (input_data,
|
||||
ptr_data = ((input_data[0] == '/') && (input_data[1] == '/')) ?
|
||||
input_data + 1 : input_data;
|
||||
data_with_colors = irc_color_encode (ptr_data,
|
||||
weechat_config_boolean (irc_config_network_colors_send));
|
||||
|
||||
msg = strdup ((data_with_colors) ? data_with_colors : input_data);
|
||||
msg = strdup ((data_with_colors) ? data_with_colors : ptr_data);
|
||||
if (msg)
|
||||
{
|
||||
irc_input_send_user_message (buffer, msg);
|
||||
|
||||
Reference in New Issue
Block a user