1
0
mirror of https://github.com/weechat/weechat.git synced 2026-06-26 12:56:37 +02:00

core: allow wildcard in command /filter (issue #1956)

A mask with wildcards is now allowed in the following commands:

- `/filter enable`
- `/filter disable`
- `/filter toggle`
- `/filter del`
This commit is contained in:
Sébastien Helleu
2023-10-13 21:46:22 +02:00
parent 35660f8b1d
commit aebf6d7ab3
+96 -120
View File
@@ -2488,8 +2488,8 @@ command_filter_display (struct t_gui_filter *filter)
COMMAND_CALLBACK(filter)
{
struct t_gui_filter *ptr_filter;
char str_command[4096], str_pos[16];
struct t_gui_filter *ptr_filter, *ptr_next_filter;
char str_command[4096], str_pos[16], *name;
int i, update;
/* make C compiler happy */
@@ -2530,42 +2530,37 @@ COMMAND_CALLBACK(filter)
{
if (argc > 2)
{
if (strcmp (argv[2], "@") == 0)
for (i = 2; i < argc; i++)
{
/* enable filters in buffer */
if (!buffer->filter)
if (strcmp (argv[i], "@") == 0)
{
buffer->filter = 1;
gui_filter_buffer (buffer, NULL);
(void) hook_signal_send (
"buffer_filters_enabled",
WEECHAT_HOOK_SIGNAL_POINTER, buffer);
}
}
else
{
/* enable a filter */
ptr_filter = gui_filter_search_by_name (argv[2]);
if (ptr_filter)
{
if (!ptr_filter->enabled)
/* enable filters in buffer */
if (!buffer->filter)
{
ptr_filter->enabled = 1;
gui_filter_all_buffers (ptr_filter);
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);
(void) hook_signal_send (
"buffer_filters_enabled",
WEECHAT_HOOK_SIGNAL_POINTER, buffer);
}
}
else
{
gui_chat_printf_date_tags (NULL, 0,
GUI_FILTER_TAG_NO_FILTER,
_("%sFilter \"%s\" not found"),
gui_chat_prefix[GUI_CHAT_PREFIX_ERROR],
argv[2]);
return WEECHAT_RC_OK;
for (ptr_filter = gui_filters; ptr_filter;
ptr_filter = ptr_filter->next_filter)
{
if (!ptr_filter->enabled
&& string_match (ptr_filter->name, argv[i], 1))
{
/* enable a filter */
ptr_filter->enabled = 1;
gui_filter_all_buffers (ptr_filter);
gui_chat_printf_date_tags (NULL, 0,
GUI_FILTER_TAG_NO_FILTER,
_("Filter \"%s\" enabled"),
ptr_filter->name);
}
}
}
}
}
@@ -2587,42 +2582,37 @@ COMMAND_CALLBACK(filter)
{
if (argc > 2)
{
if (strcmp (argv[2], "@") == 0)
for (i = 2; i < argc; i++)
{
/* disable filters in buffer */
if (buffer->filter)
if (strcmp (argv[i], "@") == 0)
{
buffer->filter = 0;
gui_filter_buffer (buffer, NULL);
(void) hook_signal_send (
"buffer_filters_disabled",
WEECHAT_HOOK_SIGNAL_POINTER, buffer);
}
}
else
{
/* disable a filter */
ptr_filter = gui_filter_search_by_name (argv[2]);
if (ptr_filter)
{
if (ptr_filter->enabled)
/* disable filters in buffer */
if (buffer->filter)
{
ptr_filter->enabled = 0;
gui_filter_all_buffers (ptr_filter);
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);
(void) hook_signal_send (
"buffer_filters_disabled",
WEECHAT_HOOK_SIGNAL_POINTER, buffer);
}
}
else
{
gui_chat_printf_date_tags (NULL, 0,
GUI_FILTER_TAG_NO_FILTER,
_("%sFilter \"%s\" not found"),
gui_chat_prefix[GUI_CHAT_PREFIX_ERROR],
argv[2]);
return WEECHAT_RC_OK;
for (ptr_filter = gui_filters; ptr_filter;
ptr_filter = ptr_filter->next_filter)
{
if (ptr_filter->enabled
&& string_match (ptr_filter->name, argv[i], 1))
{
/* disable a filter */
ptr_filter->enabled = 0;
gui_filter_all_buffers (ptr_filter);
gui_chat_printf_date_tags (NULL, 0,
GUI_FILTER_TAG_NO_FILTER,
_("Filter \"%s\" disabled"),
ptr_filter->name);
}
}
}
}
}
@@ -2644,33 +2634,37 @@ COMMAND_CALLBACK(filter)
{
if (argc > 2)
{
if (strcmp (argv[2], "@") == 0)
for (i = 2; i < argc; i++)
{
/* toggle filters in buffer */
buffer->filter ^= 1;
gui_filter_buffer (buffer, NULL);
(void) hook_signal_send (
(buffer->filter) ?
"buffer_filters_enabled" : "buffer_filters_disabled",
WEECHAT_HOOK_SIGNAL_POINTER, buffer);
}
else
{
/* toggle a filter */
ptr_filter = gui_filter_search_by_name (argv[2]);
if (ptr_filter)
if (strcmp (argv[i], "@") == 0)
{
ptr_filter->enabled ^= 1;
gui_filter_all_buffers (ptr_filter);
/* toggle filters in buffer */
buffer->filter ^= 1;
gui_filter_buffer (buffer, NULL);
(void) hook_signal_send (
(buffer->filter) ?
"buffer_filters_enabled" : "buffer_filters_disabled",
WEECHAT_HOOK_SIGNAL_POINTER, buffer);
}
else
{
gui_chat_printf_date_tags (NULL, 0,
GUI_FILTER_TAG_NO_FILTER,
_("%sFilter \"%s\" not found"),
gui_chat_prefix[GUI_CHAT_PREFIX_ERROR],
argv[2]);
return WEECHAT_RC_OK;
for (ptr_filter = gui_filters; ptr_filter;
ptr_filter = ptr_filter->next_filter)
{
if (string_match (ptr_filter->name, argv[i], 1))
{
/* toggle a filter */
ptr_filter->enabled ^= 1;
gui_filter_all_buffers (ptr_filter);
gui_chat_printf_date_tags (
NULL, 0,
GUI_FILTER_TAG_NO_FILTER,
(ptr_filter->enabled) ?
_("Filter \"%s\" enabled") :
_("Filter \"%s\" disabled"),
ptr_filter->name);
}
}
}
}
}
@@ -2793,45 +2787,27 @@ COMMAND_CALLBACK(filter)
if (string_strcmp (argv[1], "del") == 0)
{
COMMAND_MIN_ARGS(3, "del");
if (string_strcmp (argv[2], "-all") == 0)
for (i = 2; i < argc; i++)
{
if (gui_filters)
ptr_filter = gui_filters;
while (ptr_filter)
{
gui_filter_free_all ();
gui_filter_all_buffers (NULL);
gui_chat_printf_date_tags (NULL, 0, GUI_FILTER_TAG_NO_FILTER,
_("All filters have been deleted"));
}
else
{
gui_chat_printf_date_tags (NULL, 0, GUI_FILTER_TAG_NO_FILTER,
_("No message filter defined"));
}
}
else
{
for (i = 2; i < argc; i++)
{
ptr_filter = gui_filter_search_by_name (argv[i]);
if (ptr_filter)
ptr_next_filter = ptr_filter->next_filter;
if (string_match (ptr_filter->name, argv[i], 1))
{
/* disable filter and apply before removing it */
name = strdup (ptr_filter->name);
ptr_filter->enabled = 0;
gui_filter_all_buffers (ptr_filter);
gui_filter_free (ptr_filter);
gui_chat_printf_date_tags (
NULL, 0, GUI_FILTER_TAG_NO_FILTER,
_("Filter \"%s\" deleted"),
argv[i]);
}
else
{
gui_chat_printf_date_tags (
NULL, 0, GUI_FILTER_TAG_NO_FILTER,
_("%sFilter \"%s\" not found"),
gui_chat_prefix[GUI_CHAT_PREFIX_ERROR],
argv[i]);
name);
if (name)
free (name);
}
ptr_filter = ptr_next_filter;
}
}
return WEECHAT_RC_OK;
@@ -8463,23 +8439,23 @@ command_init ()
"regex"),
/* TRANSLATORS: only text between angle brackets (eg: "<name>") must be translated */
N_("list"
" || enable|disable|toggle [<name>|@]"
" || enable|disable|toggle [<name>|<mask>|@ [<name>|<mask>|@...]]"
" || add|addreplace <name> <buffer>[,<buffer>...] <tags> <regex>"
" || rename <name> <new_name>"
" || recreate <name>"
" || del <name>|-all [<name>...]"),
" || del <name>|<mask> [<name>|<mask>...]"),
N_(" list: list all filters\n"
" enable: enable filters (filters are enabled by default)\n"
" disable: disable filters\n"
" toggle: toggle filters\n"
" name: filter name (\"@\" = enable/disable all filters in "
"current buffer)\n"
" mask: name where wildcard \"*\" is allowed "
"(\"@\" = enable/disable all filters in current buffer)\n"
" add: add a filter\n"
"addreplace: add or replace an existing filter\n"
" name: filter name\n"
" rename: rename a filter\n"
" recreate: set input with the command used to edit the filter\n"
" del: delete a filter\n"
" -all: delete all filters\n"
" del: delete filters\n"
" buffer: comma separated list of buffers where filter "
"is active:\n"
" - this is full name including plugin (example: \"irc."
@@ -8540,13 +8516,13 @@ command_init ()
"all buffers:\n"
" /filter add sucks2 * * (?-i)^WeeChat sucks$"),
"list"
" || enable %(filters_names_disabled)|@"
" || disable %(filters_names_enabled)|@"
" || toggle %(filters_names)|@"
" || enable %(filters_names_disabled)|@|%+"
" || disable %(filters_names_enabled)|@|%+"
" || toggle %(filters_names)|@|%+"
" || add|addreplace %(filters_names) %(buffers_plugins_names)|*"
" || rename %(filters_names) %(filters_names)"
" || recreate %(filters_names)"
" || del %(filters_names)|-all %(filters_names)|%*",
" || del %(filters_names)|%*",
&command_filter, NULL, NULL);
hook_command (
NULL, "help",