1
0
mirror of https://github.com/weechat/weechat.git synced 2026-07-07 02:03:13 +02:00

irc: add option "reorder" in command /server (closes #229)

This commit is contained in:
Sébastien Helleu
2014-12-21 11:12:32 +01:00
parent afce3a6427
commit adb4d0debd
16 changed files with 240 additions and 51 deletions
+17 -1
View File
@@ -4715,7 +4715,7 @@ int
irc_command_server (void *data, struct t_gui_buffer *buffer, int argc,
char **argv, char **argv_eol)
{
int i, detailed_list, one_server_found, length;
int i, detailed_list, one_server_found, length, count;
struct t_irc_server *ptr_server2, *server_found, *new_server;
char *server_name, *message;
@@ -4925,6 +4925,18 @@ irc_command_server (void *data, struct t_gui_buffer *buffer, int argc,
WEECHAT_COMMAND_ERROR;
}
if (weechat_strcasecmp (argv[1], "reorder") == 0)
{
WEECHAT_COMMAND_MIN_ARGS(3, "reorder");
count = irc_server_reorder (((const char **)argv) + 2, argc - 2);
weechat_printf (NULL,
NG_("%d server moved", "%d servers moved", count),
count);
return WEECHAT_RC_OK;
}
if (weechat_strcasecmp (argv[1], "keep") == 0)
{
WEECHAT_COMMAND_MIN_ARGS(3, "keep");
@@ -6448,6 +6460,7 @@ irc_command_init ()
" || add <server> <hostname>[/<port>] [-temp] [-<option>[=<value>]] "
"[-no<option>]"
" || copy|rename <server> <new_name>"
" || reorder <server> [<server>...]"
" || del|keep <server>"
" || deloutq|jump|raw"),
N_(" list: list servers (without argument, this list is displayed)\n"
@@ -6462,6 +6475,7 @@ irc_command_init ()
"nooption: set boolean option to 'off' (for example: -nossl)\n"
" copy: duplicate a server\n"
" rename: rename a server\n"
" reorder: reorder list of servers\n"
" keep: keep server in config file (for temporary servers only)\n"
" del: delete a server\n"
" deloutq: delete messages out queue for all servers (all messages "
@@ -6478,6 +6492,7 @@ irc_command_init ()
" /server add freenode3 chat.freenode.net -password=mypass\n"
" /server copy oftc oftcbis\n"
" /server rename oftc newoftc\n"
" /server reorder oftc freenode\n"
" /server del freenode\n"
" /server deloutq"),
"list %(irc_servers)"
@@ -6486,6 +6501,7 @@ irc_command_init ()
" || copy %(irc_servers) %(irc_servers)"
" || rename %(irc_servers) %(irc_servers)"
" || keep %(irc_servers)"
" || reorder %(irc_servers)|%*"
" || del %(irc_servers)"
" || deloutq"
" || jump"
+59
View File
@@ -1712,6 +1712,65 @@ irc_server_rename (struct t_irc_server *server, const char *new_name)
return 1;
}
/*
* Reorders list of servers.
*
* Returns the number of servers moved in the list (>= 0).
*/
int
irc_server_reorder (const char **servers, int num_servers)
{
struct t_irc_server *ptr_server, *ptr_server2;
int i, num_moved;
ptr_server = irc_servers;
num_moved = 0;
for (i = 0; ptr_server && (i < num_servers); i++)
{
for (ptr_server2 = ptr_server; ptr_server2;
ptr_server2 = ptr_server2->next_server)
{
if (strcmp (ptr_server2->name, servers[i]) == 0)
break;
}
if (ptr_server2 == ptr_server)
{
ptr_server = ptr_server->next_server;
}
else if (ptr_server2)
{
/* extract server from list */
if (ptr_server2 == irc_servers)
irc_servers = ptr_server2->next_server;
if (ptr_server2 == last_irc_server)
last_irc_server = ptr_server2->prev_server;
if (ptr_server2->prev_server)
(ptr_server2->prev_server)->next_server = ptr_server2->next_server;
if (ptr_server2->next_server)
(ptr_server2->next_server)->prev_server = ptr_server2->prev_server;
/* set pointers in ptr_server2 */
ptr_server2->prev_server = ptr_server->prev_server;
ptr_server2->next_server = ptr_server;
/* insert ptr_server2 before ptr_server */
if (ptr_server->prev_server)
(ptr_server->prev_server)->next_server = ptr_server2;
ptr_server->prev_server = ptr_server2;
/* adjust list of servers if needed */
if (ptr_server == irc_servers)
irc_servers = ptr_server2;
num_moved++;
}
}
return num_moved;
}
/*
* Sends a signal for an IRC message (received or sent).
*/
+1
View File
@@ -290,6 +290,7 @@ extern void irc_server_free_all ();
extern struct t_irc_server *irc_server_copy (struct t_irc_server *server,
const char *new_name);
extern int irc_server_rename (struct t_irc_server *server, const char *new_name);
extern int irc_server_reorder (const char **servers, int num_servers);
extern void irc_server_send_signal (struct t_irc_server *server,
const char *signal, const char *command,
const char *full_message,