summaryrefslogtreecommitdiff
path: root/src/common
diff options
context:
space:
mode:
Diffstat (limited to 'src/common')
-rw-r--r--src/common/command.c117
-rw-r--r--src/common/session.c6
-rw-r--r--src/common/session.h2
-rw-r--r--src/common/weeconfig.c7
4 files changed, 111 insertions, 21 deletions
diff --git a/src/common/command.c b/src/common/command.c
index 431d6e272..c7895e224 100644
--- a/src/common/command.c
+++ b/src/common/command.c
@@ -177,10 +177,11 @@ t_weechat_command weechat_commands[] =
NULL, 0, 1, 0, weechat_cmd_save, NULL },
{ "server", N_("list, add or remove servers"),
N_("[list [servername]] | [listfull [servername]] | "
- "[servername hostname port [-auto | -noauto] [-ipv6] [-ssl] [-pwd password] [-nicks nick1 "
- "nick2 nick3] [-username username] [-realname realname] "
- "[-command command] [-autojoin channel[,channel]] ] | "
- "[del servername]"),
+ "[servername hostname port [-auto | -noauto] [-ipv6] [-ssl] "
+ "[-pwd password] [-nicks nick1 nick2 nick3] [-username username] "
+ "[-realname realname] [-command command] [-autojoin channel[,channel]] ] | "
+ "[copy server newservername] [rename servername newservername] [del "
+ "servername]"),
N_(" list: list servers (no parameter implies this list)\n"
" listfull: list servers with detailed info for each server\n"
"servername: server name, for internal and display use\n"
@@ -194,8 +195,10 @@ t_weechat_command weechat_commands[] =
" nick3: second alternate nick for server\n"
" username: user name\n"
" realname: real name of user\n"
+ " copy: duplicate a server\n"
+ " rename: rename a server\n"
" del: delete a server"),
- "del|list|listfull", 0, MAX_ARGS, 0, weechat_cmd_server, NULL },
+ "copy|rename|del|list|listfull %S %S", 0, MAX_ARGS, 0, weechat_cmd_server, NULL },
{ "set", N_("set config options"),
N_("[option [ = value]]"),
N_("option: name of an option (if name is full "
@@ -3022,22 +3025,112 @@ weechat_cmd_server (t_irc_server *server, t_irc_channel *channel,
}
else
{
- if (ascii_strcasecmp (argv[0], "del") == 0)
+ if (ascii_strcasecmp (argv[0], "copy") == 0)
{
- if (argc < 2)
+ if (argc < 3)
{
irc_display_prefix (NULL, NULL, PREFIX_ERROR);
gui_printf (NULL,
- _("%s missing servername for \"%s\" command\n"),
- WEECHAT_ERROR, "server del");
+ _("%s missing server name for \"%s\" command\n"),
+ WEECHAT_ERROR, "server copy");
+ return -1;
+ }
+
+ /* look for server by name */
+ server_found = irc_server_search (argv[1]);
+ if (!server_found)
+ {
+ irc_display_prefix (NULL, NULL, PREFIX_ERROR);
+ gui_printf (NULL,
+ _("%s server \"%s\" not found for \"%s\" command\n"),
+ WEECHAT_ERROR, argv[1], "server copy");
+ return -1;
+ }
+
+ /* check if target name already exists */
+ if (irc_server_search (argv[2]))
+ {
+ irc_display_prefix (NULL, NULL, PREFIX_ERROR);
+ gui_printf (NULL,
+ _("%s server \"%s\" already exists for \"%s\" command\n"),
+ WEECHAT_ERROR, argv[2], "server copy");
+ return -1;
+ }
+
+ /* duplicate server */
+ new_server = irc_server_duplicate (server_found, argv[2]);
+ if (new_server)
+ {
+ irc_display_prefix (NULL, NULL, PREFIX_INFO);
+ gui_printf (NULL, _("Server %s%s%s has been copied to %s%s\n"),
+ GUI_COLOR(COLOR_WIN_CHAT_SERVER),
+ argv[1],
+ GUI_COLOR(COLOR_WIN_CHAT),
+ GUI_COLOR(COLOR_WIN_CHAT_SERVER),
+ argv[2]);
+ gui_window_redraw_all_buffers ();
+ return 0;
+ }
+
+ return -1;
+ }
+ if (ascii_strcasecmp (argv[0], "rename") == 0)
+ {
+ if (argc < 3)
+ {
+ irc_display_prefix (NULL, NULL, PREFIX_ERROR);
+ gui_printf (NULL,
+ _("%s missing server name for \"%s\" command\n"),
+ WEECHAT_ERROR, "server rename");
+ return -1;
+ }
+
+ /* look for server by name */
+ server_found = irc_server_search (argv[1]);
+ if (!server_found)
+ {
+ irc_display_prefix (NULL, NULL, PREFIX_ERROR);
+ gui_printf (NULL,
+ _("%s server \"%s\" not found for \"%s\" command\n"),
+ WEECHAT_ERROR, argv[1], "server rename");
+ return -1;
+ }
+
+ /* check if target name already exists */
+ if (irc_server_search (argv[2]))
+ {
+ irc_display_prefix (NULL, NULL, PREFIX_ERROR);
+ gui_printf (NULL,
+ _("%s server \"%s\" already exists for \"%s\" command\n"),
+ WEECHAT_ERROR, argv[2], "server rename");
return -1;
}
- if (argc > 2)
+
+ /* rename server */
+ if (irc_server_rename (server_found, argv[2]))
+ {
+ irc_display_prefix (NULL, NULL, PREFIX_INFO);
+ gui_printf (NULL, _("Server %s%s%s has been renamed to %s%s\n"),
+ GUI_COLOR(COLOR_WIN_CHAT_SERVER),
+ argv[1],
+ GUI_COLOR(COLOR_WIN_CHAT),
+ GUI_COLOR(COLOR_WIN_CHAT_SERVER),
+ argv[2]);
+ gui_window_redraw_all_buffers ();
+ return 0;
+ }
+
+ return -1;
+ }
+ else if (ascii_strcasecmp (argv[0], "del") == 0)
+ {
+ if (argc < 2)
{
irc_display_prefix (NULL, NULL, PREFIX_ERROR);
gui_printf (NULL,
- _("%s too much arguments for \"%s\" command, ignoring arguments\n"),
- WEECHAT_WARNING, "server del");
+ _("%s missing server name for \"%s\" command\n"),
+ WEECHAT_ERROR, "server del");
+ return -1;
}
/* look for server by name */
diff --git a/src/common/session.c b/src/common/session.c
index 3c7d88625..516a06353 100644
--- a/src/common/session.c
+++ b/src/common/session.c
@@ -219,7 +219,7 @@ session_save_servers (FILE *file)
rc = rc && (session_write_int (file, SESSION_SERV_AUTOCONNECT, ptr_server->autoconnect));
rc = rc && (session_write_int (file, SESSION_SERV_AUTORECONNECT, ptr_server->autoreconnect));
rc = rc && (session_write_int (file, SESSION_SERV_AUTORECONNECT_DELAY, ptr_server->autoreconnect_delay));
- rc = rc && (session_write_int (file, SESSION_SERV_COMMAND_LINE, ptr_server->command_line));
+ rc = rc && (session_write_int (file, SESSION_SERV_TEMP_SERVER, ptr_server->temp_server));
rc = rc && (session_write_str (file, SESSION_SERV_ADDRESS, ptr_server->address));
rc = rc && (session_write_int (file, SESSION_SERV_PORT, ptr_server->port));
rc = rc && (session_write_int (file, SESSION_SERV_IPV6, ptr_server->ipv6));
@@ -881,8 +881,8 @@ session_load_server (FILE *file)
case SESSION_SERV_AUTORECONNECT_DELAY:
rc = rc && (session_read_int (file, &(session_current_server->autoreconnect_delay)));
break;
- case SESSION_SERV_COMMAND_LINE:
- rc = rc && (session_read_int (file, &(session_current_server->command_line)));
+ case SESSION_SERV_TEMP_SERVER:
+ rc = rc && (session_read_int (file, &(session_current_server->temp_server)));
break;
case SESSION_SERV_ADDRESS:
rc = rc && (session_read_str (file, &(session_current_server->address)));
diff --git a/src/common/session.h b/src/common/session.h
index a6efd826e..576ff1c26 100644
--- a/src/common/session.h
+++ b/src/common/session.h
@@ -54,7 +54,7 @@ enum t_session_server
SESSION_SERV_AUTOCONNECT,
SESSION_SERV_AUTORECONNECT,
SESSION_SERV_AUTORECONNECT_DELAY,
- SESSION_SERV_COMMAND_LINE,
+ SESSION_SERV_TEMP_SERVER,
SESSION_SERV_ADDRESS,
SESSION_SERV_PORT,
SESSION_SERV_IPV6,
diff --git a/src/common/weeconfig.c b/src/common/weeconfig.c
index 43baeca48..2bde274e9 100644
--- a/src/common/weeconfig.c
+++ b/src/common/weeconfig.c
@@ -1188,10 +1188,7 @@ config_change_hotlist ()
void
config_change_read_marker ()
{
- t_gui_window *ptr_win;
-
- for (ptr_win = gui_windows; ptr_win; ptr_win = ptr_win->next_window)
- gui_window_redraw_buffer (ptr_win->buffer);
+ gui_window_redraw_all_buffers ();
}
/*
@@ -2526,7 +2523,7 @@ config_write (char *config_name)
for (ptr_server = irc_servers; ptr_server;
ptr_server = ptr_server->next_server)
{
- if (!ptr_server->command_line)
+ if (!ptr_server->temp_server)
{
weechat_iconv_fprintf (file, "\n[server]\n");
weechat_iconv_fprintf (file, "server_name = \"%s\"\n", ptr_server->name);