From b400be048619e84e72447a527bb25a3ba40bf607 Mon Sep 17 00:00:00 2001 From: Sebastien Helleu Date: Thu, 20 Feb 2014 11:20:23 +0100 Subject: [PATCH] trigger: add option "addreplace" in command /trigger (used by /trigger recreate) Now the command "/trigger recreate" does not delete the trigger any more. Instead the option "addreplace" is used in input, so the existing trigger is overwritten if the command is sent. --- src/plugins/trigger/trigger-command.c | 44 +++++++++++++++++++-------- 1 file changed, 31 insertions(+), 13 deletions(-) diff --git a/src/plugins/trigger/trigger-command.c b/src/plugins/trigger/trigger-command.c index b0babe00f..40e92e6ae 100644 --- a/src/plugins/trigger/trigger-command.c +++ b/src/plugins/trigger/trigger-command.c @@ -462,7 +462,8 @@ trigger_command_trigger (void *data, struct t_gui_buffer *buffer, int argc, /* add a trigger */ if ((weechat_strcasecmp (argv[1], "add") == 0) - || (weechat_strcasecmp (argv[1], "addoff") == 0)) + || (weechat_strcasecmp (argv[1], "addoff") == 0) + || (weechat_strcasecmp (argv[1], "addreplace") == 0)) { sargv = weechat_string_split_shell (argv_eol[2], &sargc); if (!sargv || (sargc < 2)) @@ -495,6 +496,24 @@ trigger_command_trigger (void *data, struct t_gui_buffer *buffer, int argc, weechat_prefix ("error"), sargv[6]); goto end; } + ptr_trigger = trigger_search (sargv[0]); + if (ptr_trigger) + { + if (weechat_strcasecmp (argv[1], "addreplace") == 0) + { + if (ptr_trigger) + trigger_free (ptr_trigger); + } + else + { + weechat_printf_tags (NULL, "no_trigger", + _("%sError: trigger \"%s\" already exists " + "(choose another name or use option " + "\"addreplace\" to overwrite it)"), + weechat_prefix ("error"), sargv[0]); + goto end; + } + } ptr_trigger = trigger_alloc (sargv[0]); if (!ptr_trigger) { @@ -505,7 +524,7 @@ trigger_command_trigger (void *data, struct t_gui_buffer *buffer, int argc, } ptr_trigger = trigger_new ( sargv[0], /* name */ - (weechat_strcasecmp (argv[1], "add") == 0) ? "on" : "off", + (weechat_strcasecmp (argv[1], "addoff") == 0) ? "off" : "on", sargv[1], /* hook */ (sargc > 2) ? sargv[2] : "", /* arguments */ (sargc > 3) ? sargv[3] : "", /* conditions */ @@ -586,7 +605,8 @@ trigger_command_trigger (void *data, struct t_gui_buffer *buffer, int argc, } rc = trigger_hook_default_rc[weechat_config_integer (ptr_trigger->options[TRIGGER_OPTION_HOOK])][0]; snprintf (input, sizeof (input), - "//trigger add %s %s \"%s\" \"%s\" \"%s\" \"%s\"%s%s%s", + "//trigger %s %s %s \"%s\" \"%s\" \"%s\" \"%s\"%s%s%s", + (weechat_strcasecmp (argv[1], "recreate") == 0) ? "addreplace" : "add", ptr_trigger->name, weechat_config_string (ptr_trigger->options[TRIGGER_OPTION_HOOK]), weechat_config_string (ptr_trigger->options[TRIGGER_OPTION_ARGUMENTS]), @@ -596,12 +616,6 @@ trigger_command_trigger (void *data, struct t_gui_buffer *buffer, int argc, (rc) ? " \"" : "", (rc) ? weechat_config_string (ptr_trigger->options[TRIGGER_OPTION_RETURN_CODE]) : "", (rc) ? "\"" : ""); - if (weechat_strcasecmp (argv[1], "recreate") == 0) - { - trigger_free (ptr_trigger); - weechat_printf_tags (NULL, "no_trigger", - _("Trigger \"%s\" removed"), argv[2]); - } if (weechat_strcasecmp (argv[1], "output") == 0) { weechat_command (buffer, input); @@ -913,8 +927,9 @@ trigger_command_init () "trigger", N_("manage triggers, the Swiss Army knife for WeeChat"), N_("list|listfull|listdefault" - " || add|addoff [\"\" [\"\" " - "[\"\" [\"\" [\"\"]]]]]" + " || add|addoff|addreplace [\"\" " + "[\"\" [\"\" [\"\" " + "[\"\"]]]]]" " || addinput []" " || input|output|recreate " " || set