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

trigger: add support for one-time triggers (closes #399)

This commit is contained in:
Simmo Saan
2015-08-22 12:22:51 +03:00
parent 0513800cb6
commit 1d3a75333e
8 changed files with 162 additions and 15 deletions
+41 -7
View File
@@ -59,9 +59,10 @@ trigger_command_display_trigger_internal (const char *name,
int commands_count,
char **commands,
int return_code,
int once_action,
int verbose)
{
char str_conditions[64], str_regex[64], str_command[64], str_rc[64];
char str_conditions[64], str_regex[64], str_command[64], str_rc[64], str_once[64];
char spaces[256];
int i, length;
@@ -153,6 +154,15 @@ trigger_command_display_trigger_internal (const char *name,
weechat_color ("reset"),
trigger_return_code_string[return_code]);
}
if ((once_action >= 0) && (once_action != TRIGGER_ONCE_NONE))
{
weechat_printf_tags (NULL, "no_trigger",
"%s %s=1 %s%s",
spaces,
weechat_color (weechat_config_string (trigger_config_color_flag_once_action)),
weechat_color ("reset"),
trigger_once_action_string[once_action]);
}
}
else
{
@@ -160,6 +170,7 @@ trigger_command_display_trigger_internal (const char *name,
str_regex[0] = '\0';
str_command[0] = '\0';
str_rc[0] = '\0';
str_once[0] = '\0';
if (conditions && conditions[0])
{
snprintf (str_conditions, sizeof (str_conditions),
@@ -190,9 +201,16 @@ trigger_command_display_trigger_internal (const char *name,
weechat_color (weechat_config_string (trigger_config_color_flag_return_code)),
weechat_color ("reset"));
}
if ((once_action >= 0) && (once_action != TRIGGER_ONCE_NONE))
{
snprintf (str_once, sizeof (str_once),
" %s=1%s",
weechat_color (weechat_config_string (trigger_config_color_flag_once_action)),
weechat_color ("reset"));
}
weechat_printf_tags (
NULL, "no_trigger",
" %s%s%s: %s%s%s%s%s%s%s%s%s%s%s%s",
" %s%s%s: %s%s%s%s%s%s%s%s%s%s%s%s%s",
(enabled) ?
weechat_color (weechat_config_string (trigger_config_color_trigger)) :
weechat_color (weechat_config_string (trigger_config_color_trigger_disabled)),
@@ -209,7 +227,8 @@ trigger_command_display_trigger_internal (const char *name,
str_conditions,
str_regex,
str_command,
str_rc);
str_rc,
str_once);
}
}
@@ -234,6 +253,7 @@ trigger_command_display_trigger (struct t_trigger *trigger, int verbose)
trigger->commands_count,
trigger->commands,
weechat_config_integer (trigger->options[TRIGGER_OPTION_RETURN_CODE]),
weechat_config_integer (trigger->options[TRIGGER_OPTION_ONCE_ACTION]),
verbose);
}
@@ -306,6 +326,7 @@ trigger_command_list_default (int verbose)
commands_count,
commands,
trigger_search_return_code (trigger_config_default_list[i][7]),
trigger_search_once_action (trigger_config_default_list[i][8]),
verbose);
}
@@ -553,6 +574,15 @@ trigger_command_trigger (void *data, struct t_gui_buffer *buffer, int argc,
sargv[6]);
goto end;
}
if ((sargc > 7) && sargv[7][0]
&& (trigger_search_once_action (sargv[7]) < 0))
{
weechat_printf_tags (NULL, "no_trigger",
_("%s%s: invalid once action \"%s\""),
weechat_prefix ("error"), TRIGGER_PLUGIN_NAME,
sargv[7]);
goto end;
}
ptr_trigger = trigger_search (sargv[0]);
if (ptr_trigger)
{
@@ -596,7 +626,8 @@ trigger_command_trigger (void *data, struct t_gui_buffer *buffer, int argc,
(sargc > 3) ? sargv[3] : "", /* conditions */
(sargc > 4) ? sargv[4] : "", /* regex */
(sargc > 5) ? sargv[5] : "", /* command */
(sargc > 6) ? sargv[6] : ""); /* return code */
(sargc > 6) ? sargv[6] : "", /* return code */
(sargc > 7) ? sargv[7] : ""); /* once action */
if (ptr_trigger)
{
weechat_printf_tags (NULL, "no_trigger",
@@ -983,7 +1014,8 @@ trigger_command_trigger (void *data, struct t_gui_buffer *buffer, int argc,
trigger_config_default_list[j][4], /* conditions */
trigger_config_default_list[j][5], /* regex */
trigger_config_default_list[j][6], /* command */
trigger_config_default_list[j][7]); /* return code */
trigger_config_default_list[j][7], /* return code */
trigger_config_default_list[j][8]); /* once action */
weechat_printf_tags (NULL, "no_trigger",
_("Trigger \"%s\" restored"),
argv[i]);
@@ -1067,7 +1099,7 @@ trigger_command_init ()
N_("list|listfull|listdefault"
" || add|addoff|addreplace <name> <hook> [\"<arguments>\" "
"[\"<conditions>\" [\"<regex>\" [\"<command>\" "
"[\"<return_code>\"]]]]]"
"[\"<return_code>\" [\"<once_action>\"]]]]]]"
" || addinput [<hook>]"
" || input|output|recreate <name>"
" || set <name> <option> <value>"
@@ -1106,6 +1138,8 @@ trigger_command_init ()
" command: command to execute (many commands can be separated by "
"\";\"\n"
"return_code: return code in callback (ok (default), ok_eat, error)\n"
"once_action: action to take after execution (none (default), "
"disable, delete)\n"
" addinput: set input with default arguments to create a trigger\n"
" input: set input with the command used to create the trigger\n"
" output: send the command to create the trigger on the buffer\n"
@@ -1166,7 +1200,7 @@ trigger_command_init ()
"list|listfull|listdefault"
" || add|addoff|addreplace %(trigger_names) %(trigger_hooks) "
"%(trigger_hook_arguments) %(trigger_hook_conditions) "
"%(trigger_hook_regex) %(trigger_hook_command) %(trigger_hook_rc)"
"%(trigger_hook_regex) %(trigger_hook_command) %(trigger_hook_rc) %(trigger_once)"
" || addinput %(trigger_hooks)"
" || input|output|recreate %(trigger_names)"
" || set %(trigger_names) %(trigger_options)|name %(trigger_option_value)"