mirror of
https://github.com/weechat/weechat.git
synced 2026-07-10 19:53:13 +02:00
Merge branch 'buffer-auto-renumber'
This commit is contained in:
+183
-87
@@ -473,6 +473,35 @@ COMMAND_CALLBACK(bar)
|
||||
return WEECHAT_RC_OK;
|
||||
}
|
||||
|
||||
/*
|
||||
* Checks if the buffer number is valid (in range 1 to GUI_BUFFER_NUMBER_MAX).
|
||||
*
|
||||
* If the number is not valid, a warning is displayed.
|
||||
*
|
||||
* Returns:
|
||||
* 1: buffer number is valid
|
||||
* 0: buffer number is invalid
|
||||
*/
|
||||
|
||||
int
|
||||
command_buffer_check_number (long number)
|
||||
{
|
||||
if ((number < 1) || (number > GUI_BUFFER_NUMBER_MAX))
|
||||
{
|
||||
/* invalid number */
|
||||
gui_chat_printf (NULL,
|
||||
_("%sError: buffer number %d is out of range "
|
||||
"(it must be between 1 and %d)"),
|
||||
gui_chat_prefix[GUI_CHAT_PREFIX_ERROR],
|
||||
number,
|
||||
GUI_BUFFER_NUMBER_MAX);
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* number is OK */
|
||||
return 1;
|
||||
}
|
||||
|
||||
/*
|
||||
* Displays a local variable for a buffer.
|
||||
*/
|
||||
@@ -512,9 +541,9 @@ COMMAND_CALLBACK(buffer)
|
||||
{
|
||||
struct t_gui_buffer *ptr_buffer, *ptr_buffer2, *ptr_prev_buffer;
|
||||
struct t_gui_buffer *weechat_buffer;
|
||||
long number, number1, number2;
|
||||
long number, number1, number2, numbers[3];
|
||||
char *error, *value, *pos, *str_number1, *pos_number2;
|
||||
int i, target_buffer, error_main_buffer, num_buffers;
|
||||
int i, error_main_buffer, num_buffers, count, prev_number;
|
||||
|
||||
/* make C compiler happy */
|
||||
(void) data;
|
||||
@@ -553,42 +582,24 @@ COMMAND_CALLBACK(buffer)
|
||||
{
|
||||
if (string_strcasecmp (argv[2], "-all") == 0)
|
||||
gui_buffer_clear_all ();
|
||||
else if (string_strcasecmp (argv[2], "-merged") == 0)
|
||||
{
|
||||
for (ptr_buffer = gui_buffers; ptr_buffer;
|
||||
ptr_buffer = ptr_buffer->next_buffer)
|
||||
{
|
||||
if ((ptr_buffer->number == buffer->number)
|
||||
&& (ptr_buffer->type == GUI_BUFFER_TYPE_FORMATTED))
|
||||
{
|
||||
gui_buffer_clear (ptr_buffer);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
for (i = 2; i < argc; i++)
|
||||
{
|
||||
error = NULL;
|
||||
number = strtol (argv[i], &error, 10);
|
||||
if (error && !error[0])
|
||||
ptr_buffer = (string_strcasecmp (argv[i], "-merged") == 0) ?
|
||||
buffer : gui_buffer_search_by_number_or_name (argv[i]);
|
||||
if (ptr_buffer)
|
||||
{
|
||||
for (ptr_buffer = gui_buffers; ptr_buffer;
|
||||
ptr_buffer = ptr_buffer->next_buffer)
|
||||
for (ptr_buffer2 = gui_buffers; ptr_buffer2;
|
||||
ptr_buffer2 = ptr_buffer2->next_buffer)
|
||||
{
|
||||
if ((ptr_buffer->number == number)
|
||||
&& (ptr_buffer->type == GUI_BUFFER_TYPE_FORMATTED))
|
||||
if ((ptr_buffer2->number == ptr_buffer->number)
|
||||
&& (ptr_buffer2->type == GUI_BUFFER_TYPE_FORMATTED))
|
||||
{
|
||||
gui_buffer_clear (ptr_buffer);
|
||||
gui_buffer_clear (ptr_buffer2);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
ptr_buffer = gui_buffer_search_by_full_name (argv[i]);
|
||||
if (ptr_buffer)
|
||||
gui_buffer_clear (ptr_buffer);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -605,28 +616,41 @@ COMMAND_CALLBACK(buffer)
|
||||
if (string_strcasecmp (argv[1], "move") == 0)
|
||||
{
|
||||
COMMAND_MIN_ARGS(3, "buffer move");
|
||||
error = NULL;
|
||||
number = strtol (((argv[2][0] == '+') || (argv[2][0] == '-')) ?
|
||||
argv[2] + 1 : argv[2],
|
||||
&error, 10);
|
||||
if (error && !error[0])
|
||||
if (strcmp (argv[2], "-") == 0)
|
||||
{
|
||||
if (argv[2][0] == '+')
|
||||
gui_buffer_move_to_number (buffer,
|
||||
buffer->number + ((int) number));
|
||||
else if (argv[2][0] == '-')
|
||||
gui_buffer_move_to_number (buffer,
|
||||
buffer->number - ((int) number));
|
||||
else
|
||||
gui_buffer_move_to_number (buffer, (int) number);
|
||||
gui_buffer_move_to_number (buffer, 1);
|
||||
}
|
||||
else if (strcmp (argv[2], "+") == 0)
|
||||
{
|
||||
number = last_gui_buffer->number + 1;
|
||||
if (command_buffer_check_number (number))
|
||||
gui_buffer_move_to_number (buffer, number);
|
||||
}
|
||||
else
|
||||
{
|
||||
/* invalid number */
|
||||
gui_chat_printf (NULL,
|
||||
_("%sError: incorrect buffer number"),
|
||||
gui_chat_prefix[GUI_CHAT_PREFIX_ERROR]);
|
||||
return WEECHAT_RC_OK;
|
||||
error = NULL;
|
||||
number = strtol (((argv[2][0] == '+') || (argv[2][0] == '-')) ?
|
||||
argv[2] + 1 : argv[2],
|
||||
&error, 10);
|
||||
if (error && !error[0]
|
||||
&& (number >= INT_MIN) && (number <= INT_MAX))
|
||||
{
|
||||
if (argv[2][0] == '+')
|
||||
number = buffer->number + number;
|
||||
else if (argv[2][0] == '-')
|
||||
number = buffer->number - number;
|
||||
number = (int)number;
|
||||
if (command_buffer_check_number (number))
|
||||
gui_buffer_move_to_number (buffer, number);
|
||||
}
|
||||
else
|
||||
{
|
||||
/* invalid number */
|
||||
gui_chat_printf (NULL,
|
||||
_("%sError: incorrect buffer number"),
|
||||
gui_chat_prefix[GUI_CHAT_PREFIX_ERROR]);
|
||||
return WEECHAT_RC_OK;
|
||||
}
|
||||
}
|
||||
|
||||
return WEECHAT_RC_OK;
|
||||
@@ -640,33 +664,10 @@ COMMAND_CALLBACK(buffer)
|
||||
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;
|
||||
|
||||
/* search buffers to swap */
|
||||
ptr_buffer = gui_buffer_search_by_number_or_name (argv[2]);
|
||||
ptr_buffer2 = (argc > 3) ?
|
||||
gui_buffer_search_by_number_or_name (argv[3]) : buffer;
|
||||
if (!ptr_buffer || !ptr_buffer2)
|
||||
{
|
||||
/* invalid buffer name/number */
|
||||
@@ -676,7 +677,7 @@ COMMAND_CALLBACK(buffer)
|
||||
return WEECHAT_RC_OK;
|
||||
}
|
||||
|
||||
gui_buffer_swap (ptr_buffer, ptr_buffer2);
|
||||
gui_buffer_swap (ptr_buffer->number, ptr_buffer2->number);
|
||||
|
||||
return WEECHAT_RC_OK;
|
||||
}
|
||||
@@ -728,13 +729,55 @@ COMMAND_CALLBACK(buffer)
|
||||
gui_chat_prefix[GUI_CHAT_PREFIX_ERROR]);
|
||||
return WEECHAT_RC_OK;
|
||||
}
|
||||
if (!command_buffer_check_number ((int)number))
|
||||
return WEECHAT_RC_ERROR;
|
||||
}
|
||||
}
|
||||
gui_buffer_unmerge (buffer, (int) number);
|
||||
gui_buffer_unmerge (buffer, (int)number);
|
||||
|
||||
return WEECHAT_RC_OK;
|
||||
}
|
||||
|
||||
/* renumber buffers */
|
||||
if (string_strcasecmp (argv[1], "renumber") == 0)
|
||||
{
|
||||
if (CONFIG_BOOLEAN(config_look_buffer_auto_renumber))
|
||||
{
|
||||
gui_chat_printf (NULL,
|
||||
_("%sError: renumbering is allowed only if option "
|
||||
"weechat.look.buffer_auto_renumber is off"),
|
||||
gui_chat_prefix[GUI_CHAT_PREFIX_ERROR]);
|
||||
return WEECHAT_RC_OK;
|
||||
}
|
||||
for (i = 0; i < 3; i++)
|
||||
{
|
||||
if (argc >= i + 3)
|
||||
{
|
||||
error = NULL;
|
||||
numbers[i] = strtol (argv[i + 2], &error, 10);
|
||||
if (!error || error[0])
|
||||
{
|
||||
/* invalid number */
|
||||
gui_chat_printf (NULL,
|
||||
_("%sError: incorrect buffer number"),
|
||||
gui_chat_prefix[GUI_CHAT_PREFIX_ERROR]);
|
||||
return WEECHAT_RC_OK;
|
||||
}
|
||||
if ((i == 2) && !command_buffer_check_number ((int)numbers[i]))
|
||||
return WEECHAT_RC_OK;
|
||||
}
|
||||
else
|
||||
numbers[i] = -1;
|
||||
}
|
||||
/*
|
||||
* renumber the buffers; if we are renumbering all buffers (no numbers
|
||||
* given), start at number 1
|
||||
*/
|
||||
gui_buffer_renumber ((int)numbers[0], (int)numbers[1],
|
||||
(argc == 2) ? 1 : (int)numbers[2]);
|
||||
return WEECHAT_RC_OK;
|
||||
}
|
||||
|
||||
/* close buffer */
|
||||
if (string_strcasecmp (argv[1], "close") == 0)
|
||||
{
|
||||
@@ -945,12 +988,35 @@ COMMAND_CALLBACK(buffer)
|
||||
number = strtol (argv[1] + 1, &error, 10);
|
||||
if (error && !error[0])
|
||||
{
|
||||
target_buffer = buffer->number - (int) number;
|
||||
if (target_buffer < 1)
|
||||
target_buffer = (last_gui_buffer) ?
|
||||
last_gui_buffer->number + target_buffer : 1;
|
||||
gui_buffer_switch_by_number (gui_current_window,
|
||||
target_buffer);
|
||||
if (number <= 0)
|
||||
return WEECHAT_RC_OK;
|
||||
count = 0;
|
||||
prev_number = gui_current_window->buffer->number;
|
||||
ptr_buffer = gui_current_window->buffer;
|
||||
while (1)
|
||||
{
|
||||
ptr_buffer = ptr_buffer->prev_buffer;
|
||||
if (!ptr_buffer)
|
||||
ptr_buffer = last_gui_buffer;
|
||||
|
||||
/* if we have looped on all buffers, exit the loop */
|
||||
if (ptr_buffer == gui_current_window->buffer)
|
||||
break;
|
||||
|
||||
if ((ptr_buffer->number != gui_current_window->buffer->number)
|
||||
&& (ptr_buffer->number != prev_number))
|
||||
{
|
||||
/* increase count each time we discover a different number */
|
||||
count++;
|
||||
if (count == number)
|
||||
{
|
||||
gui_buffer_switch_by_number (gui_current_window,
|
||||
ptr_buffer->number);
|
||||
break;
|
||||
}
|
||||
}
|
||||
prev_number = ptr_buffer->number;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -971,11 +1037,35 @@ COMMAND_CALLBACK(buffer)
|
||||
number = strtol (argv[1] + 1, &error, 10);
|
||||
if (error && !error[0])
|
||||
{
|
||||
target_buffer = buffer->number + (int) number;
|
||||
if (last_gui_buffer && target_buffer > last_gui_buffer->number)
|
||||
target_buffer -= last_gui_buffer->number;
|
||||
gui_buffer_switch_by_number (gui_current_window,
|
||||
target_buffer);
|
||||
if (number <= 0)
|
||||
return WEECHAT_RC_OK;
|
||||
count = 0;
|
||||
prev_number = gui_current_window->buffer->number;
|
||||
ptr_buffer = gui_current_window->buffer;
|
||||
while (1)
|
||||
{
|
||||
ptr_buffer = ptr_buffer->next_buffer;
|
||||
if (!ptr_buffer)
|
||||
ptr_buffer = gui_buffers;
|
||||
|
||||
/* if we have looped on all buffers, exit the loop */
|
||||
if (ptr_buffer == gui_current_window->buffer)
|
||||
break;
|
||||
|
||||
if ((ptr_buffer->number != gui_current_window->buffer->number)
|
||||
&& (ptr_buffer->number != prev_number))
|
||||
{
|
||||
/* increase count each time we discover a different number */
|
||||
count++;
|
||||
if (count == number)
|
||||
{
|
||||
gui_buffer_switch_by_number (gui_current_window,
|
||||
ptr_buffer->number);
|
||||
break;
|
||||
}
|
||||
}
|
||||
prev_number = ptr_buffer->number;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -6213,6 +6303,7 @@ command_init ()
|
||||
" || move|merge <number>"
|
||||
" || swap <number1>|<name1> [<number2>|<name2>]"
|
||||
" || unmerge [<number>|-all]"
|
||||
" || renumber [<number1> [<number2> [<start>]]]"
|
||||
" || close [<n1>[-<n2>]|<name>]"
|
||||
" || notify <level>"
|
||||
" || localvar"
|
||||
@@ -6234,6 +6325,8 @@ command_init ()
|
||||
"buffers)\n"
|
||||
" unmerge: unmerge buffer from other buffers which have "
|
||||
"same number\n"
|
||||
"renumber: renumber a range of buffers (works only if "
|
||||
"option weechat.look.buffer_auto_renumber is off)\n"
|
||||
" close: close buffer (number/range or name is optional)\n"
|
||||
" notify: set notify level for current buffer: this "
|
||||
"level determines whether buffer will be added to "
|
||||
@@ -6273,11 +6366,14 @@ command_init ()
|
||||
" /buffer #weechat\n"
|
||||
" jump to next buffer:\n"
|
||||
" /buffer +1"),
|
||||
"clear -merged|-all|%(buffers_numbers)|%(buffers_plugins_names)"
|
||||
"clear -merged|-all|%(buffers_numbers)|"
|
||||
"%(buffers_plugins_names)"
|
||||
" || move %(buffers_numbers)"
|
||||
" || swap %(buffers_numbers)"
|
||||
" || merge %(buffers_numbers)"
|
||||
" || unmerge %(buffers_numbers)|-all"
|
||||
" || renumber %(buffers_numbers) %(buffers_numbers) "
|
||||
"%(buffers_numbers)"
|
||||
" || close %(buffers_plugins_names)"
|
||||
" || list"
|
||||
" || notify reset|none|highlight|message|all"
|
||||
|
||||
@@ -84,7 +84,9 @@ struct t_config_option *config_look_bar_more_left;
|
||||
struct t_config_option *config_look_bar_more_right;
|
||||
struct t_config_option *config_look_bar_more_up;
|
||||
struct t_config_option *config_look_bar_more_down;
|
||||
struct t_config_option *config_look_buffer_auto_renumber;
|
||||
struct t_config_option *config_look_buffer_notify_default;
|
||||
struct t_config_option *config_look_buffer_position;
|
||||
struct t_config_option *config_look_buffer_search_case_sensitive;
|
||||
struct t_config_option *config_look_buffer_search_force_default;
|
||||
struct t_config_option *config_look_buffer_search_regex;
|
||||
@@ -383,6 +385,21 @@ config_change_mouse (void *data, struct t_config_option *option)
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Callback for changes on option "weechat.look.buffer_auto_renumber".
|
||||
*/
|
||||
|
||||
void
|
||||
config_change_buffer_auto_renumber (void *data, struct t_config_option *option)
|
||||
{
|
||||
/* make C compiler happy */
|
||||
(void) data;
|
||||
(void) option;
|
||||
|
||||
if (gui_buffers && CONFIG_BOOLEAN(config_look_buffer_auto_renumber))
|
||||
gui_buffer_renumber (-1, -1, 1);
|
||||
}
|
||||
|
||||
/*
|
||||
* Callback for changes on option "weechat.look.buffer_notify_default".
|
||||
*/
|
||||
@@ -1974,6 +1991,14 @@ config_weechat_init_options ()
|
||||
N_("string displayed when bar can be scrolled down "
|
||||
"(for bars with filling different from \"horizontal\")"),
|
||||
NULL, 0, 0, "++", NULL, 0, NULL, NULL, &config_change_buffer_content, NULL, NULL, NULL);
|
||||
config_look_buffer_auto_renumber = config_file_new_option (
|
||||
weechat_config_file, ptr_section,
|
||||
"buffer_auto_renumber", "boolean",
|
||||
N_("automatically renumber buffers to have only consecutive numbers "
|
||||
"and start with number 1; if disabled, gaps between buffer numbers "
|
||||
"are allowed and the first buffer can have a number > 1"),
|
||||
NULL, 0, 0, "on", NULL, 0, NULL, NULL,
|
||||
&config_change_buffer_auto_renumber, NULL, NULL, NULL);
|
||||
config_look_buffer_notify_default = config_file_new_option (
|
||||
weechat_config_file, ptr_section,
|
||||
"buffer_notify_default", "integer",
|
||||
@@ -1984,6 +2009,15 @@ config_weechat_init_options ()
|
||||
"none=never display in hotlist"),
|
||||
"none|highlight|message|all", 0, 0, "all", NULL, 0,
|
||||
NULL, NULL, &config_change_buffer_notify_default, NULL, NULL, NULL);
|
||||
config_look_buffer_position = config_file_new_option (
|
||||
weechat_config_file, ptr_section,
|
||||
"buffer_position", "integer",
|
||||
N_("position of a new buffer: end = after the end of list (number = "
|
||||
"last number + 1) (default), first_gap = at first available "
|
||||
"number in the list (after the end of list if no number is "
|
||||
"available); this option is used only if the buffer has no layout "
|
||||
"number"),
|
||||
"end|first_gap", 0, 0, "end", NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL);
|
||||
config_look_buffer_search_case_sensitive = config_file_new_option (
|
||||
weechat_config_file, ptr_section,
|
||||
"buffer_search_case_sensitive", "boolean",
|
||||
|
||||
@@ -37,6 +37,12 @@ enum t_config_look_align_end_of_lines
|
||||
CONFIG_LOOK_ALIGN_END_OF_LINES_MESSAGE,
|
||||
};
|
||||
|
||||
enum t_config_look_buffer_position
|
||||
{
|
||||
CONFIG_LOOK_BUFFER_POSITION_END = 0,
|
||||
CONFIG_LOOK_BUFFER_POSITION_FIRST_GAP,
|
||||
};
|
||||
|
||||
enum t_config_look_buffer_search_where
|
||||
{
|
||||
CONFIG_LOOK_BUFFER_SEARCH_PREFIX = 0,
|
||||
@@ -108,7 +114,9 @@ extern struct t_config_option *config_look_bar_more_left;
|
||||
extern struct t_config_option *config_look_bar_more_right;
|
||||
extern struct t_config_option *config_look_bar_more_up;
|
||||
extern struct t_config_option *config_look_bar_more_down;
|
||||
extern struct t_config_option *config_look_buffer_auto_renumber;
|
||||
extern struct t_config_option *config_look_buffer_notify_default;
|
||||
extern struct t_config_option *config_look_buffer_position;
|
||||
extern struct t_config_option *config_look_buffer_search_case_sensitive;
|
||||
extern struct t_config_option *config_look_buffer_search_force_default;
|
||||
extern struct t_config_option *config_look_buffer_search_regex;
|
||||
|
||||
+44
-4
@@ -58,10 +58,10 @@ struct t_gui_bar_item *gui_bar_items = NULL; /* first bar item */
|
||||
struct t_gui_bar_item *last_gui_bar_item = NULL; /* last bar item */
|
||||
char *gui_bar_item_names[GUI_BAR_NUM_ITEMS] =
|
||||
{ "input_paste", "input_prompt", "input_search", "input_text", "time",
|
||||
"buffer_count", "buffer_plugin", "buffer_number", "buffer_name",
|
||||
"buffer_modes", "buffer_filter", "buffer_zoom", "buffer_nicklist_count",
|
||||
"scroll", "hotlist", "completion", "buffer_title", "buffer_nicklist",
|
||||
"window_number"
|
||||
"buffer_count", "buffer_last_number", "buffer_plugin", "buffer_number",
|
||||
"buffer_name", "buffer_modes", "buffer_filter", "buffer_zoom",
|
||||
"buffer_nicklist_count", "scroll", "hotlist", "completion", "buffer_title",
|
||||
"buffer_nicklist", "window_number"
|
||||
};
|
||||
char *gui_bar_items_default_for_bars[][2] =
|
||||
{ { GUI_BAR_DEFAULT_NAME_INPUT,
|
||||
@@ -949,6 +949,31 @@ gui_bar_item_default_buffer_count (void *data, struct t_gui_bar_item *item,
|
||||
(void) buffer;
|
||||
(void) extra_info;
|
||||
|
||||
snprintf (buf, sizeof (buf), "%d", gui_buffers_count);
|
||||
|
||||
return strdup (buf);
|
||||
}
|
||||
|
||||
/*
|
||||
* Default item for last buffer number.
|
||||
*/
|
||||
|
||||
char *
|
||||
gui_bar_item_default_buffer_last_number (void *data,
|
||||
struct t_gui_bar_item *item,
|
||||
struct t_gui_window *window,
|
||||
struct t_gui_buffer *buffer,
|
||||
struct t_hashtable *extra_info)
|
||||
{
|
||||
char buf[32];
|
||||
|
||||
/* make C compiler happy */
|
||||
(void) data;
|
||||
(void) item;
|
||||
(void) window;
|
||||
(void) buffer;
|
||||
(void) extra_info;
|
||||
|
||||
snprintf (buf, sizeof (buf), "%d",
|
||||
(last_gui_buffer) ? last_gui_buffer->number : 0);
|
||||
|
||||
@@ -1891,6 +1916,21 @@ gui_bar_item_init ()
|
||||
gui_bar_item_hook_signal ("buffer_closed",
|
||||
gui_bar_item_names[GUI_BAR_ITEM_BUFFER_COUNT]);
|
||||
|
||||
/* last buffer number */
|
||||
gui_bar_item_new (NULL,
|
||||
gui_bar_item_names[GUI_BAR_ITEM_BUFFER_LAST_NUMBER],
|
||||
&gui_bar_item_default_buffer_last_number, NULL);
|
||||
gui_bar_item_hook_signal ("buffer_opened",
|
||||
gui_bar_item_names[GUI_BAR_ITEM_BUFFER_LAST_NUMBER]);
|
||||
gui_bar_item_hook_signal ("buffer_closed",
|
||||
gui_bar_item_names[GUI_BAR_ITEM_BUFFER_LAST_NUMBER]);
|
||||
gui_bar_item_hook_signal ("buffer_moved",
|
||||
gui_bar_item_names[GUI_BAR_ITEM_BUFFER_LAST_NUMBER]);
|
||||
gui_bar_item_hook_signal ("buffer_merged",
|
||||
gui_bar_item_names[GUI_BAR_ITEM_BUFFER_LAST_NUMBER]);
|
||||
gui_bar_item_hook_signal ("buffer_unmerged",
|
||||
gui_bar_item_names[GUI_BAR_ITEM_BUFFER_LAST_NUMBER]);
|
||||
|
||||
/* buffer plugin */
|
||||
gui_bar_item_new (NULL,
|
||||
gui_bar_item_names[GUI_BAR_ITEM_BUFFER_PLUGIN],
|
||||
|
||||
@@ -28,6 +28,7 @@ enum t_gui_bar_item_weechat
|
||||
GUI_BAR_ITEM_INPUT_TEXT,
|
||||
GUI_BAR_ITEM_TIME,
|
||||
GUI_BAR_ITEM_BUFFER_COUNT,
|
||||
GUI_BAR_ITEM_BUFFER_LAST_NUMBER,
|
||||
GUI_BAR_ITEM_BUFFER_PLUGIN,
|
||||
GUI_BAR_ITEM_BUFFER_NUMBER,
|
||||
GUI_BAR_ITEM_BUFFER_NAME,
|
||||
|
||||
+697
-299
File diff suppressed because it is too large
Load Diff
@@ -20,6 +20,7 @@
|
||||
#ifndef __WEECHAT_GUI_BUFFER_H
|
||||
#define __WEECHAT_GUI_BUFFER_H 1
|
||||
|
||||
#include <limits.h>
|
||||
#include <regex.h>
|
||||
|
||||
struct t_hashtable;
|
||||
@@ -46,6 +47,10 @@ enum t_gui_buffer_notify
|
||||
|
||||
#define GUI_BUFFER_MAIN "weechat"
|
||||
|
||||
#define GUI_BUFFERS_MAX 10000
|
||||
|
||||
#define GUI_BUFFER_NUMBER_MAX (INT_MAX - 10000)
|
||||
|
||||
#define GUI_TEXT_SEARCH_DISABLED 0
|
||||
#define GUI_TEXT_SEARCH_BACKWARD 1
|
||||
#define GUI_TEXT_SEARCH_FORWARD 2
|
||||
@@ -205,6 +210,7 @@ struct t_gui_buffer_visited
|
||||
|
||||
extern struct t_gui_buffer *gui_buffers;
|
||||
extern struct t_gui_buffer *last_gui_buffer;
|
||||
extern int gui_buffers_count;
|
||||
extern struct t_gui_buffer_visited *gui_buffers_visited;
|
||||
extern struct t_gui_buffer_visited *last_gui_buffer_visited;
|
||||
extern int gui_buffers_visited_index;
|
||||
@@ -276,6 +282,7 @@ extern struct t_gui_buffer *gui_buffer_search_by_full_name (const char *full_nam
|
||||
extern struct t_gui_buffer *gui_buffer_search_by_partial_name (const char *plugin,
|
||||
const char *name);
|
||||
extern struct t_gui_buffer *gui_buffer_search_by_number (int number);
|
||||
extern struct t_gui_buffer *gui_buffer_search_by_number_or_name (const char *string);
|
||||
extern struct t_gui_buffer *gui_buffer_search_by_layout_number (int layout_number,
|
||||
int layout_number_merge_order);
|
||||
extern int gui_buffer_count_merged_buffers (int number);
|
||||
@@ -288,9 +295,9 @@ extern void gui_buffer_switch_by_number (struct t_gui_window *window,
|
||||
extern void gui_buffer_set_active_buffer (struct t_gui_buffer *buffer);
|
||||
extern struct t_gui_buffer *gui_buffer_get_next_active_buffer (struct t_gui_buffer *buffer);
|
||||
extern struct t_gui_buffer *gui_buffer_get_previous_active_buffer (struct t_gui_buffer *buffer);
|
||||
extern void gui_buffer_renumber (int number1, int number2, int start_number);
|
||||
extern void gui_buffer_move_to_number (struct t_gui_buffer *buffer, int number);
|
||||
extern void gui_buffer_swap (struct t_gui_buffer *buffer1,
|
||||
struct t_gui_buffer *buffer2);
|
||||
extern void gui_buffer_swap (int number1, int number2);
|
||||
extern void gui_buffer_merge (struct t_gui_buffer *buffer,
|
||||
struct t_gui_buffer *target_buffer);
|
||||
extern void gui_buffer_unmerge (struct t_gui_buffer *buffer, int number);
|
||||
|
||||
+7
-27
@@ -342,8 +342,7 @@ gui_layout_buffer_save (struct t_gui_layout *layout)
|
||||
void
|
||||
gui_layout_buffer_apply (struct t_gui_layout *layout)
|
||||
{
|
||||
struct t_gui_buffer *ptr_buffer, *ptr_next_buffer;
|
||||
int number, count_merged;
|
||||
struct t_gui_buffer *ptr_buffer;
|
||||
|
||||
if (!layout)
|
||||
return;
|
||||
@@ -357,35 +356,16 @@ gui_layout_buffer_apply (struct t_gui_layout *layout)
|
||||
/* sort buffers by layout number (without merge) */
|
||||
gui_buffer_sort_by_layout_number ();
|
||||
|
||||
/* merge buffers */
|
||||
ptr_buffer = gui_buffers->next_buffer;
|
||||
while (ptr_buffer)
|
||||
{
|
||||
ptr_next_buffer = ptr_buffer->next_buffer;
|
||||
|
||||
if ((ptr_buffer->layout_number >= 1)
|
||||
&& (ptr_buffer->layout_number == (ptr_buffer->prev_buffer)->layout_number))
|
||||
{
|
||||
gui_buffer_merge (ptr_buffer, ptr_buffer->prev_buffer);
|
||||
}
|
||||
|
||||
ptr_buffer = ptr_next_buffer;
|
||||
}
|
||||
|
||||
/* set appropriate active buffers */
|
||||
number = 1;
|
||||
while (number <= last_gui_buffer->number)
|
||||
for (ptr_buffer = gui_buffers; ptr_buffer;
|
||||
ptr_buffer = ptr_buffer->next_buffer)
|
||||
{
|
||||
count_merged = gui_buffer_count_merged_buffers (number);
|
||||
if (count_merged > 1)
|
||||
if ((gui_buffer_count_merged_buffers (ptr_buffer->number) > 1)
|
||||
&& (ptr_buffer->layout_number == ptr_buffer->number)
|
||||
&& (ptr_buffer->layout_number_merge_order == 0))
|
||||
{
|
||||
ptr_buffer = gui_buffer_search_by_layout_number (number, 0);
|
||||
if (ptr_buffer && !ptr_buffer->active)
|
||||
{
|
||||
gui_buffer_set_active_buffer (ptr_buffer);
|
||||
}
|
||||
gui_buffer_set_active_buffer (ptr_buffer);
|
||||
}
|
||||
number++;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user