1
0
mirror of https://github.com/weechat/weechat.git synced 2026-07-01 15:26:37 +02:00

core: add hidden buffers, add options hide/unhide in command /buffer

This commit is contained in:
Sébastien Helleu
2014-04-05 16:30:13 +02:00
parent 2beefdfc2a
commit c7ce05d5ec
34 changed files with 604 additions and 379 deletions
+130 -25
View File
@@ -562,7 +562,7 @@ COMMAND_CALLBACK(buffer)
ptr_buffer = ptr_buffer->next_buffer)
{
gui_chat_printf (NULL,
_(" %s[%s%d%s]%s %s%s.%s%s%s (notify: %s)"),
_(" %s[%s%d%s]%s %s%s.%s%s%s (notify: %s)%s%s"),
GUI_COLOR(GUI_COLOR_CHAT_DELIMITERS),
GUI_COLOR(GUI_COLOR_CHAT),
ptr_buffer->number,
@@ -573,13 +573,16 @@ COMMAND_CALLBACK(buffer)
GUI_COLOR(GUI_COLOR_CHAT_BUFFER),
ptr_buffer->name,
GUI_COLOR(GUI_COLOR_CHAT),
gui_buffer_notify_string[ptr_buffer->notify]);
gui_buffer_notify_string[ptr_buffer->notify],
(ptr_buffer->hidden) ? " " : "",
/* TRANSLATORS: "hidden" is displayed in list of buffers */
(ptr_buffer->hidden) ? _("(hidden)") : "");
}
return WEECHAT_RC_OK;
}
/* clear content of buffer */
/* clear content of buffer(s) */
if (string_strcasecmp (argv[1], "clear") == 0)
{
if (argc > 2)
@@ -762,6 +765,72 @@ COMMAND_CALLBACK(buffer)
return WEECHAT_RC_OK;
}
/* hide buffer(s) */
if (string_strcasecmp (argv[1], "hide") == 0)
{
if (argc > 2)
{
for (i = 2; i < argc; i++)
{
ptr_buffer = gui_buffer_search_by_number_or_name (argv[i]);
if (ptr_buffer)
{
number = strtol (argv[2], &error, 10);
if (error && !error[0])
{
for (ptr_buffer2 = gui_buffers; ptr_buffer2;
ptr_buffer2 = ptr_buffer2->next_buffer)
{
if (ptr_buffer2->number == ptr_buffer->number)
{
gui_buffer_hide (ptr_buffer2);
}
}
}
else
gui_buffer_hide (ptr_buffer);
}
}
}
else
gui_buffer_hide (buffer);
return WEECHAT_RC_OK;
}
/* unhide buffer(s) */
if (string_strcasecmp (argv[1], "unhide") == 0)
{
if (argc > 2)
{
for (i = 2; i < argc; i++)
{
ptr_buffer = gui_buffer_search_by_number_or_name (argv[i]);
if (ptr_buffer)
{
number = strtol (argv[2], &error, 10);
if (error && !error[0])
{
for (ptr_buffer2 = gui_buffers; ptr_buffer2;
ptr_buffer2 = ptr_buffer2->next_buffer)
{
if (ptr_buffer2->number == ptr_buffer->number)
{
gui_buffer_unhide (ptr_buffer2);
}
}
}
else
gui_buffer_unhide (ptr_buffer);
}
}
}
else
gui_buffer_unhide (buffer);
return WEECHAT_RC_OK;
}
/* renumber buffers */
if (string_strcasecmp (argv[1], "renumber") == 0)
{
@@ -1016,8 +1085,16 @@ COMMAND_CALLBACK(buffer)
{
if (strcmp (argv[1], "-") == 0)
{
/* search first non-hidden buffer */
for (ptr_buffer = gui_buffers; ptr_buffer;
ptr_buffer = ptr_buffer->next_buffer)
{
if (!ptr_buffer->hidden)
break;
}
gui_buffer_switch_by_number (gui_current_window,
gui_buffers->number);
(ptr_buffer) ?
ptr_buffer->number : gui_buffers->number);
}
else
{
@@ -1038,19 +1115,26 @@ COMMAND_CALLBACK(buffer)
if (ptr_buffer == gui_current_window->buffer)
break;
if ((ptr_buffer->number != gui_current_window->buffer->number)
&& (ptr_buffer->number != prev_number))
/* skip hidden buffers */
if (!ptr_buffer->hidden)
{
/* increase count each time we discover a different number */
count++;
if (count == number)
if ((ptr_buffer->number != gui_current_window->buffer->number)
&& (ptr_buffer->number != prev_number))
{
gui_buffer_switch_by_number (gui_current_window,
ptr_buffer->number);
break;
/*
* 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;
}
prev_number = ptr_buffer->number;
}
}
else
@@ -1070,8 +1154,16 @@ COMMAND_CALLBACK(buffer)
{
if (strcmp (argv[1], "+") == 0)
{
/* search last non-hidden buffer */
for (ptr_buffer = last_gui_buffer; ptr_buffer;
ptr_buffer = ptr_buffer->prev_buffer)
{
if (!ptr_buffer->hidden)
break;
}
gui_buffer_switch_by_number (gui_current_window,
last_gui_buffer->number);
(ptr_buffer) ?
ptr_buffer->number : last_gui_buffer->number);
}
else
{
@@ -1092,19 +1184,26 @@ COMMAND_CALLBACK(buffer)
if (ptr_buffer == gui_current_window->buffer)
break;
if ((ptr_buffer->number != gui_current_window->buffer->number)
&& (ptr_buffer->number != prev_number))
/* skip hidden buffers */
if (!ptr_buffer->hidden)
{
/* increase count each time we discover a different number */
count++;
if (count == number)
if ((ptr_buffer->number != gui_current_window->buffer->number)
&& (ptr_buffer->number != prev_number))
{
gui_buffer_switch_by_number (gui_current_window,
ptr_buffer->number);
break;
/*
* 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;
}
prev_number = ptr_buffer->number;
}
}
else
@@ -6643,11 +6742,13 @@ command_init ()
NULL, "buffer",
N_("manage buffers"),
N_("list"
" || clear [<number>|<name>|-merged|-all]"
" || clear [<number>|<name>|-merged|-all [<number>|<name>...]]"
" || move <number>|-|+"
" || merge <number>"
" || swap <number1>|<name1> [<number2>|<name2>]"
" || merge <number>"
" || unmerge [<number>|-all]"
" || hide [<number>|<name> [<number>|<name>...]]"
" || unhide [<number>|<name> [<number>|<name>...]]"
" || renumber [<number1> [<number2> [<start>]]]"
" || close [<n1>[-<n2>]|<name>]"
" || notify <level>"
@@ -6667,6 +6768,8 @@ command_init ()
"be mix of both buffers)\n"
" (by default ctrl-x switches between merged buffers)\n"
" unmerge: unmerge buffer from other buffers which have same number\n"
" hide: hide the buffer\n"
" unhide: unhide the buffer\n"
"renumber: renumber buffers (works only if option weechat.look."
"buffer_auto_renumber is off)\n"
" close: close buffer (number/range or name is optional)\n"
@@ -6718,6 +6821,8 @@ command_init ()
" || swap %(buffers_numbers)"
" || merge %(buffers_numbers)"
" || unmerge %(buffers_numbers)|-all"
" || hide %(buffers_numbers)|%(buffers_plugins_names)|%*"
" || unhide %(buffers_numbers)|%(buffers_plugins_names)|%*"
" || renumber %(buffers_numbers) %(buffers_numbers) %(buffers_numbers)"
" || close %(buffers_plugins_names)"
" || list"
+10
View File
@@ -472,6 +472,16 @@ upgrade_weechat_read_cb (void *data,
infolist_integer (infolist, "type");
upgrade_current_buffer->notify =
infolist_integer (infolist, "notify");
/* "hidden" is in WeeChat >= 0.4.4 */
if (infolist_search_var (infolist, "hidden"))
{
upgrade_current_buffer->hidden =
infolist_integer (infolist, "hidden");
}
else
{
upgrade_current_buffer->hidden = 0;
}
if (infolist_search_var (infolist, "day_change"))
{
upgrade_current_buffer->day_change =
+120 -38
View File
@@ -77,14 +77,15 @@ char *gui_buffer_notify_string[GUI_BUFFER_NUM_NOTIFY] =
char *gui_buffer_properties_get_integer[] =
{ "number", "layout_number", "layout_number_merge_order", "type", "notify",
"num_displayed", "active", "zoomed", "print_hooks_enabled", "day_change",
"clear", "filter", "lines_hidden", "prefix_max_length", "time_for_each_line",
"nicklist", "nicklist_case_sensitive", "nicklist_max_length",
"nicklist_display_groups", "nicklist_count", "nicklist_groups_count",
"nicklist_nicks_count", "nicklist_visible_count", "input",
"input_get_unknown_commands", "input_size", "input_length", "input_pos",
"input_1st_display", "num_history", "text_search", "text_search_exact",
"text_search_regex", "text_search_where", "text_search_found",
"num_displayed", "active", "hidden", "zoomed", "print_hooks_enabled",
"day_change", "clear", "filter", "lines_hidden", "prefix_max_length",
"time_for_each_line", "nicklist", "nicklist_case_sensitive",
"nicklist_max_length", "nicklist_display_groups", "nicklist_count",
"nicklist_groups_count", "nicklist_nicks_count", "nicklist_visible_count",
"input", "input_get_unknown_commands", "input_size", "input_length",
"input_pos", "input_1st_display", "num_history", "text_search",
"text_search_exact", "text_search_regex", "text_search_where",
"text_search_found",
NULL
};
char *gui_buffer_properties_get_string[] =
@@ -98,8 +99,8 @@ char *gui_buffer_properties_get_pointer[] =
NULL
};
char *gui_buffer_properties_set[] =
{ "hotlist", "unread", "display", "print_hooks_enabled", "day_change", "clear",
"filter", "number", "name", "short_name", "type", "notify", "title",
{ "hotlist", "unread", "display", "hidden", "print_hooks_enabled", "day_change",
"clear", "filter", "number", "name", "short_name", "type", "notify", "title",
"time_for_each_line", "nicklist", "nicklist_case_sensitive",
"nicklist_display_groups", "highlight_words", "highlight_words_add",
"highlight_words_del", "highlight_regex", "highlight_tags_restrict",
@@ -592,6 +593,7 @@ gui_buffer_new (struct t_weechat_plugin *plugin,
new_buffer->notify = CONFIG_INTEGER(config_look_buffer_notify_default);
new_buffer->num_displayed = 0;
new_buffer->active = 1;
new_buffer->hidden = 0;
new_buffer->zoomed = 0;
new_buffer->print_hooks_enabled = 1;
new_buffer->day_change = 1;
@@ -981,6 +983,8 @@ gui_buffer_get_integer (struct t_gui_buffer *buffer, const char *property)
return buffer->num_displayed;
else if (string_strcasecmp (property, "active") == 0)
return buffer->active;
else if (string_strcasecmp (property, "hidden") == 0)
return buffer->hidden;
else if (string_strcasecmp (property, "zoomed") == 0)
return buffer->zoomed;
else if (string_strcasecmp (property, "print_hooks_enabled") == 0)
@@ -1753,6 +1757,18 @@ gui_buffer_set (struct t_gui_buffer *buffer, const char *property,
(string_strcasecmp (value, "auto") == 0) ?
0 : 1);
}
else if (string_strcasecmp (property, "hidden") == 0)
{
error = NULL;
number = strtol (value, &error, 10);
if (error && !error[0])
{
if (number)
gui_buffer_hide (buffer);
else
gui_buffer_unhide (buffer);
}
}
else if (string_strcasecmp (property, "print_hooks_enabled") == 0)
{
error = NULL;
@@ -2512,7 +2528,9 @@ gui_buffer_close (struct t_gui_buffer *buffer)
/* first unmerge buffer if it is merged to at least one other buffer */
if (gui_buffer_count_merged_buffers (buffer->number) > 1)
{
ptr_back_to_buffer = gui_buffer_get_next_active_buffer (buffer);
ptr_back_to_buffer = gui_buffer_get_next_active_buffer (buffer, 0);
if (!ptr_back_to_buffer)
ptr_back_to_buffer = gui_buffer_get_next_active_buffer (buffer, 1);
gui_buffer_unmerge (buffer, last_gui_buffer->number + 1);
}
@@ -2763,56 +2781,82 @@ gui_buffer_set_active_buffer (struct t_gui_buffer *buffer)
/*
* Gets next active buffer (when many buffers are merged).
*
* If "allow_hidden_buffer" == 1, an hidden buffer can be returned.
* Otherwise an hidden buffer is never returned (if all other merged buffers are
* hidden, then NULL is returned).
*/
struct t_gui_buffer *
gui_buffer_get_next_active_buffer (struct t_gui_buffer *buffer)
gui_buffer_get_next_active_buffer (struct t_gui_buffer *buffer,
int allow_hidden_buffer)
{
struct t_gui_buffer *ptr_buffer;
if (buffer->next_buffer
&& (buffer->next_buffer->number == buffer->number))
return buffer->next_buffer;
else
/* search after buffer */
for (ptr_buffer = buffer->next_buffer; ptr_buffer;
ptr_buffer = ptr_buffer->next_buffer)
{
for (ptr_buffer = gui_buffers; ptr_buffer;
ptr_buffer = ptr_buffer->next_buffer)
if (ptr_buffer->number != buffer->number)
break;
if (allow_hidden_buffer || !ptr_buffer->hidden)
return ptr_buffer;
}
/* search before buffer */
for (ptr_buffer = gui_buffers; ptr_buffer;
ptr_buffer = ptr_buffer->next_buffer)
{
if (ptr_buffer == buffer)
break;
if ((ptr_buffer->number == buffer->number)
&& (allow_hidden_buffer || !ptr_buffer->hidden))
{
if ((ptr_buffer != buffer)
&& (ptr_buffer->number == buffer->number))
{
return ptr_buffer;
}
return ptr_buffer;
}
}
return buffer;
return NULL;
}
/*
* Gets previous active buffer (when many buffers are merged).
*
* If "allow_hidden_buffer" == 1, an hidden buffer can be returned.
* Otherwise an hidden buffer is never returned (if all other merged buffers are
* hidden, then NULL is returned).
*/
struct t_gui_buffer *
gui_buffer_get_previous_active_buffer (struct t_gui_buffer *buffer)
gui_buffer_get_previous_active_buffer (struct t_gui_buffer *buffer,
int allow_hidden_buffer)
{
struct t_gui_buffer *ptr_buffer;
if (buffer->prev_buffer
&& (buffer->prev_buffer->number == buffer->number))
return buffer->prev_buffer;
else
/* search before buffer */
for (ptr_buffer = buffer->prev_buffer; ptr_buffer;
ptr_buffer = ptr_buffer->prev_buffer)
{
for (ptr_buffer = last_gui_buffer; ptr_buffer;
ptr_buffer = ptr_buffer->prev_buffer)
if (ptr_buffer->number != buffer->number)
break;
if (allow_hidden_buffer || !ptr_buffer->hidden)
return ptr_buffer;
}
/* search after buffer */
for (ptr_buffer = last_gui_buffer; ptr_buffer;
ptr_buffer = ptr_buffer->prev_buffer)
{
if (ptr_buffer == buffer)
break;
if ((ptr_buffer->number == buffer->number)
&& (allow_hidden_buffer || !ptr_buffer->hidden))
{
if ((ptr_buffer != buffer)
&& (ptr_buffer->number == buffer->number))
{
return ptr_buffer;
}
return ptr_buffer;
}
}
return buffer;
return NULL;
}
/*
@@ -3308,7 +3352,9 @@ gui_buffer_unmerge (struct t_gui_buffer *buffer, int number)
else
{
/* remove this buffer from mixed_lines, but keep other buffers merged */
ptr_new_active_buffer = gui_buffer_get_next_active_buffer (buffer);
ptr_new_active_buffer = gui_buffer_get_next_active_buffer (buffer, 0);
if (!ptr_new_active_buffer)
ptr_new_active_buffer = gui_buffer_get_next_active_buffer (buffer, 1);
if (ptr_new_active_buffer)
gui_buffer_set_active_buffer (ptr_new_active_buffer);
gui_line_mixed_free_buffer (buffer);
@@ -3404,6 +3450,38 @@ gui_buffer_unmerge_all ()
}
}
/*
* Hides a buffer.
*/
void
gui_buffer_hide (struct t_gui_buffer *buffer)
{
if (!buffer || buffer->hidden)
return;
buffer->hidden = 1;
(void) hook_signal_send ("buffer_hidden",
WEECHAT_HOOK_SIGNAL_POINTER, buffer);
}
/*
* Unhides a buffer.
*/
void
gui_buffer_unhide (struct t_gui_buffer *buffer)
{
if (!buffer || !buffer->hidden)
return;
buffer->hidden = 0;
(void) hook_signal_send ("buffer_unhidden",
WEECHAT_HOOK_SIGNAL_POINTER, buffer);
}
/*
* Sorts buffers by layout number.
*/
@@ -3846,6 +3924,7 @@ gui_buffer_hdata_buffer_cb (void *data, const char *hdata_name)
HDATA_VAR(struct t_gui_buffer, notify, INTEGER, 0, NULL, NULL);
HDATA_VAR(struct t_gui_buffer, num_displayed, INTEGER, 0, NULL, NULL);
HDATA_VAR(struct t_gui_buffer, active, INTEGER, 0, NULL, NULL);
HDATA_VAR(struct t_gui_buffer, hidden, INTEGER, 0, NULL, NULL);
HDATA_VAR(struct t_gui_buffer, zoomed, INTEGER, 0, NULL, NULL);
HDATA_VAR(struct t_gui_buffer, print_hooks_enabled, INTEGER, 0, NULL, NULL);
HDATA_VAR(struct t_gui_buffer, day_change, INTEGER, 0, NULL, NULL);
@@ -4023,6 +4102,8 @@ gui_buffer_add_to_infolist (struct t_infolist *infolist,
return 0;
if (!infolist_new_var_integer (ptr_item, "active", buffer->active))
return 0;
if (!infolist_new_var_integer (ptr_item, "hidden", buffer->hidden))
return 0;
if (!infolist_new_var_integer (ptr_item, "zoomed", buffer->zoomed))
return 0;
if (!infolist_new_var_integer (ptr_item, "print_hooks_enabled", buffer->print_hooks_enabled))
@@ -4237,6 +4318,7 @@ gui_buffer_print_log ()
log_printf (" notify. . . . . . . . . : %d", ptr_buffer->notify);
log_printf (" num_displayed . . . . . : %d", ptr_buffer->num_displayed);
log_printf (" active. . . . . . . . . : %d", ptr_buffer->active);
log_printf (" hidden. . . . . . . . . : %d", ptr_buffer->hidden);
log_printf (" zoomed. . . . . . . . . : %d", ptr_buffer->zoomed);
log_printf (" print_hooks_enabled . . : %d", ptr_buffer->print_hooks_enabled);
log_printf (" day_change. . . . . . . : %d", ptr_buffer->day_change);
+7 -2
View File
@@ -96,6 +96,7 @@ struct t_gui_buffer
int active; /* 0 = buffer merged and not active */
/* 1 = active (merged or not) */
/* 2 = the only active (merged) */
int hidden; /* 1 = buffer hidden */
int zoomed; /* 1 if a merged buffer is zoomed */
/* (it can be another buffer) */
int print_hooks_enabled; /* 1 if print hooks are enabled */
@@ -303,8 +304,10 @@ extern void gui_buffer_close (struct t_gui_buffer *buffer);
extern void gui_buffer_switch_by_number (struct t_gui_window *window,
int number);
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 struct t_gui_buffer *gui_buffer_get_next_active_buffer (struct t_gui_buffer *buffer,
int allow_hidden_buffer);
extern struct t_gui_buffer *gui_buffer_get_previous_active_buffer (struct t_gui_buffer *buffer,
int allow_hidden_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 (int number1, int number2);
@@ -312,6 +315,8 @@ 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);
extern void gui_buffer_unmerge_all ();
extern void gui_buffer_hide (struct t_gui_buffer *buffer);
extern void gui_buffer_unhide (struct t_gui_buffer *buffer);
extern void gui_buffer_sort_by_layout_number ();
extern void gui_buffer_undo_snap (struct t_gui_buffer *buffer);
extern void gui_buffer_undo_snap_free (struct t_gui_buffer *buffer);
+2 -2
View File
@@ -1578,7 +1578,7 @@ gui_input_switch_active_buffer (struct t_gui_buffer *buffer)
struct t_gui_buffer *ptr_buffer;
struct t_gui_window *window;
ptr_buffer = gui_buffer_get_next_active_buffer (buffer);
ptr_buffer = gui_buffer_get_next_active_buffer (buffer, 0);
if (ptr_buffer)
{
gui_buffer_set_active_buffer (ptr_buffer);
@@ -1598,7 +1598,7 @@ gui_input_switch_active_buffer_previous (struct t_gui_buffer *buffer)
struct t_gui_buffer *ptr_buffer;
struct t_gui_window *window;
ptr_buffer = gui_buffer_get_previous_active_buffer (buffer);
ptr_buffer = gui_buffer_get_previous_active_buffer (buffer, 0);
if (ptr_buffer)
{
gui_buffer_set_active_buffer (ptr_buffer);