mirror of
https://github.com/weechat/weechat.git
synced 2026-06-26 21:06:38 +02:00
Added command & autojoin channels when connected to server
This commit is contained in:
@@ -5,6 +5,7 @@ ChangeLog - 2003-10-04
|
||||
|
||||
|
||||
Version 0.0.2 (under dev!):
|
||||
* command & auto-join channels when connected to server
|
||||
* new commands for alias: /alias, /unalias (new section in config file)
|
||||
* config is now saved automatically when quitting WeeChat, /save command added
|
||||
* new commands for servers: /server, /connect, /disconnect
|
||||
|
||||
+65
-17
@@ -59,7 +59,8 @@ t_weechat_command weechat_commands[] =
|
||||
{ "server", N_("list, add or remove servers"),
|
||||
N_("[list] | "
|
||||
"[servername hostname port [-auto | -noauto] [-pwd password] [-nicks nick1 "
|
||||
"[nick2 [nick3]]] [-username username] [-realname realname]] | "
|
||||
"[nick2 [nick3]]] [-username username] [-realname realname] "
|
||||
"[-command command] [-autojoin channel[,channel]] ] | "
|
||||
"[del servername]"),
|
||||
N_("servername: server name, for internal & display use\n"
|
||||
"hostname: name or IP address of server\n"
|
||||
@@ -491,15 +492,17 @@ int
|
||||
exec_weechat_command (t_irc_server *server, char *string)
|
||||
{
|
||||
int i, j, argc, return_code, length1, length2;
|
||||
char *pos, *ptr_args, **argv, *alias_command;
|
||||
char *command, *pos, *ptr_args, **argv, *alias_command;
|
||||
t_weechat_alias *ptr_alias;
|
||||
|
||||
if ((!string[0]) || (string[0] != '/'))
|
||||
return 0;
|
||||
|
||||
command = strdup (string);
|
||||
|
||||
/* look for end of command */
|
||||
ptr_args = NULL;
|
||||
pos = strchr (string, ' ');
|
||||
pos = strchr (command, ' ');
|
||||
if (pos)
|
||||
{
|
||||
pos[0] = '\0';
|
||||
@@ -515,7 +518,7 @@ exec_weechat_command (t_irc_server *server, char *string)
|
||||
|
||||
for (i = 0; weechat_commands[i].command_name; i++)
|
||||
{
|
||||
if (strcasecmp (weechat_commands[i].command_name, string + 1) == 0)
|
||||
if (strcasecmp (weechat_commands[i].command_name, command + 1) == 0)
|
||||
{
|
||||
if ((argc < weechat_commands[i].min_arg)
|
||||
|| (argc > weechat_commands[i].max_arg))
|
||||
@@ -527,7 +530,7 @@ exec_weechat_command (t_irc_server *server, char *string)
|
||||
WEECHAT_NAME " command '%s' "
|
||||
"(expected: %d arg%s)\n"),
|
||||
WEECHAT_ERROR,
|
||||
string + 1,
|
||||
command + 1,
|
||||
weechat_commands[i].max_arg,
|
||||
(weechat_commands[i].max_arg >
|
||||
1) ? "s" : "");
|
||||
@@ -537,7 +540,7 @@ exec_weechat_command (t_irc_server *server, char *string)
|
||||
WEECHAT_NAME " command '%s' "
|
||||
"(expected: between %d and %d arg%s)\n"),
|
||||
WEECHAT_ERROR,
|
||||
string + 1,
|
||||
command + 1,
|
||||
weechat_commands[i].min_arg,
|
||||
weechat_commands[i].max_arg,
|
||||
(weechat_commands[i].max_arg >
|
||||
@@ -554,7 +557,7 @@ exec_weechat_command (t_irc_server *server, char *string)
|
||||
if (return_code < 0)
|
||||
gui_printf (NULL,
|
||||
_("%s " WEECHAT_NAME " command \"%s\" failed\n"),
|
||||
WEECHAT_ERROR, string + 1);
|
||||
WEECHAT_ERROR, command + 1);
|
||||
}
|
||||
if (argv)
|
||||
{
|
||||
@@ -567,7 +570,7 @@ exec_weechat_command (t_irc_server *server, char *string)
|
||||
}
|
||||
for (i = 0; irc_commands[i].command_name; i++)
|
||||
{
|
||||
if ((strcasecmp (irc_commands[i].command_name, string + 1) == 0) &&
|
||||
if ((strcasecmp (irc_commands[i].command_name, command + 1) == 0) &&
|
||||
((irc_commands[i].cmd_function_args) ||
|
||||
(irc_commands[i].cmd_function_1arg)))
|
||||
{
|
||||
@@ -580,7 +583,7 @@ exec_weechat_command (t_irc_server *server, char *string)
|
||||
_("%s wrong argument count for IRC command '%s' "
|
||||
"(expected: %d arg%s)\n"),
|
||||
WEECHAT_ERROR,
|
||||
string + 1,
|
||||
command + 1,
|
||||
irc_commands[i].max_arg,
|
||||
(irc_commands[i].max_arg > 1) ? "s" : "");
|
||||
else
|
||||
@@ -589,7 +592,7 @@ exec_weechat_command (t_irc_server *server, char *string)
|
||||
_("%s wrong argument count for IRC command '%s' "
|
||||
"(expected: between %d and %d arg%s)\n"),
|
||||
WEECHAT_ERROR,
|
||||
string + 1,
|
||||
command + 1,
|
||||
irc_commands[i].min_arg, irc_commands[i].max_arg,
|
||||
(irc_commands[i].max_arg > 1) ? "s" : "");
|
||||
}
|
||||
@@ -612,7 +615,7 @@ exec_weechat_command (t_irc_server *server, char *string)
|
||||
if (return_code < 0)
|
||||
gui_printf (NULL,
|
||||
_("%s IRC command \"%s\" failed\n"),
|
||||
WEECHAT_ERROR, string + 1);
|
||||
WEECHAT_ERROR, command + 1);
|
||||
}
|
||||
if (argv)
|
||||
{
|
||||
@@ -626,7 +629,7 @@ exec_weechat_command (t_irc_server *server, char *string)
|
||||
for (ptr_alias = weechat_alias; ptr_alias;
|
||||
ptr_alias = ptr_alias->next_alias)
|
||||
{
|
||||
if (strcasecmp (ptr_alias->alias_name, string + 1) == 0)
|
||||
if (strcasecmp (ptr_alias->alias_name, command + 1) == 0)
|
||||
{
|
||||
if (ptr_args)
|
||||
{
|
||||
@@ -636,11 +639,11 @@ exec_weechat_command (t_irc_server *server, char *string)
|
||||
strcpy (alias_command, ptr_alias->alias_command);
|
||||
alias_command[length1] = ' ';
|
||||
strcpy (alias_command + length1 + 1, ptr_args);
|
||||
exec_weechat_command (server, alias_command);
|
||||
free (alias_command);
|
||||
}
|
||||
else
|
||||
alias_command = strdup (ptr_alias->alias_command);
|
||||
exec_weechat_command (server, alias_command);
|
||||
free (alias_command);
|
||||
exec_weechat_command (server, ptr_alias->alias_command);
|
||||
|
||||
if (argv)
|
||||
{
|
||||
@@ -654,7 +657,7 @@ exec_weechat_command (t_irc_server *server, char *string)
|
||||
gui_printf (NULL,
|
||||
_("%s unknown command '%s' (type /help for help)\n"),
|
||||
WEECHAT_ERROR,
|
||||
string + 1);
|
||||
command + 1);
|
||||
if (argv)
|
||||
{
|
||||
for (j = 0; argv[j]; j++)
|
||||
@@ -1055,6 +1058,26 @@ weechat_cmd_server (int argc, char **argv)
|
||||
COLOR_WIN_CHAT,
|
||||
_(" Realname : %s\n"),
|
||||
ptr_server->realname);
|
||||
irc_display_prefix (NULL, PREFIX_INFO);
|
||||
if (ptr_server->command && ptr_server->command[0])
|
||||
gui_printf_color (NULL,
|
||||
COLOR_WIN_CHAT,
|
||||
_(" Command : %s\n"),
|
||||
ptr_server->command);
|
||||
else
|
||||
gui_printf_color (NULL,
|
||||
COLOR_WIN_CHAT,
|
||||
_(" Command : (none)\n"));
|
||||
irc_display_prefix (NULL, PREFIX_INFO);
|
||||
if (ptr_server->autojoin && ptr_server->autojoin[0])
|
||||
gui_printf_color (NULL,
|
||||
COLOR_WIN_CHAT,
|
||||
_(" Auto-join : %s\n"),
|
||||
ptr_server->autojoin);
|
||||
else
|
||||
gui_printf_color (NULL,
|
||||
COLOR_WIN_CHAT,
|
||||
_(" Auto-join : (none)\n"));
|
||||
}
|
||||
}
|
||||
else
|
||||
@@ -1191,6 +1214,30 @@ weechat_cmd_server (int argc, char **argv)
|
||||
}
|
||||
server.realname = strdup (argv[++i]);
|
||||
}
|
||||
if (strcasecmp (argv[0], "-command") == 0)
|
||||
{
|
||||
if (i == (argc - 1))
|
||||
{
|
||||
gui_printf (NULL,
|
||||
_("%s missing command for \"-command\" parameter\n"),
|
||||
WEECHAT_ERROR);
|
||||
server_destroy (&server);
|
||||
return -1;
|
||||
}
|
||||
server.command = strdup (argv[++i]);
|
||||
}
|
||||
if (strcasecmp (argv[0], "-autojoin") == 0)
|
||||
{
|
||||
if (i == (argc - 1))
|
||||
{
|
||||
gui_printf (NULL,
|
||||
_("%s missing password for \"-autojoin\" parameter\n"),
|
||||
WEECHAT_ERROR);
|
||||
server_destroy (&server);
|
||||
return -1;
|
||||
}
|
||||
server.autojoin = strdup (argv[++i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1198,7 +1245,8 @@ weechat_cmd_server (int argc, char **argv)
|
||||
new_server = server_new (server.name, server.autoconnect, server.address,
|
||||
server.port, server.password, server.nick1,
|
||||
server.nick2, server.nick3, server.username,
|
||||
server.realname);
|
||||
server.realname, server.command,
|
||||
server.autojoin);
|
||||
if (new_server)
|
||||
{
|
||||
irc_display_prefix (NULL, PREFIX_INFO);
|
||||
|
||||
+18
-1
@@ -484,6 +484,14 @@ t_config_option weechat_options_server[] =
|
||||
N_("real name to use on IRC server"),
|
||||
OPTION_TYPE_STRING, 0, 0, 0,
|
||||
"", NULL, NULL, &(cfg_server.realname), NULL },
|
||||
{ "server_command", N_("first command to run when connected to server"),
|
||||
N_("first command to run when connected to server"),
|
||||
OPTION_TYPE_STRING, 0, 0, 0,
|
||||
"", NULL, NULL, &(cfg_server.command), NULL },
|
||||
{ "server_autojoin", N_("list of channels to join when connected to server"),
|
||||
N_("comma separated list of channels to join when connected to server"),
|
||||
OPTION_TYPE_STRING, 0, 0, 0,
|
||||
"", NULL, NULL, &(cfg_server.autojoin), NULL },
|
||||
{ NULL, NULL, NULL, 0, 0, 0, 0, NULL, NULL, NULL, NULL, NULL }
|
||||
};
|
||||
|
||||
@@ -551,7 +559,8 @@ config_allocate_server (char *filename, int line_number)
|
||||
if (!server_new (cfg_server.name,
|
||||
cfg_server.autoconnect, cfg_server.address, cfg_server.port,
|
||||
cfg_server.password, cfg_server.nick1, cfg_server.nick2,
|
||||
cfg_server.nick3, cfg_server.username, cfg_server.realname))
|
||||
cfg_server.nick3, cfg_server.username, cfg_server.realname,
|
||||
cfg_server.command, cfg_server.autojoin))
|
||||
{
|
||||
server_free_all ();
|
||||
gui_printf (NULL,
|
||||
@@ -1016,6 +1025,8 @@ config_create_default ()
|
||||
fputs ("server_nick3=weechat3\n", file);
|
||||
fputs ("server_username=weechat\n", file);
|
||||
fputs ("server_realname=WeeChat default realname\n", file);
|
||||
fputs ("server_command=\n", file);
|
||||
fputs ("server_autojoin=\n", file);
|
||||
|
||||
fclose (file);
|
||||
free (filename);
|
||||
@@ -1160,6 +1171,12 @@ config_write (char *config_name)
|
||||
fputs (line, file);
|
||||
sprintf (line, "server_realname=%s\n", ptr_server->realname);
|
||||
fputs (line, file);
|
||||
sprintf (line, "server_command=%s\n",
|
||||
(ptr_server->command) ? ptr_server->command : "");
|
||||
fputs (line, file);
|
||||
sprintf (line, "server_autojoin=%s\n",
|
||||
(ptr_server->autojoin) ? ptr_server->autojoin : "");
|
||||
fputs (line, file);
|
||||
}
|
||||
|
||||
fclose (file);
|
||||
|
||||
@@ -2104,6 +2104,15 @@ irc_cmd_recv_004 (t_irc_server *server, char *host, char *arguments)
|
||||
server->is_connected = 1;
|
||||
gui_redraw_window_status (server->window);
|
||||
gui_redraw_window_input (server->window);
|
||||
|
||||
/* execute command once connected */
|
||||
if (server->command && server->command[0])
|
||||
user_command(server, server->command);
|
||||
|
||||
/* autojoin */
|
||||
if (server->autojoin && server->autojoin[0])
|
||||
return irc_cmd_send_join (server, server->autojoin);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
+15
-3
@@ -66,6 +66,8 @@ server_init (t_irc_server *server)
|
||||
server->nick3 = NULL;
|
||||
server->username = NULL;
|
||||
server->realname = NULL;
|
||||
server->command = NULL;
|
||||
server->autojoin = NULL;
|
||||
server->nick = NULL;
|
||||
server->is_connected = 0;
|
||||
server->sock4 = -1;
|
||||
@@ -137,6 +139,10 @@ server_destroy (t_irc_server *server)
|
||||
free (server->username);
|
||||
if (server->realname)
|
||||
free (server->realname);
|
||||
if (server->command)
|
||||
free (server->command);
|
||||
if (server->autojoin)
|
||||
free (server->autojoin);
|
||||
if (server->nick)
|
||||
free (server->nick);
|
||||
if (server->channels)
|
||||
@@ -153,6 +159,8 @@ server_free (t_irc_server *server)
|
||||
t_irc_server *new_irc_servers;
|
||||
|
||||
/* remove server from queue */
|
||||
if (last_irc_server == server)
|
||||
last_irc_server = server->prev_server;
|
||||
if (server->prev_server)
|
||||
{
|
||||
(server->prev_server)->next_server = server->next_server;
|
||||
@@ -190,7 +198,7 @@ server_free_all ()
|
||||
t_irc_server *
|
||||
server_new (char *name, int autoconnect, char *address, int port,
|
||||
char *password, char *nick1, char *nick2, char *nick3,
|
||||
char *username, char *realname)
|
||||
char *username, char *realname, char *command, char *autojoin)
|
||||
{
|
||||
t_irc_server *new_server;
|
||||
|
||||
@@ -199,10 +207,12 @@ server_new (char *name, int autoconnect, char *address, int port,
|
||||
|
||||
#if DEBUG >= 1
|
||||
log_printf ("creating new server (name:%s, address:%s, port:%d, pwd:%s, "
|
||||
"nick1:%s, nick2:%s, nick3:%s, username:%s, realname:%s)\n",
|
||||
"nick1:%s, nick2:%s, nick3:%s, username:%s, realname:%s, "
|
||||
"command:%s, autojoin:%s)\n",
|
||||
name, address, port, (password) ? password : "",
|
||||
(nick1) ? nick1 : "", (nick2) ? nick2 : "", (nick3) ? nick3 : "",
|
||||
(username) ? username : "", (realname) ? realname : "");
|
||||
(username) ? username : "", (realname) ? realname : "",
|
||||
(command) ? command : "", (autojoin) ? autojoin : "");
|
||||
#endif
|
||||
|
||||
if ((new_server = server_alloc ()))
|
||||
@@ -219,6 +229,8 @@ server_new (char *name, int autoconnect, char *address, int port,
|
||||
(username) ? strdup (username) : strdup ("weechat");
|
||||
new_server->realname =
|
||||
(realname) ? strdup (realname) : strdup ("realname");
|
||||
new_server->command = command;
|
||||
new_server->autojoin = autojoin;
|
||||
new_server->nick = strdup (new_server->nick1);
|
||||
}
|
||||
else
|
||||
|
||||
+3
-1
@@ -87,6 +87,8 @@ struct t_irc_server
|
||||
char *nick3; /* 2nd alternate nickname */
|
||||
char *username; /* user name */
|
||||
char *realname; /* real name */
|
||||
char *command; /* command to run once connected */
|
||||
char *autojoin; /* channels to automatically join */
|
||||
|
||||
/* internal vars */
|
||||
char *nick; /* current nickname */
|
||||
@@ -144,7 +146,7 @@ extern void server_destroy (t_irc_server *);
|
||||
extern void server_free (t_irc_server *);
|
||||
extern void server_free_all ();
|
||||
extern t_irc_server *server_new (char *, int, char *, int, char *, char *,
|
||||
char *, char *, char *, char *);
|
||||
char *, char *, char *, char *, char *, char *);
|
||||
extern int server_send (t_irc_server *, char *, int);
|
||||
extern int server_sendf (t_irc_server *, char *, ...);
|
||||
extern void server_recv (t_irc_server *);
|
||||
|
||||
@@ -5,6 +5,7 @@ ChangeLog - 2003-10-04
|
||||
|
||||
|
||||
Version 0.0.2 (under dev!):
|
||||
* command & auto-join channels when connected to server
|
||||
* new commands for alias: /alias, /unalias (new section in config file)
|
||||
* config is now saved automatically when quitting WeeChat, /save command added
|
||||
* new commands for servers: /server, /connect, /disconnect
|
||||
|
||||
+65
-17
@@ -59,7 +59,8 @@ t_weechat_command weechat_commands[] =
|
||||
{ "server", N_("list, add or remove servers"),
|
||||
N_("[list] | "
|
||||
"[servername hostname port [-auto | -noauto] [-pwd password] [-nicks nick1 "
|
||||
"[nick2 [nick3]]] [-username username] [-realname realname]] | "
|
||||
"[nick2 [nick3]]] [-username username] [-realname realname] "
|
||||
"[-command command] [-autojoin channel[,channel]] ] | "
|
||||
"[del servername]"),
|
||||
N_("servername: server name, for internal & display use\n"
|
||||
"hostname: name or IP address of server\n"
|
||||
@@ -491,15 +492,17 @@ int
|
||||
exec_weechat_command (t_irc_server *server, char *string)
|
||||
{
|
||||
int i, j, argc, return_code, length1, length2;
|
||||
char *pos, *ptr_args, **argv, *alias_command;
|
||||
char *command, *pos, *ptr_args, **argv, *alias_command;
|
||||
t_weechat_alias *ptr_alias;
|
||||
|
||||
if ((!string[0]) || (string[0] != '/'))
|
||||
return 0;
|
||||
|
||||
command = strdup (string);
|
||||
|
||||
/* look for end of command */
|
||||
ptr_args = NULL;
|
||||
pos = strchr (string, ' ');
|
||||
pos = strchr (command, ' ');
|
||||
if (pos)
|
||||
{
|
||||
pos[0] = '\0';
|
||||
@@ -515,7 +518,7 @@ exec_weechat_command (t_irc_server *server, char *string)
|
||||
|
||||
for (i = 0; weechat_commands[i].command_name; i++)
|
||||
{
|
||||
if (strcasecmp (weechat_commands[i].command_name, string + 1) == 0)
|
||||
if (strcasecmp (weechat_commands[i].command_name, command + 1) == 0)
|
||||
{
|
||||
if ((argc < weechat_commands[i].min_arg)
|
||||
|| (argc > weechat_commands[i].max_arg))
|
||||
@@ -527,7 +530,7 @@ exec_weechat_command (t_irc_server *server, char *string)
|
||||
WEECHAT_NAME " command '%s' "
|
||||
"(expected: %d arg%s)\n"),
|
||||
WEECHAT_ERROR,
|
||||
string + 1,
|
||||
command + 1,
|
||||
weechat_commands[i].max_arg,
|
||||
(weechat_commands[i].max_arg >
|
||||
1) ? "s" : "");
|
||||
@@ -537,7 +540,7 @@ exec_weechat_command (t_irc_server *server, char *string)
|
||||
WEECHAT_NAME " command '%s' "
|
||||
"(expected: between %d and %d arg%s)\n"),
|
||||
WEECHAT_ERROR,
|
||||
string + 1,
|
||||
command + 1,
|
||||
weechat_commands[i].min_arg,
|
||||
weechat_commands[i].max_arg,
|
||||
(weechat_commands[i].max_arg >
|
||||
@@ -554,7 +557,7 @@ exec_weechat_command (t_irc_server *server, char *string)
|
||||
if (return_code < 0)
|
||||
gui_printf (NULL,
|
||||
_("%s " WEECHAT_NAME " command \"%s\" failed\n"),
|
||||
WEECHAT_ERROR, string + 1);
|
||||
WEECHAT_ERROR, command + 1);
|
||||
}
|
||||
if (argv)
|
||||
{
|
||||
@@ -567,7 +570,7 @@ exec_weechat_command (t_irc_server *server, char *string)
|
||||
}
|
||||
for (i = 0; irc_commands[i].command_name; i++)
|
||||
{
|
||||
if ((strcasecmp (irc_commands[i].command_name, string + 1) == 0) &&
|
||||
if ((strcasecmp (irc_commands[i].command_name, command + 1) == 0) &&
|
||||
((irc_commands[i].cmd_function_args) ||
|
||||
(irc_commands[i].cmd_function_1arg)))
|
||||
{
|
||||
@@ -580,7 +583,7 @@ exec_weechat_command (t_irc_server *server, char *string)
|
||||
_("%s wrong argument count for IRC command '%s' "
|
||||
"(expected: %d arg%s)\n"),
|
||||
WEECHAT_ERROR,
|
||||
string + 1,
|
||||
command + 1,
|
||||
irc_commands[i].max_arg,
|
||||
(irc_commands[i].max_arg > 1) ? "s" : "");
|
||||
else
|
||||
@@ -589,7 +592,7 @@ exec_weechat_command (t_irc_server *server, char *string)
|
||||
_("%s wrong argument count for IRC command '%s' "
|
||||
"(expected: between %d and %d arg%s)\n"),
|
||||
WEECHAT_ERROR,
|
||||
string + 1,
|
||||
command + 1,
|
||||
irc_commands[i].min_arg, irc_commands[i].max_arg,
|
||||
(irc_commands[i].max_arg > 1) ? "s" : "");
|
||||
}
|
||||
@@ -612,7 +615,7 @@ exec_weechat_command (t_irc_server *server, char *string)
|
||||
if (return_code < 0)
|
||||
gui_printf (NULL,
|
||||
_("%s IRC command \"%s\" failed\n"),
|
||||
WEECHAT_ERROR, string + 1);
|
||||
WEECHAT_ERROR, command + 1);
|
||||
}
|
||||
if (argv)
|
||||
{
|
||||
@@ -626,7 +629,7 @@ exec_weechat_command (t_irc_server *server, char *string)
|
||||
for (ptr_alias = weechat_alias; ptr_alias;
|
||||
ptr_alias = ptr_alias->next_alias)
|
||||
{
|
||||
if (strcasecmp (ptr_alias->alias_name, string + 1) == 0)
|
||||
if (strcasecmp (ptr_alias->alias_name, command + 1) == 0)
|
||||
{
|
||||
if (ptr_args)
|
||||
{
|
||||
@@ -636,11 +639,11 @@ exec_weechat_command (t_irc_server *server, char *string)
|
||||
strcpy (alias_command, ptr_alias->alias_command);
|
||||
alias_command[length1] = ' ';
|
||||
strcpy (alias_command + length1 + 1, ptr_args);
|
||||
exec_weechat_command (server, alias_command);
|
||||
free (alias_command);
|
||||
}
|
||||
else
|
||||
alias_command = strdup (ptr_alias->alias_command);
|
||||
exec_weechat_command (server, alias_command);
|
||||
free (alias_command);
|
||||
exec_weechat_command (server, ptr_alias->alias_command);
|
||||
|
||||
if (argv)
|
||||
{
|
||||
@@ -654,7 +657,7 @@ exec_weechat_command (t_irc_server *server, char *string)
|
||||
gui_printf (NULL,
|
||||
_("%s unknown command '%s' (type /help for help)\n"),
|
||||
WEECHAT_ERROR,
|
||||
string + 1);
|
||||
command + 1);
|
||||
if (argv)
|
||||
{
|
||||
for (j = 0; argv[j]; j++)
|
||||
@@ -1055,6 +1058,26 @@ weechat_cmd_server (int argc, char **argv)
|
||||
COLOR_WIN_CHAT,
|
||||
_(" Realname : %s\n"),
|
||||
ptr_server->realname);
|
||||
irc_display_prefix (NULL, PREFIX_INFO);
|
||||
if (ptr_server->command && ptr_server->command[0])
|
||||
gui_printf_color (NULL,
|
||||
COLOR_WIN_CHAT,
|
||||
_(" Command : %s\n"),
|
||||
ptr_server->command);
|
||||
else
|
||||
gui_printf_color (NULL,
|
||||
COLOR_WIN_CHAT,
|
||||
_(" Command : (none)\n"));
|
||||
irc_display_prefix (NULL, PREFIX_INFO);
|
||||
if (ptr_server->autojoin && ptr_server->autojoin[0])
|
||||
gui_printf_color (NULL,
|
||||
COLOR_WIN_CHAT,
|
||||
_(" Auto-join : %s\n"),
|
||||
ptr_server->autojoin);
|
||||
else
|
||||
gui_printf_color (NULL,
|
||||
COLOR_WIN_CHAT,
|
||||
_(" Auto-join : (none)\n"));
|
||||
}
|
||||
}
|
||||
else
|
||||
@@ -1191,6 +1214,30 @@ weechat_cmd_server (int argc, char **argv)
|
||||
}
|
||||
server.realname = strdup (argv[++i]);
|
||||
}
|
||||
if (strcasecmp (argv[0], "-command") == 0)
|
||||
{
|
||||
if (i == (argc - 1))
|
||||
{
|
||||
gui_printf (NULL,
|
||||
_("%s missing command for \"-command\" parameter\n"),
|
||||
WEECHAT_ERROR);
|
||||
server_destroy (&server);
|
||||
return -1;
|
||||
}
|
||||
server.command = strdup (argv[++i]);
|
||||
}
|
||||
if (strcasecmp (argv[0], "-autojoin") == 0)
|
||||
{
|
||||
if (i == (argc - 1))
|
||||
{
|
||||
gui_printf (NULL,
|
||||
_("%s missing password for \"-autojoin\" parameter\n"),
|
||||
WEECHAT_ERROR);
|
||||
server_destroy (&server);
|
||||
return -1;
|
||||
}
|
||||
server.autojoin = strdup (argv[++i]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1198,7 +1245,8 @@ weechat_cmd_server (int argc, char **argv)
|
||||
new_server = server_new (server.name, server.autoconnect, server.address,
|
||||
server.port, server.password, server.nick1,
|
||||
server.nick2, server.nick3, server.username,
|
||||
server.realname);
|
||||
server.realname, server.command,
|
||||
server.autojoin);
|
||||
if (new_server)
|
||||
{
|
||||
irc_display_prefix (NULL, PREFIX_INFO);
|
||||
|
||||
+18
-1
@@ -484,6 +484,14 @@ t_config_option weechat_options_server[] =
|
||||
N_("real name to use on IRC server"),
|
||||
OPTION_TYPE_STRING, 0, 0, 0,
|
||||
"", NULL, NULL, &(cfg_server.realname), NULL },
|
||||
{ "server_command", N_("first command to run when connected to server"),
|
||||
N_("first command to run when connected to server"),
|
||||
OPTION_TYPE_STRING, 0, 0, 0,
|
||||
"", NULL, NULL, &(cfg_server.command), NULL },
|
||||
{ "server_autojoin", N_("list of channels to join when connected to server"),
|
||||
N_("comma separated list of channels to join when connected to server"),
|
||||
OPTION_TYPE_STRING, 0, 0, 0,
|
||||
"", NULL, NULL, &(cfg_server.autojoin), NULL },
|
||||
{ NULL, NULL, NULL, 0, 0, 0, 0, NULL, NULL, NULL, NULL, NULL }
|
||||
};
|
||||
|
||||
@@ -551,7 +559,8 @@ config_allocate_server (char *filename, int line_number)
|
||||
if (!server_new (cfg_server.name,
|
||||
cfg_server.autoconnect, cfg_server.address, cfg_server.port,
|
||||
cfg_server.password, cfg_server.nick1, cfg_server.nick2,
|
||||
cfg_server.nick3, cfg_server.username, cfg_server.realname))
|
||||
cfg_server.nick3, cfg_server.username, cfg_server.realname,
|
||||
cfg_server.command, cfg_server.autojoin))
|
||||
{
|
||||
server_free_all ();
|
||||
gui_printf (NULL,
|
||||
@@ -1016,6 +1025,8 @@ config_create_default ()
|
||||
fputs ("server_nick3=weechat3\n", file);
|
||||
fputs ("server_username=weechat\n", file);
|
||||
fputs ("server_realname=WeeChat default realname\n", file);
|
||||
fputs ("server_command=\n", file);
|
||||
fputs ("server_autojoin=\n", file);
|
||||
|
||||
fclose (file);
|
||||
free (filename);
|
||||
@@ -1160,6 +1171,12 @@ config_write (char *config_name)
|
||||
fputs (line, file);
|
||||
sprintf (line, "server_realname=%s\n", ptr_server->realname);
|
||||
fputs (line, file);
|
||||
sprintf (line, "server_command=%s\n",
|
||||
(ptr_server->command) ? ptr_server->command : "");
|
||||
fputs (line, file);
|
||||
sprintf (line, "server_autojoin=%s\n",
|
||||
(ptr_server->autojoin) ? ptr_server->autojoin : "");
|
||||
fputs (line, file);
|
||||
}
|
||||
|
||||
fclose (file);
|
||||
|
||||
@@ -2104,6 +2104,15 @@ irc_cmd_recv_004 (t_irc_server *server, char *host, char *arguments)
|
||||
server->is_connected = 1;
|
||||
gui_redraw_window_status (server->window);
|
||||
gui_redraw_window_input (server->window);
|
||||
|
||||
/* execute command once connected */
|
||||
if (server->command && server->command[0])
|
||||
user_command(server, server->command);
|
||||
|
||||
/* autojoin */
|
||||
if (server->autojoin && server->autojoin[0])
|
||||
return irc_cmd_send_join (server, server->autojoin);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
@@ -66,6 +66,8 @@ server_init (t_irc_server *server)
|
||||
server->nick3 = NULL;
|
||||
server->username = NULL;
|
||||
server->realname = NULL;
|
||||
server->command = NULL;
|
||||
server->autojoin = NULL;
|
||||
server->nick = NULL;
|
||||
server->is_connected = 0;
|
||||
server->sock4 = -1;
|
||||
@@ -137,6 +139,10 @@ server_destroy (t_irc_server *server)
|
||||
free (server->username);
|
||||
if (server->realname)
|
||||
free (server->realname);
|
||||
if (server->command)
|
||||
free (server->command);
|
||||
if (server->autojoin)
|
||||
free (server->autojoin);
|
||||
if (server->nick)
|
||||
free (server->nick);
|
||||
if (server->channels)
|
||||
@@ -153,6 +159,8 @@ server_free (t_irc_server *server)
|
||||
t_irc_server *new_irc_servers;
|
||||
|
||||
/* remove server from queue */
|
||||
if (last_irc_server == server)
|
||||
last_irc_server = server->prev_server;
|
||||
if (server->prev_server)
|
||||
{
|
||||
(server->prev_server)->next_server = server->next_server;
|
||||
@@ -190,7 +198,7 @@ server_free_all ()
|
||||
t_irc_server *
|
||||
server_new (char *name, int autoconnect, char *address, int port,
|
||||
char *password, char *nick1, char *nick2, char *nick3,
|
||||
char *username, char *realname)
|
||||
char *username, char *realname, char *command, char *autojoin)
|
||||
{
|
||||
t_irc_server *new_server;
|
||||
|
||||
@@ -199,10 +207,12 @@ server_new (char *name, int autoconnect, char *address, int port,
|
||||
|
||||
#if DEBUG >= 1
|
||||
log_printf ("creating new server (name:%s, address:%s, port:%d, pwd:%s, "
|
||||
"nick1:%s, nick2:%s, nick3:%s, username:%s, realname:%s)\n",
|
||||
"nick1:%s, nick2:%s, nick3:%s, username:%s, realname:%s, "
|
||||
"command:%s, autojoin:%s)\n",
|
||||
name, address, port, (password) ? password : "",
|
||||
(nick1) ? nick1 : "", (nick2) ? nick2 : "", (nick3) ? nick3 : "",
|
||||
(username) ? username : "", (realname) ? realname : "");
|
||||
(username) ? username : "", (realname) ? realname : "",
|
||||
(command) ? command : "", (autojoin) ? autojoin : "");
|
||||
#endif
|
||||
|
||||
if ((new_server = server_alloc ()))
|
||||
@@ -219,6 +229,8 @@ server_new (char *name, int autoconnect, char *address, int port,
|
||||
(username) ? strdup (username) : strdup ("weechat");
|
||||
new_server->realname =
|
||||
(realname) ? strdup (realname) : strdup ("realname");
|
||||
new_server->command = command;
|
||||
new_server->autojoin = autojoin;
|
||||
new_server->nick = strdup (new_server->nick1);
|
||||
}
|
||||
else
|
||||
|
||||
@@ -87,6 +87,8 @@ struct t_irc_server
|
||||
char *nick3; /* 2nd alternate nickname */
|
||||
char *username; /* user name */
|
||||
char *realname; /* real name */
|
||||
char *command; /* command to run once connected */
|
||||
char *autojoin; /* channels to automatically join */
|
||||
|
||||
/* internal vars */
|
||||
char *nick; /* current nickname */
|
||||
@@ -144,7 +146,7 @@ extern void server_destroy (t_irc_server *);
|
||||
extern void server_free (t_irc_server *);
|
||||
extern void server_free_all ();
|
||||
extern t_irc_server *server_new (char *, int, char *, int, char *, char *,
|
||||
char *, char *, char *, char *);
|
||||
char *, char *, char *, char *, char *, char *);
|
||||
extern int server_send (t_irc_server *, char *, int);
|
||||
extern int server_sendf (t_irc_server *, char *, ...);
|
||||
extern void server_recv (t_irc_server *);
|
||||
|
||||
Reference in New Issue
Block a user