diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/common/command.c | 100 | ||||
-rw-r--r-- | src/gui/gui-common.c | 85 | ||||
-rw-r--r-- | src/gui/gui.h | 1 |
3 files changed, 174 insertions, 12 deletions
diff --git a/src/common/command.c b/src/common/command.c index bcd8b3031..a94cc44d7 100644 --- a/src/common/command.c +++ b/src/common/command.c @@ -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"); + + 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; + } } else { + /* jump to buffer by number */ + + error = NULL; number = strtol (argv[0], &error, 10); - if (error) + if ((error) && (error[0] == '\0')) { - gui_printf (NULL, _("%s incorrect buffer number\n"), - WEECHAT_ERROR); - return -1; + 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; + } } - if (!gui_switch_to_buffer_by_number (gui_current_window, number)) + else { - gui_printf (NULL, - _("%s buffer \"%s\" not found for \"%s\" command\n"), - WEECHAT_ERROR, argv[0], "buffer"); + /* invalid number */ + gui_printf (NULL, _("%s incorrect buffer number\n"), + WEECHAT_ERROR); return -1; } + } } return 0; diff --git a/src/gui/gui-common.c b/src/gui/gui-common.c index 147f583ce..ac6b1cc54 100644 --- a/src/gui/gui-common.c +++ b/src/gui/gui-common.c @@ -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); +} diff --git a/src/gui/gui.h b/src/gui/gui.h index 8d9286a3a..ddf7422d2 100644 --- a/src/gui/gui.h +++ b/src/gui/gui.h @@ -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 *); |