mirror of
https://github.com/weechat/weechat.git
synced 2026-06-28 13:56:37 +02:00
trigger: add hook config
This commit is contained in:
@@ -755,6 +755,54 @@ end:
|
||||
return rc;
|
||||
}
|
||||
|
||||
/*
|
||||
* Callback for a config hooked.
|
||||
*/
|
||||
|
||||
int
|
||||
trigger_callback_config_cb (void *data, const char *option, const char *value)
|
||||
{
|
||||
struct t_trigger *trigger;
|
||||
struct t_hashtable *extra_vars;
|
||||
int rc;
|
||||
|
||||
/* get trigger pointer, return immediately if not found or trigger running */
|
||||
trigger = (struct t_trigger *)data;
|
||||
if (!trigger || trigger->hook_running)
|
||||
return WEECHAT_RC_OK;
|
||||
|
||||
trigger->hook_count_cb++;
|
||||
trigger->hook_running = 1;
|
||||
|
||||
extra_vars = NULL;
|
||||
|
||||
rc = trigger_return_code[weechat_config_integer (trigger->options[TRIGGER_OPTION_RETURN_CODE])];
|
||||
|
||||
/* create hashtable */
|
||||
extra_vars = weechat_hashtable_new (32,
|
||||
WEECHAT_HASHTABLE_STRING,
|
||||
WEECHAT_HASHTABLE_STRING,
|
||||
NULL,
|
||||
NULL);
|
||||
if (!extra_vars)
|
||||
goto end;
|
||||
|
||||
/* add data in hashtable used for conditions/replace/command */
|
||||
weechat_hashtable_set (extra_vars, "tg_option", option);
|
||||
weechat_hashtable_set (extra_vars, "tg_value", value);
|
||||
|
||||
/* execute the trigger (conditions, regex, command) */
|
||||
trigger_callback_execute (trigger, NULL, NULL, extra_vars);
|
||||
|
||||
end:
|
||||
if (extra_vars)
|
||||
weechat_hashtable_free (extra_vars);
|
||||
|
||||
trigger->hook_running = 0;
|
||||
|
||||
return rc;
|
||||
}
|
||||
|
||||
/*
|
||||
* Initializes trigger callback.
|
||||
*/
|
||||
|
||||
@@ -36,6 +36,8 @@ extern int trigger_callback_command_run_cb (void *data,
|
||||
struct t_gui_buffer *buffer,
|
||||
const char *command);
|
||||
extern int trigger_callback_timer_cb (void *data, int remaining_calls);
|
||||
extern int trigger_callback_config_cb (void *data, const char *option,
|
||||
const char *value);
|
||||
extern void trigger_callback_init ();
|
||||
extern void trigger_callback_end ();
|
||||
|
||||
|
||||
@@ -713,7 +713,8 @@ trigger_command_init ()
|
||||
"listdefault: list default triggers\n"
|
||||
" add: add a trigger\n"
|
||||
" name: name of trigger\n"
|
||||
" hook: signal, hsignal, modifier, print, command_run, timer\n"
|
||||
" hook: signal, hsignal, modifier, print, command_run, timer, "
|
||||
"config\n"
|
||||
" arguments: arguments for the hook, depending on hook (separated "
|
||||
"by semicolons):\n"
|
||||
" signal: name(s) of signal\n"
|
||||
@@ -722,6 +723,7 @@ trigger_command_init ()
|
||||
" print: buffer, tags, message, strip_colors\n"
|
||||
" command_run: command\n"
|
||||
" timer: interval, align_second, max_calls\n"
|
||||
" config: name of option\n"
|
||||
" conditions: evaluated conditions for the trigger\n"
|
||||
" regex: one or more regular expressions to replace strings "
|
||||
"in variables\n"
|
||||
|
||||
@@ -236,7 +236,7 @@ trigger_config_create_option (const char *trigger_name, int index_option,
|
||||
trigger_config_file, trigger_config_section_trigger,
|
||||
option_name, "integer",
|
||||
N_("type of hook used"),
|
||||
"signal|hsignal|modifier|print|command_run|timer",
|
||||
trigger_hook_option_values,
|
||||
0, 0, value, NULL, 0,
|
||||
NULL, NULL, &trigger_config_change_hook, NULL, NULL, NULL);
|
||||
break;
|
||||
|
||||
@@ -48,21 +48,25 @@ char *trigger_option_default[TRIGGER_NUM_OPTIONS] =
|
||||
{ "on", "signal", "", "", "", "", "ok" };
|
||||
|
||||
char *trigger_hook_type_string[TRIGGER_NUM_HOOK_TYPES] =
|
||||
{ "signal", "hsignal", "modifier", "print", "command_run", "timer" };
|
||||
{ "signal", "hsignal", "modifier", "print", "command_run", "timer", "config" };
|
||||
char *trigger_hook_option_values =
|
||||
"signal|hsignal|modifier|print|command_run|timer|config";
|
||||
char *trigger_hook_default_arguments[TRIGGER_NUM_HOOK_TYPES] =
|
||||
{ "xxx", "xxx", "xxx", "", "/cmd", "60000;0;0" };
|
||||
{ "xxx", "xxx", "xxx", "", "/cmd", "60000;0;0", "xxx" };
|
||||
char *trigger_hook_default_conditions[TRIGGER_NUM_HOOK_TYPES] =
|
||||
{ "${...}", "${...}", "${...}", "${...}", "${...}", "${...}" };
|
||||
{ "${...}", "${...}", "${...}", "${...}", "${...}", "${...}", "${...}" };
|
||||
char *trigger_hook_default_regex[TRIGGER_NUM_HOOK_TYPES] =
|
||||
{ "/abc/def", "/abc/def", "/abc/def", "/abc/def", "/abc/def", "/abc/def" };
|
||||
{ "/abc/def", "/abc/def", "/abc/def", "/abc/def", "/abc/def", "/abc/def",
|
||||
"/abc/def" };
|
||||
char *trigger_hook_default_command[TRIGGER_NUM_HOOK_TYPES] =
|
||||
{ "/cmd", "/cmd", "/cmd", "/cmd", "/cmd", "/cmd" };
|
||||
{ "/cmd", "/cmd", "/cmd", "/cmd", "/cmd", "/cmd", "/cmd" };
|
||||
char *trigger_hook_default_rc[TRIGGER_NUM_HOOK_TYPES] =
|
||||
{ "ok,ok_eat,error", "ok,ok_eat,error", "", "ok,error", "ok,ok_eat,error",
|
||||
"ok" };
|
||||
"ok", "ok" };
|
||||
|
||||
char *trigger_hook_regex_default_var[TRIGGER_NUM_HOOK_TYPES] =
|
||||
{ "tg_signal_data", "", "tg_string", "tg_message", "tg_command", "" };
|
||||
{ "tg_signal_data", "", "tg_string", "tg_message", "tg_command", "",
|
||||
"tg_value" };
|
||||
|
||||
char *trigger_return_code_string[TRIGGER_NUM_RETURN_CODES] =
|
||||
{ "ok", "ok_eat", "error" };
|
||||
@@ -367,6 +371,22 @@ trigger_hook (struct t_trigger *trigger)
|
||||
}
|
||||
}
|
||||
break;
|
||||
case TRIGGER_HOOK_CONFIG:
|
||||
if (argv && (argc >= 1))
|
||||
{
|
||||
trigger->hooks = malloc (argc * sizeof (trigger->hooks[0]));
|
||||
if (trigger->hooks)
|
||||
{
|
||||
trigger->hooks_count = argc;
|
||||
for (i = 0; i < argc; i++)
|
||||
{
|
||||
trigger->hooks[i] = weechat_hook_config (argv[i],
|
||||
&trigger_callback_config_cb,
|
||||
trigger);
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
if (!trigger->hooks)
|
||||
|
||||
@@ -46,6 +46,7 @@ enum t_trigger_hook_type
|
||||
TRIGGER_HOOK_PRINT,
|
||||
TRIGGER_HOOK_COMMAND_RUN,
|
||||
TRIGGER_HOOK_TIMER,
|
||||
TRIGGER_HOOK_CONFIG,
|
||||
/* number of hook types */
|
||||
TRIGGER_NUM_HOOK_TYPES,
|
||||
};
|
||||
@@ -101,6 +102,7 @@ extern struct t_weechat_plugin *weechat_trigger_plugin;
|
||||
extern char *trigger_option_string[];
|
||||
extern char *trigger_option_default[];
|
||||
extern char *trigger_hook_type_string[];
|
||||
extern char *trigger_hook_option_values;
|
||||
extern char *trigger_hook_default_arguments[];
|
||||
extern char *trigger_hook_default_conditions[];
|
||||
extern char *trigger_hook_default_regex[];
|
||||
|
||||
Reference in New Issue
Block a user