1
0
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:
Sebastien Helleu
2008-11-15 16:33:31 +01:00
parent 21110ac128
commit da748fc653
7 changed files with 200 additions and 27 deletions
+36 -21
View File
@@ -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
View File
@@ -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
View File
@@ -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);
+2
View File
@@ -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 */
+3
View File
@@ -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)
+59 -1
View File
@@ -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",
+15 -2
View File
@@ -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);