diff --git a/src/command/cmd_ac.c b/src/command/cmd_ac.c index c91bb447..386e8939 100644 --- a/src/command/cmd_ac.c +++ b/src/command/cmd_ac.c @@ -3765,9 +3765,8 @@ _correct_autocomplete(ProfWin *window, const char *const input, gboolean previou return NULL; } - GString *result_str = g_string_new("/correct \""); + GString *result_str = g_string_new("/correct "); g_string_append(result_str, last_message); - g_string_append(result_str, "\""); char *result = result_str->str; g_string_free(result_str, FALSE); diff --git a/src/command/cmd_defs.c b/src/command/cmd_defs.c index a7b7e49c..60fb262e 100644 --- a/src/command/cmd_defs.c +++ b/src/command/cmd_defs.c @@ -2382,7 +2382,7 @@ static struct cmd_t command_defs[] = }, { "/correct", - parse_args, 1, 1, NULL, + parse_args, 1, -1, NULL, CMD_NOSUBFUNCS CMD_MAINFUNC(cmd_correct) CMD_TAGS( @@ -2393,10 +2393,8 @@ static struct cmd_t command_defs[] = CMD_DESC( "Correct and resend the last message (XEP-0308).") CMD_ARGS( - { "\"message\"", "The corrected message. Multiple words need quotation marks."}) - CMD_EXAMPLES( - "/correct Profanity", - "/correct \"Profanity is the best\"") + { "message", "The corrected message."}) + CMD_NOEXAMPLES }, }; diff --git a/src/command/cmd_funcs.c b/src/command/cmd_funcs.c index cfb78cd4..40f5d8f4 100644 --- a/src/command/cmd_funcs.c +++ b/src/command/cmd_funcs.c @@ -8701,7 +8701,10 @@ cmd_correct(ProfWin *window, const char *const command, gchar **args) } // send message again, with replace flag - cl_ev_send_msg_correct(chatwin, args[0], FALSE, TRUE); + gchar *message = g_strjoinv(" ", args); + cl_ev_send_msg_correct(chatwin, message, FALSE, TRUE); + + free(message); return TRUE; } else if (window->type == WIN_MUC) { ProfMucWin *mucwin = (ProfMucWin*)window; @@ -8713,7 +8716,10 @@ cmd_correct(ProfWin *window, const char *const command, gchar **args) } // send message again, with replace flag - cl_ev_send_muc_msg_corrected(mucwin, args[0], FALSE, TRUE); + gchar *message = g_strjoinv(" ", args); + cl_ev_send_muc_msg_corrected(mucwin, message, FALSE, TRUE); + + free(message); return TRUE; } diff --git a/src/tools/parser.c b/src/tools/parser.c index aa739330..fb21571c 100644 --- a/src/tools/parser.c +++ b/src/tools/parser.c @@ -48,7 +48,7 @@ * * inp - The line of input * min - The minimum allowed number of arguments - * max - The maximum allowed number of arguments + * max - The maximum allowed number of arguments, -1 for infinite * * Returns - An NULL terminated array of strings representing the arguments * of the command, or NULL if the validation fails. @@ -135,7 +135,7 @@ parse_args(const char *const inp, int min, int max, gboolean *result) int num = g_slist_length(tokens) - 1; // if num args not valid return NULL - if ((num < min) || (num > max)) { + if ((num < min) || ((max != -1) && (num > max))) { g_slist_free_full(tokens, free); g_free(copy); *result = FALSE;