mirror of
https://github.com/weechat/weechat.git
synced 2026-06-28 22:06:38 +02:00
Commands "/buffer (list)" and "/buffer move" now ok
This commit is contained in:
+89
-13
@@ -832,37 +832,113 @@ weechat_cmd_alias (char *arguments)
|
||||
int
|
||||
weechat_cmd_buffer (int argc, char **argv)
|
||||
{
|
||||
int number;
|
||||
t_gui_buffer *ptr_buffer;
|
||||
long number;
|
||||
char *error;
|
||||
|
||||
if ((argc == 0) || ((argc == 1) && (strcasecmp (argv[0], "list") == 0)))
|
||||
{
|
||||
/* list opened bufferss */
|
||||
gui_printf (NULL, "buffer list -- NOT DEVELOPED!\n");
|
||||
/* list opened buffers */
|
||||
|
||||
irc_display_prefix (NULL, PREFIX_INFO);
|
||||
gui_printf (NULL, _("Opened buffers:\n"));
|
||||
|
||||
for (ptr_buffer = gui_buffers; ptr_buffer; ptr_buffer = ptr_buffer->next_buffer)
|
||||
{
|
||||
irc_display_prefix (NULL, PREFIX_INFO);
|
||||
gui_printf_color (NULL, COLOR_WIN_CHAT_DARK, "[");
|
||||
gui_printf (NULL, "%d", ptr_buffer->number);
|
||||
gui_printf_color (NULL, COLOR_WIN_CHAT_DARK, "] ");
|
||||
|
||||
if (ptr_buffer->dcc)
|
||||
gui_printf_color (NULL, COLOR_WIN_CHAT_CHANNEL, "DCC\n");
|
||||
else if (BUFFER_IS_SERVER (ptr_buffer))
|
||||
{
|
||||
gui_printf (NULL, _("Server: "));
|
||||
gui_printf_color (NULL, COLOR_WIN_CHAT_CHANNEL,
|
||||
"%s\n", SERVER(ptr_buffer)->name);
|
||||
}
|
||||
else if (BUFFER_IS_CHANNEL (ptr_buffer))
|
||||
{
|
||||
gui_printf (NULL, _("Channel: "));
|
||||
gui_printf_color (NULL, COLOR_WIN_CHAT_CHANNEL,
|
||||
"%s", CHANNEL(ptr_buffer)->name);
|
||||
gui_printf (NULL, _(" (server: "));
|
||||
gui_printf_color (NULL, COLOR_WIN_CHAT_CHANNEL,
|
||||
"%s", SERVER(ptr_buffer)->name);
|
||||
gui_printf (NULL, ")\n");
|
||||
}
|
||||
else if (BUFFER_IS_PRIVATE (ptr_buffer))
|
||||
{
|
||||
gui_printf (NULL, _("Private with: "));
|
||||
gui_printf_color (NULL, COLOR_WIN_CHAT_NICK,
|
||||
"%s", CHANNEL(ptr_buffer)->name);
|
||||
gui_printf (NULL, _(" (server: "));
|
||||
gui_printf_color (NULL, COLOR_WIN_CHAT_CHANNEL,
|
||||
"%s", SERVER(ptr_buffer)->name);
|
||||
gui_printf (NULL, ")\n");
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (strcasecmp (argv[0], "move") == 0)
|
||||
{
|
||||
/* move buffer to another number in the list */
|
||||
gui_printf (NULL, "buffer move -- NOT DEVELOPED!\n");
|
||||
}
|
||||
else
|
||||
{
|
||||
number = strtol (argv[0], &error, 10);
|
||||
if (error)
|
||||
|
||||
if (argc < 2)
|
||||
{
|
||||
gui_printf (NULL, _("%s missing arguments for \"%s\" command\n"),
|
||||
WEECHAT_ERROR, "buffer");
|
||||
return -1;
|
||||
}
|
||||
|
||||
error = NULL;
|
||||
number = strtol (((argv[1][0] == '+') || (argv[1][0] == '-')) ? argv[1] + 1 : argv[1],
|
||||
&error, 10);
|
||||
if ((error) && (error[0] == '\0'))
|
||||
{
|
||||
if (argv[1][0] == '+')
|
||||
gui_move_buffer_to_number (gui_current_window,
|
||||
gui_current_window->buffer->number + ((int) number));
|
||||
else if (argv[1][0] == '-')
|
||||
gui_move_buffer_to_number (gui_current_window,
|
||||
gui_current_window->buffer->number - ((int) number));
|
||||
else
|
||||
gui_move_buffer_to_number (gui_current_window, (int) number);
|
||||
}
|
||||
else
|
||||
{
|
||||
/* invalid number */
|
||||
gui_printf (NULL, _("%s incorrect buffer number\n"),
|
||||
WEECHAT_ERROR);
|
||||
return -1;
|
||||
}
|
||||
if (!gui_switch_to_buffer_by_number (gui_current_window, number))
|
||||
}
|
||||
else
|
||||
{
|
||||
/* jump to buffer by number */
|
||||
|
||||
error = NULL;
|
||||
number = strtol (argv[0], &error, 10);
|
||||
if ((error) && (error[0] == '\0'))
|
||||
{
|
||||
gui_printf (NULL,
|
||||
_("%s buffer \"%s\" not found for \"%s\" command\n"),
|
||||
WEECHAT_ERROR, argv[0], "buffer");
|
||||
if (!gui_switch_to_buffer_by_number (gui_current_window, (int) number))
|
||||
{
|
||||
gui_printf (NULL,
|
||||
_("%s buffer \"%s\" not found for \"%s\" command\n"),
|
||||
WEECHAT_ERROR, argv[0], "buffer");
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
/* invalid number */
|
||||
gui_printf (NULL, _("%s incorrect buffer number\n"),
|
||||
WEECHAT_ERROR);
|
||||
return -1;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
|
||||
@@ -672,3 +672,88 @@ gui_switch_to_buffer_by_number (t_gui_window *window, int number)
|
||||
/* buffer not found */
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/*
|
||||
* gui_switch_to_buffer_by_number: switch to another buffer with number
|
||||
*/
|
||||
|
||||
void
|
||||
gui_move_buffer_to_number (t_gui_window *window, int number)
|
||||
{
|
||||
t_gui_buffer *ptr_buffer;
|
||||
int i;
|
||||
|
||||
/* buffer number is already ok ? */
|
||||
if (number == window->buffer->number)
|
||||
return;
|
||||
|
||||
if (number < 1)
|
||||
number = 1;
|
||||
|
||||
/* remove buffer from list */
|
||||
if (window->buffer == gui_buffers)
|
||||
{
|
||||
gui_buffers = window->buffer->next_buffer;
|
||||
gui_buffers->prev_buffer = NULL;
|
||||
}
|
||||
if (window->buffer == last_gui_buffer)
|
||||
{
|
||||
last_gui_buffer = window->buffer->prev_buffer;
|
||||
last_gui_buffer->next_buffer = NULL;
|
||||
}
|
||||
if (window->buffer->prev_buffer)
|
||||
(window->buffer->prev_buffer)->next_buffer = window->buffer->next_buffer;
|
||||
if (window->buffer->next_buffer)
|
||||
(window->buffer->next_buffer)->prev_buffer = window->buffer->prev_buffer;
|
||||
|
||||
if (number == 1)
|
||||
{
|
||||
gui_buffers->prev_buffer = window->buffer;
|
||||
window->buffer->prev_buffer = NULL;
|
||||
window->buffer->next_buffer = gui_buffers;
|
||||
gui_buffers = window->buffer;
|
||||
}
|
||||
else
|
||||
{
|
||||
/* assign new number to all buffers */
|
||||
i = 1;
|
||||
for (ptr_buffer = gui_buffers; ptr_buffer; ptr_buffer = ptr_buffer->next_buffer)
|
||||
{
|
||||
ptr_buffer->number = i++;
|
||||
}
|
||||
|
||||
/* search for new position in the list */
|
||||
for (ptr_buffer = gui_buffers; ptr_buffer; ptr_buffer = ptr_buffer->next_buffer)
|
||||
{
|
||||
if (ptr_buffer->number == number)
|
||||
break;
|
||||
}
|
||||
if (ptr_buffer)
|
||||
{
|
||||
/* insert before buffer found */
|
||||
window->buffer->prev_buffer = ptr_buffer->prev_buffer;
|
||||
window->buffer->next_buffer = ptr_buffer;
|
||||
if (ptr_buffer->prev_buffer)
|
||||
(ptr_buffer->prev_buffer)->next_buffer = window->buffer;
|
||||
ptr_buffer->prev_buffer = window->buffer;
|
||||
}
|
||||
else
|
||||
{
|
||||
/* number not found (too big)? => add to end */
|
||||
window->buffer->prev_buffer = last_gui_buffer;
|
||||
window->buffer->next_buffer = NULL;
|
||||
last_gui_buffer->next_buffer = window->buffer;
|
||||
last_gui_buffer = window->buffer;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/* assign new number to all buffers */
|
||||
i = 1;
|
||||
for (ptr_buffer = gui_buffers; ptr_buffer; ptr_buffer = ptr_buffer->next_buffer)
|
||||
{
|
||||
ptr_buffer->number = i++;
|
||||
}
|
||||
|
||||
gui_redraw_buffer (window->buffer);
|
||||
}
|
||||
|
||||
@@ -257,6 +257,7 @@ extern void gui_move_previous_word (t_gui_buffer *);
|
||||
extern void gui_move_next_word (t_gui_buffer *);
|
||||
extern void gui_buffer_insert_string (t_gui_buffer *, char *, int);
|
||||
extern t_gui_buffer *gui_switch_to_buffer_by_number (t_gui_window *, int);
|
||||
extern void gui_move_buffer_to_number (t_gui_window *, int);
|
||||
/* GUI dependant functions */
|
||||
extern int gui_assign_color (int *, char *);
|
||||
extern int gui_get_color_by_name (char *);
|
||||
|
||||
Reference in New Issue
Block a user