summaryrefslogtreecommitdiff
path: root/src/core
diff options
context:
space:
mode:
Diffstat (limited to 'src/core')
-rw-r--r--src/core/wee-command.c59
1 files changed, 58 insertions, 1 deletions
diff --git a/src/core/wee-command.c b/src/core/wee-command.c
index c4ace0a42..95fd7eaa5 100644
--- a/src/core/wee-command.c
+++ b/src/core/wee-command.c
@@ -501,7 +501,7 @@ command_buffer_display_localvar (void *data,
COMMAND_CALLBACK(buffer)
{
- struct t_gui_buffer *ptr_buffer, *weechat_buffer;
+ struct t_gui_buffer *ptr_buffer, *ptr_buffer2, *weechat_buffer;
long number, number1, number2;
char *error, *value, *pos, *str_number1, *pos_number2;
int i, target_buffer, error_main_buffer, num_buffers;
@@ -622,6 +622,55 @@ COMMAND_CALLBACK(buffer)
return WEECHAT_RC_OK;
}
+ /* swap buffers */
+ if (string_strcasecmp (argv[1], "swap") == 0)
+ {
+ COMMAND_MIN_ARGS(3, "buffer swap");
+
+ ptr_buffer = NULL;
+ ptr_buffer2 = NULL;
+
+ /* first buffer for swap */
+ number = strtol (argv[2], &error, 10);
+ if (error && !error[0])
+ ptr_buffer = gui_buffer_search_by_number (number);
+ else
+ {
+ ptr_buffer = gui_buffer_search_by_full_name (argv[2]);
+ if (!ptr_buffer)
+ ptr_buffer = gui_buffer_search_by_partial_name (NULL, argv[2]);
+ }
+
+ /* second buffer for swap */
+ if (argc > 3)
+ {
+ number = strtol (argv[3], &error, 10);
+ if (error && !error[0])
+ ptr_buffer2 = gui_buffer_search_by_number (number);
+ else
+ {
+ ptr_buffer2 = gui_buffer_search_by_full_name (argv[3]);
+ if (!ptr_buffer2)
+ ptr_buffer2 = gui_buffer_search_by_partial_name (NULL, argv[3]);
+ }
+ }
+ else
+ ptr_buffer2 = buffer;
+
+ if (!ptr_buffer || !ptr_buffer2)
+ {
+ /* invalid buffer name/number */
+ gui_chat_printf (NULL,
+ _("%sError: buffer not found"),
+ gui_chat_prefix[GUI_CHAT_PREFIX_ERROR]);
+ return WEECHAT_RC_OK;
+ }
+
+ gui_buffer_swap (ptr_buffer, ptr_buffer2);
+
+ return WEECHAT_RC_OK;
+ }
+
/* merge buffer with another number in the list */
if (string_strcasecmp (argv[1], "merge") == 0)
{
@@ -5439,6 +5488,7 @@ command_init ()
N_("list"
" || clear [<number>|<name>|-merged|-all]"
" || move|merge <number>"
+ " || swap <number1>|<name1> [<number2>|<name2>]"
" || unmerge [<number>|-all]"
" || close [<n1>[-<n2>]|<name>]"
" || notify <level>"
@@ -5453,6 +5503,8 @@ command_init ()
"nothing for current buffer)\n"
" move: move buffer in the list (may be relative, for "
"example -1)\n"
+ " swap: swap two buffers (swap with current buffer if "
+ "only one number/name given)\n"
" merge: merge current buffer to another buffer (chat "
"area will be mix of both buffers)\n"
" (by default ctrl-x switches between merged "
@@ -5482,6 +5534,10 @@ command_init ()
" /buffer clear\n"
" move buffer to number 5:\n"
" /buffer move 5\n"
+ " swap buffer 1 with 3:\n"
+ " /buffer swap 1 3\n"
+ " swap buffer #weechat with current buffer:\n"
+ " /buffer swap #weechat\n"
" merge with core buffer:\n"
" /buffer merge 1\n"
" unmerge buffer:\n"
@@ -5496,6 +5552,7 @@ command_init ()
" /buffer +1"),
"clear -merged|-all|%(buffers_numbers)|%(buffers_plugins_names)"
" || move %(buffers_numbers)"
+ " || swap %(buffers_numbers)"
" || merge %(buffers_numbers)"
" || unmerge %(buffers_numbers)|-all"
" || close %(buffers_plugins_names)"