summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/plugins/irc/irc-command.c8
-rw-r--r--src/plugins/irc/irc-config.c17
-rw-r--r--src/plugins/irc/irc-protocol.c11
-rw-r--r--src/plugins/irc/irc-server.c11
-rw-r--r--src/plugins/irc/irc-server.h1
5 files changed, 48 insertions, 0 deletions
diff --git a/src/plugins/irc/irc-command.c b/src/plugins/irc/irc-command.c
index 41ce07719..2c46b0a26 100644
--- a/src/plugins/irc/irc-command.c
+++ b/src/plugins/irc/irc-command.c
@@ -4852,6 +4852,14 @@ irc_command_display_server (struct t_irc_server *server, int with_detail)
weechat_printf (NULL, " notify . . . . . . . : %s'%s'",
IRC_COLOR_CHAT_VALUE,
weechat_config_string (server->options[IRC_SERVER_OPTION_NOTIFY]));
+ /* umodes*/
+ if (weechat_config_option_is_null (server->options[IRC_SERVER_OPTION_UMODES]))
+ weechat_printf (NULL, " umodes . . . . . . . : ('%s')",
+ IRC_SERVER_OPTION_STRING(server, IRC_SERVER_OPTION_UMODES));
+ else
+ weechat_printf (NULL, " umodes . . . . . . . : %s'%s'",
+ IRC_COLOR_CHAT_VALUE,
+ weechat_config_string (server->options[IRC_SERVER_OPTION_UMODES]));
}
else
{
diff --git a/src/plugins/irc/irc-config.c b/src/plugins/irc/irc-config.c
index d4acd7ba3..a3cd13970 100644
--- a/src/plugins/irc/irc-config.c
+++ b/src/plugins/irc/irc-config.c
@@ -2226,6 +2226,23 @@ irc_config_server_new_option (struct t_config_file *config_file,
callback_change_data,
NULL, NULL, NULL);
break;
+ case IRC_SERVER_OPTION_UMODES:
+ new_option = weechat_config_new_option (
+ config_file, section,
+ option_name, "string",
+ N_("umode(s) to set after connection to server and before "
+ "auto-join of channels"),
+ NULL, 0, 0,
+ default_value, value,
+ null_value_allowed,
+ callback_check_value,
+ callback_check_value_pointer,
+ callback_check_value_data,
+ callback_change,
+ callback_change_pointer,
+ callback_change_data,
+ NULL, NULL, NULL);
+ break;
case IRC_SERVER_NUM_OPTIONS:
break;
}
diff --git a/src/plugins/irc/irc-protocol.c b/src/plugins/irc/irc-protocol.c
index b85093758..a68377835 100644
--- a/src/plugins/irc/irc-protocol.c
+++ b/src/plugins/irc/irc-protocol.c
@@ -2453,6 +2453,7 @@ IRC_PROTOCOL_CALLBACK(wallops)
IRC_PROTOCOL_CALLBACK(001)
{
char *server_command, **commands, **ptr_command, *vars_replaced, *away_msg;
+ const char *umodes;
IRC_PROTOCOL_MIN_ARGS(3);
@@ -2492,6 +2493,16 @@ IRC_PROTOCOL_CALLBACK(001)
(void) weechat_hook_signal_send ("irc_server_connected",
WEECHAT_HOOK_SIGNAL_STRING, server->name);
+ /* set umodes when connected */
+ umodes = IRC_SERVER_OPTION_STRING(server, IRC_SERVER_OPTION_UMODES);
+ if (umodes && umodes[0])
+ {
+ irc_server_sendf (server,
+ IRC_SERVER_SEND_OUTQ_PRIO_HIGH, NULL,
+ "MODE %s %s",
+ server->nick, umodes);
+ }
+
/* execute command when connected */
server_command = weechat_string_eval_expression (IRC_SERVER_OPTION_STRING(server,
IRC_SERVER_OPTION_COMMAND),
diff --git a/src/plugins/irc/irc-server.c b/src/plugins/irc/irc-server.c
index 0308bf06e..72a3a028e 100644
--- a/src/plugins/irc/irc-server.c
+++ b/src/plugins/irc/irc-server.c
@@ -116,6 +116,7 @@ char *irc_server_options[IRC_SERVER_NUM_OPTIONS][2] =
{ "msg_part", "WeeChat ${info:version}" },
{ "msg_quit", "WeeChat ${info:version}" },
{ "notify", "" },
+ { "umodes", "" },
};
char *irc_server_casemapping_string[IRC_SERVER_NUM_CASEMAPPING] =
@@ -5554,6 +5555,9 @@ irc_server_add_to_infolist (struct t_infolist *infolist,
if (!weechat_infolist_new_var_string (ptr_item, "msg_quit",
IRC_SERVER_OPTION_STRING(server, IRC_SERVER_OPTION_MSG_QUIT)))
return 0;
+ if (!weechat_infolist_new_var_string (ptr_item, "umodes",
+ IRC_SERVER_OPTION_STRING(server, IRC_SERVER_OPTION_UMODES)))
+ return 0;
if (!weechat_infolist_new_var_integer (ptr_item, "temp_server", server->temp_server))
return 0;
if (!weechat_infolist_new_var_integer (ptr_item, "index_current_address", server->index_current_address))
@@ -5925,6 +5929,13 @@ irc_server_print_log ()
else
weechat_log_printf (" msg_quit . . . . . . : '%s'",
weechat_config_string (ptr_server->options[IRC_SERVER_OPTION_MSG_QUIT]));
+ /* umodes */
+ if (weechat_config_option_is_null (ptr_server->options[IRC_SERVER_OPTION_UMODES]))
+ weechat_log_printf (" umodes . . . . . . . : null ('%s')",
+ IRC_SERVER_OPTION_STRING(ptr_server, IRC_SERVER_OPTION_UMODES));
+ else
+ weechat_log_printf (" umodes . . . . . . . : '%s'",
+ weechat_config_string (ptr_server->options[IRC_SERVER_OPTION_UMODES]));
/* other server variables */
weechat_log_printf (" temp_server. . . . . : %d", ptr_server->temp_server);
weechat_log_printf (" reloading_from_config: %d", ptr_server->reloaded_from_config);
diff --git a/src/plugins/irc/irc-server.h b/src/plugins/irc/irc-server.h
index 663b0d085..b032b9a61 100644
--- a/src/plugins/irc/irc-server.h
+++ b/src/plugins/irc/irc-server.h
@@ -82,6 +82,7 @@ enum t_irc_server_option
IRC_SERVER_OPTION_MSG_PART, /* default part message */
IRC_SERVER_OPTION_MSG_QUIT, /* default quit message */
IRC_SERVER_OPTION_NOTIFY, /* notify list */
+ IRC_SERVER_OPTION_UMODES, /* umodes to set once connected */
/* number of server options */
IRC_SERVER_NUM_OPTIONS,
};