1
0
mirror of https://github.com/weechat/weechat.git synced 2026-07-03 00:03:12 +02:00

core: add default key alt-'-' to toggle filters in current buffer (closes #17)

This commit is contained in:
Sébastien Helleu
2014-04-01 16:00:44 +02:00
parent af32279dc5
commit a03232e155
37 changed files with 280 additions and 185 deletions
+85 -44
View File
@@ -1823,7 +1823,6 @@ COMMAND_CALLBACK(filter)
/* make C compiler happy */
(void) data;
(void) buffer;
if ((argc == 1)
|| ((argc == 2) && (string_strcasecmp (argv[1], "list") == 0)))
@@ -1860,26 +1859,41 @@ COMMAND_CALLBACK(filter)
{
if (argc > 2)
{
/* enable a filter */
ptr_filter = gui_filter_search_by_name (argv[2]);
if (ptr_filter)
if (strcmp (argv[2], "@") == 0)
{
if (!ptr_filter->enabled)
/* enable filters in buffer */
if (!buffer->filter)
{
ptr_filter->enabled = 1;
gui_filter_all_buffers ();
gui_chat_printf_date_tags (NULL, 0, GUI_FILTER_TAG_NO_FILTER,
_("Filter \"%s\" enabled"),
ptr_filter->name);
buffer->filter = 1;
gui_filter_buffer (buffer, NULL);
}
}
else
{
gui_chat_printf_date_tags (NULL, 0, GUI_FILTER_TAG_NO_FILTER,
_("%sError: filter \"%s\" not found"),
gui_chat_prefix[GUI_CHAT_PREFIX_ERROR],
argv[2]);
return WEECHAT_RC_OK;
/* enable a filter */
ptr_filter = gui_filter_search_by_name (argv[2]);
if (ptr_filter)
{
if (!ptr_filter->enabled)
{
ptr_filter->enabled = 1;
gui_filter_all_buffers ();
gui_chat_printf_date_tags (NULL, 0,
GUI_FILTER_TAG_NO_FILTER,
_("Filter \"%s\" enabled"),
ptr_filter->name);
}
}
else
{
gui_chat_printf_date_tags (NULL, 0,
GUI_FILTER_TAG_NO_FILTER,
_("%sError: filter \"%s\" not "
"found"),
gui_chat_prefix[GUI_CHAT_PREFIX_ERROR],
argv[2]);
return WEECHAT_RC_OK;
}
}
}
else
@@ -1900,26 +1914,41 @@ COMMAND_CALLBACK(filter)
{
if (argc > 2)
{
/* disable a filter */
ptr_filter = gui_filter_search_by_name (argv[2]);
if (ptr_filter)
if (strcmp (argv[2], "@") == 0)
{
if (ptr_filter->enabled)
/* disable filters in buffer */
if (buffer->filter)
{
ptr_filter->enabled = 0;
gui_filter_all_buffers ();
gui_chat_printf_date_tags (NULL, 0, GUI_FILTER_TAG_NO_FILTER,
_("Filter \"%s\" disabled"),
ptr_filter->name);
buffer->filter = 0;
gui_filter_buffer (buffer, NULL);
}
}
else
{
gui_chat_printf_date_tags (NULL, 0, GUI_FILTER_TAG_NO_FILTER,
_("%sError: filter \"%s\" not found"),
gui_chat_prefix[GUI_CHAT_PREFIX_ERROR],
argv[2]);
return WEECHAT_RC_OK;
/* disable a filter */
ptr_filter = gui_filter_search_by_name (argv[2]);
if (ptr_filter)
{
if (ptr_filter->enabled)
{
ptr_filter->enabled = 0;
gui_filter_all_buffers ();
gui_chat_printf_date_tags (NULL, 0,
GUI_FILTER_TAG_NO_FILTER,
_("Filter \"%s\" disabled"),
ptr_filter->name);
}
}
else
{
gui_chat_printf_date_tags (NULL, 0,
GUI_FILTER_TAG_NO_FILTER,
_("%sError: filter \"%s\" not "
"found"),
gui_chat_prefix[GUI_CHAT_PREFIX_ERROR],
argv[2]);
return WEECHAT_RC_OK;
}
}
}
else
@@ -1940,20 +1969,31 @@ COMMAND_CALLBACK(filter)
{
if (argc > 2)
{
/* toggle a filter */
ptr_filter = gui_filter_search_by_name (argv[2]);
if (ptr_filter)
if (strcmp (argv[2], "@") == 0)
{
ptr_filter->enabled ^= 1;
gui_filter_all_buffers ();
/* toggle filters in buffer */
buffer->filter ^= 1;
gui_filter_buffer (buffer, NULL);
}
else
{
gui_chat_printf_date_tags (NULL, 0, GUI_FILTER_TAG_NO_FILTER,
_("%sError: filter \"%s\" not found"),
gui_chat_prefix[GUI_CHAT_PREFIX_ERROR],
argv[2]);
return WEECHAT_RC_OK;
/* toggle a filter */
ptr_filter = gui_filter_search_by_name (argv[2]);
if (ptr_filter)
{
ptr_filter->enabled ^= 1;
gui_filter_all_buffers ();
}
else
{
gui_chat_printf_date_tags (NULL, 0,
GUI_FILTER_TAG_NO_FILTER,
_("%sError: filter \"%s\" not "
"found"),
gui_chat_prefix[GUI_CHAT_PREFIX_ERROR],
argv[2]);
return WEECHAT_RC_OK;
}
}
}
else
@@ -6872,7 +6912,7 @@ command_init ()
N_("filter messages in buffers, to hide/show them according to tags or "
"regex"),
N_("list"
" || enable|disable|toggle [<name>]"
" || enable|disable|toggle [<name>|@]"
" || add <name> <buffer>[,<buffer>...] <tags> <regex>"
" || rename <name> <new_name>"
" || del <name>|-all"),
@@ -6880,7 +6920,8 @@ command_init ()
" enable: enable filters (filters are enabled by default)\n"
"disable: disable filters\n"
" toggle: toggle filters\n"
" name: filter name\n"
" name: filter name (\"@\" = enable/disable all filters in current "
"buffer)\n"
" add: add a filter\n"
" rename: rename a filter\n"
" del: delete a filter\n"
@@ -6936,9 +6977,9 @@ command_init ()
" filter lines containing \"weechat sucks\" on IRC channel #weechat:\n"
" /filter add sucks irc.freenode.#weechat * weechat sucks"),
"list"
" || enable %(filters_names)"
" || disable %(filters_names)"
" || toggle %(filters_names)"
" || enable %(filters_names)|@"
" || disable %(filters_names)|@"
" || toggle %(filters_names)|@"
" || add %(filters_names) %(buffers_plugins_names)|*"
" || rename %(filters_names) %(filters_names)"
" || del %(filters_names)|-all",
+11
View File
@@ -481,6 +481,7 @@ upgrade_weechat_read_cb (void *data,
{
upgrade_current_buffer->day_change = 1;
}
/* "clear" is in WeeChat >= 0.4.4 */
if (infolist_search_var (infolist, "clear"))
{
upgrade_current_buffer->clear =
@@ -492,6 +493,16 @@ upgrade_weechat_read_cb (void *data,
(upgrade_current_buffer->type == GUI_BUFFER_TYPE_FREE) ?
0 : 1;
}
/* "filter" is in WeeChat >= 0.4.4 */
if (infolist_search_var (infolist, "filter"))
{
upgrade_current_buffer->filter =
infolist_integer (infolist, "filter");
}
else
{
upgrade_current_buffer->filter = 1;
}
upgrade_current_buffer->nicklist_case_sensitive =
infolist_integer (infolist, "nicklist_case_sensitive");
upgrade_current_buffer->nicklist_display_groups =
+1
View File
@@ -199,6 +199,7 @@ gui_key_default_bindings (int context)
BIND(/* m-w,m-s */ "meta-wmeta-s", "/window swap");
BIND(/* m-z */ "meta-z", "/window zoom");
BIND(/* m-= */ "meta-=", "/filter toggle");
BIND(/* m-= */ "meta--", "/filter toggle @");
BIND(/* m-0 */ "meta-0", "/buffer *10");
BIND(/* m-1 */ "meta-1", "/buffer *1");
BIND(/* m-2 */ "meta-2", "/buffer *2");
+25 -7
View File
@@ -48,6 +48,7 @@
#include "gui-chat.h"
#include "gui-color.h"
#include "gui-completion.h"
#include "gui-filter.h"
#include "gui-history.h"
#include "gui-hotlist.h"
#include "gui-input.h"
@@ -77,7 +78,7 @@ 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", "lines_hidden", "prefix_max_length", "time_for_each_line",
"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",
@@ -97,12 +98,12 @@ char *gui_buffer_properties_get_pointer[] =
NULL
};
char *gui_buffer_properties_set[] =
{ "unread", "display", "print_hooks_enabled", "day_change", "clear", "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", "highlight_tags",
"hotlist_max_level_nicks", "hotlist_max_level_nicks_add",
{ "unread", "display", "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",
"highlight_tags", "hotlist_max_level_nicks", "hotlist_max_level_nicks_add",
"hotlist_max_level_nicks_del", "input", "input_pos",
"input_get_unknown_commands",
NULL
@@ -595,6 +596,7 @@ gui_buffer_new (struct t_weechat_plugin *plugin,
new_buffer->print_hooks_enabled = 1;
new_buffer->day_change = 1;
new_buffer->clear = 1;
new_buffer->filter = 1;
/* close callback */
new_buffer->close_callback = close_callback;
@@ -987,6 +989,8 @@ gui_buffer_get_integer (struct t_gui_buffer *buffer, const char *property)
return buffer->day_change;
else if (string_strcasecmp (property, "clear") == 0)
return buffer->clear;
else if (string_strcasecmp (property, "filter") == 0)
return buffer->filter;
else if (string_strcasecmp (property, "lines_hidden") == 0)
return buffer->lines->lines_hidden;
else if (string_strcasecmp (property, "prefix_max_length") == 0)
@@ -1768,6 +1772,16 @@ gui_buffer_set (struct t_gui_buffer *buffer, const char *property,
if (error && !error[0])
buffer->clear = (number) ? 1 : 0;
}
else if (string_strcasecmp (property, "filter") == 0)
{
error = NULL;
number = strtol (value, &error, 10);
if (error && !error[0])
{
buffer->filter = (number) ? 1 : 0;
gui_filter_buffer (buffer, NULL);
}
}
else if (string_strcasecmp (property, "number") == 0)
{
error = NULL;
@@ -3831,6 +3845,7 @@ gui_buffer_hdata_buffer_cb (void *data, const char *hdata_name)
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);
HDATA_VAR(struct t_gui_buffer, clear, INTEGER, 0, NULL, NULL);
HDATA_VAR(struct t_gui_buffer, filter, INTEGER, 0, NULL, NULL);
HDATA_VAR(struct t_gui_buffer, close_callback, POINTER, 0, NULL, NULL);
HDATA_VAR(struct t_gui_buffer, close_callback_data, POINTER, 0, NULL, NULL);
HDATA_VAR(struct t_gui_buffer, title, STRING, 0, NULL, NULL);
@@ -4011,6 +4026,8 @@ gui_buffer_add_to_infolist (struct t_infolist *infolist,
return 0;
if (!infolist_new_var_integer (ptr_item, "clear", buffer->clear))
return 0;
if (!infolist_new_var_integer (ptr_item, "filter", buffer->filter))
return 0;
if (!infolist_new_var_integer (ptr_item, "first_line_not_read", buffer->lines->first_line_not_read))
return 0;
if (!infolist_new_var_integer (ptr_item, "lines_hidden", buffer->lines->lines_hidden))
@@ -4219,6 +4236,7 @@ gui_buffer_print_log ()
log_printf (" print_hooks_enabled . . : %d", ptr_buffer->print_hooks_enabled);
log_printf (" day_change. . . . . . . : %d", ptr_buffer->day_change);
log_printf (" clear . . . . . . . . . : %d", ptr_buffer->clear);
log_printf (" filter. . . . . . . . . : %d", ptr_buffer->filter);
log_printf (" close_callback. . . . . : 0x%lx", ptr_buffer->close_callback);
log_printf (" close_callback_data . . : 0x%lx", ptr_buffer->close_callback_data);
log_printf (" title . . . . . . . . . : '%s'", ptr_buffer->title);
+1
View File
@@ -102,6 +102,7 @@ struct t_gui_buffer
int day_change; /* 1 if "day change" displayed */
int clear; /* 1 if clear of buffer is allowed */
/* with command /buffer clear */
int filter; /* 1 if filters enabled for buffer */
/* close callback */
int (*close_callback)(void *data, /* called when buffer is closed */
+2 -2
View File
@@ -61,8 +61,8 @@ gui_filter_check_line (struct t_gui_line_data *line_data)
struct t_gui_filter *ptr_filter;
int rc;
/* line is always displayed if filters are disabled */
if (!gui_filters_enabled)
/* line is always displayed if filters are disabled (globally or in buffer) */
if (!gui_filters_enabled || !line_data->buffer->filter)
return 1;
if (gui_line_has_tag_no_filter (line_data))