summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimmo Saan <simmo.saan@gmail.com>2019-02-23 13:37:46 +0100
committerSébastien Helleu <flashcode@flashtux.org>2019-02-23 13:37:46 +0100
commitc84ac65954d5c726b719111d2da7e852d82a3c1b (patch)
tree738da7392f5e8b436c7180036fed9399882251c6
parent525417c2c6061ce40afeb1c9ac01f6322284f91e (diff)
downloadweechat-c84ac65954d5c726b719111d2da7e852d82a3c1b.zip
core: add /filter addreplace (closes #1055)
-rw-r--r--src/core/wee-command.c91
-rw-r--r--src/gui/gui-filter.c4
2 files changed, 57 insertions, 38 deletions
diff --git a/src/core/wee-command.c b/src/core/wee-command.c
index 33aac47a3..4b2e0ce3b 100644
--- a/src/core/wee-command.c
+++ b/src/core/wee-command.c
@@ -2313,10 +2313,12 @@ COMMAND_CALLBACK(filter)
return WEECHAT_RC_OK;
}
- /* add filter */
- if (string_strcasecmp (argv[1], "add") == 0)
+ /* add (or add/replace) a filter */
+ if ((string_strcasecmp (argv[1], "add") == 0)
+ || (string_strcasecmp (argv[1], "addreplace") == 0))
{
- COMMAND_MIN_ARGS(6, "add");
+ COMMAND_MIN_ARGS(6, argv[1]);
+
if ((strcmp (argv[4], "*") == 0) && (strcmp (argv_eol[5], "*") == 0))
{
gui_chat_printf_date_tags (NULL, 0, GUI_FILTER_TAG_NO_FILTER,
@@ -2326,6 +2328,18 @@ COMMAND_CALLBACK(filter)
return WEECHAT_RC_OK;
}
+ if (string_strcasecmp (argv[1], "addreplace") == 0)
+ {
+ ptr_filter = gui_filter_search_by_name (argv[2]);
+ if (ptr_filter)
+ {
+ /* disable filter and apply before removing it */
+ ptr_filter->enabled = 0;
+ gui_filter_all_buffers (ptr_filter);
+ gui_filter_free (ptr_filter);
+ }
+ }
+
ptr_filter = gui_filter_new (1, argv[2], argv[3], argv[4],
argv_eol[5]);
if (ptr_filter)
@@ -7474,41 +7488,43 @@ command_init ()
"regex"),
N_("list"
" || enable|disable|toggle [<name>|@]"
- " || add <name> <buffer>[,<buffer>...] <tags> <regex>"
+ " || add|addreplace <name> <buffer>[,<buffer>...] <tags> <regex>"
" || rename <name> <new_name>"
" || del <name>|-all"),
- 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"
- " add: add a filter\n"
- " rename: rename a filter\n"
- " del: delete a filter\n"
- " -all: delete all filters\n"
- " buffer: comma separated list of buffers where filter is active:\n"
- " - this is full name including plugin (example: \"irc."
+ 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"
+ " add: add a filter\n"
+ "addreplace: add or replace an existing filter\n"
+ " rename: rename a filter\n"
+ " del: delete a filter\n"
+ " -all: delete all filters\n"
+ " buffer: comma separated list of buffers where filter "
+ "is active:\n"
+ " - this is full name including plugin (example: \"irc."
"freenode.#weechat\" or \"irc.server.freenode\")\n"
- " - \"*\" means all buffers\n"
- " - a name starting with '!' is excluded\n"
- " - wildcard \"*\" is allowed\n"
+ " - \"*\" means all buffers\n"
+ " - a name starting with '!' is excluded\n"
+ " - wildcard \"*\" is allowed\n"
" tags: comma separated list of tags, for example \"irc_join,"
"irc_part,irc_quit\"\n"
- " - logical \"and\": use \"+\" between tags (for example: "
- "\"nick_toto+irc_action\")\n"
- " - wildcard \"*\" is allowed\n"
- " - if tag starts with '!', then it is excluded and must "
- "NOT be in message\n"
+ " - logical \"and\": use \"+\" between tags "
+ "(for example: \"nick_toto+irc_action\")\n"
+ " - wildcard \"*\" is allowed\n"
+ " - if tag starts with '!', then it is excluded and "
+ "must NOT be in message\n"
" regex: POSIX extended regular expression to search in line\n"
- " - use '\\t' to separate prefix from message, special chars "
- "like '|' must be escaped: '\\|'\n"
- " - if regex starts with '!', then matching result is "
+ " - use '\\t' to separate prefix from message, "
+ "special chars like '|' must be escaped: '\\|'\n"
+ " - if regex starts with '!', then matching result is "
"reversed (use '\\!' to start with '!')\n"
- " - two regular expressions are created: one for prefix and "
- "one for message\n"
- " - regex are case insensitive, they can start by \"(?-i)\" "
- "to become case sensitive\n"
+ " - two regular expressions are created: "
+ "one for prefix and one for message\n"
+ " - regex are case insensitive, they can start by "
+ "\"(?-i)\" to become case sensitive\n"
"\n"
"The default key alt+'=' toggles filtering on/off globally and "
"alt+'-' toggles filtering on/off in the current buffer.\n"
@@ -7519,8 +7535,8 @@ command_init ()
" self_msg, nick_xxx (xxx is nick in message), "
"prefix_nick_ccc (ccc is color of nick),\n"
" host_xxx (xxx is username + host in message),\n"
- " irc_xxx (xxx is command name or number, see /server raw or /debug "
- "tags),\n"
+ " irc_xxx (xxx is command name or number, see /server raw or "
+ "/debug tags),\n"
" irc_numeric, irc_error, irc_action, irc_ctcp, irc_ctcp_reply, "
"irc_smart_filter, away_info.\n"
"To see tags for lines in buffers: /debug tags\n"
@@ -7528,8 +7544,8 @@ command_init ()
"Examples:\n"
" use IRC smart filter on all buffers:\n"
" /filter add irc_smart * irc_smart_filter *\n"
- " use IRC smart filter on all buffers except those with \"#weechat\" "
- "in name:\n"
+ " use IRC smart filter on all buffers except those with "
+ "\"#weechat\" in name:\n"
" /filter add irc_smart *,!*#weechat* irc_smart_filter *\n"
" filter all IRC join/part/quit messages:\n"
" /filter add joinquit * irc_join,irc_part,irc_quit *\n"
@@ -7539,7 +7555,8 @@ command_init ()
" /filter add toto irc.freenode.#weechat nick_toto *\n"
" filter IRC join/action messages from nick \"toto\":\n"
" /filter add toto * nick_toto+irc_join,nick_toto+irc_action *\n"
- " filter lines containing \"weechat sucks\" on IRC channel #weechat:\n"
+ " filter lines containing \"weechat sucks\" on IRC channel "
+ "#weechat:\n"
" /filter add sucks irc.freenode.#weechat * weechat sucks\n"
" filter lines that are strictly equal to \"WeeChat sucks\" on "
"all buffers:\n"
@@ -7548,7 +7565,7 @@ command_init ()
" || enable %(filters_names)|@"
" || disable %(filters_names)|@"
" || toggle %(filters_names)|@"
- " || add %(filters_names) %(buffers_plugins_names)|*"
+ " || add|addreplace %(filters_names) %(buffers_plugins_names)|*"
" || rename %(filters_names) %(filters_names)"
" || del %(filters_names)|-all",
&command_filter, NULL, NULL);
diff --git a/src/gui/gui-filter.c b/src/gui/gui-filter.c
index 325c851ff..349ac8f75 100644
--- a/src/gui/gui-filter.c
+++ b/src/gui/gui-filter.c
@@ -303,7 +303,9 @@ gui_filter_new (int enabled, const char *name, const char *buffer_name,
if (gui_filter_search_by_name (name))
{
gui_filter_new_error (name,
- _("a filter with same name already exists"));
+ _("a filter with same name already exists "
+ "(choose another name or use option "
+ "\"addreplace\" to overwrite it)"));
return NULL;
}