From 8c0c5cb28ce74d4eb66a3161dadaa07068b15383 Mon Sep 17 00:00:00 2001 From: Michael Vetter Date: Thu, 23 Jul 2020 09:40:22 +0200 Subject: [PATCH] Fix /correct quotation marks usage Add new `parse_args_as_one()` function to just use everything after the command as the argument. Fix https://github.com/profanity-im/profanity/issues/1404 --- src/command/cmd_ac.c | 1 - src/command/cmd_defs.c | 2 +- src/tools/parser.c | 27 +++++++++++++++++++++++++++ src/tools/parser.h | 1 + 4 files changed, 29 insertions(+), 2 deletions(-) diff --git a/src/command/cmd_ac.c b/src/command/cmd_ac.c index cf148fc4..52535f23 100644 --- a/src/command/cmd_ac.c +++ b/src/command/cmd_ac.c @@ -4189,7 +4189,6 @@ _lastactivity_autocomplete(ProfWin* window, const char* const input, gboolean pr if (result) { return result; } - } return NULL; diff --git a/src/command/cmd_defs.c b/src/command/cmd_defs.c index e0e60876..8bfd33d3 100644 --- a/src/command/cmd_defs.c +++ b/src/command/cmd_defs.c @@ -2443,7 +2443,7 @@ static struct cmd_t command_defs[] = { }, { "/correct", - parse_args_with_freetext, 1, 1, NULL, + parse_args_as_one, 1, 1, NULL, CMD_NOSUBFUNCS CMD_MAINFUNC(cmd_correct) CMD_TAGS( diff --git a/src/tools/parser.c b/src/tools/parser.c index 7365f1a3..beb61383 100644 --- a/src/tools/parser.c +++ b/src/tools/parser.c @@ -222,6 +222,33 @@ parse_args_with_freetext(const char* const inp, int min, int max, gboolean* resu return _parse_args_helper(inp, min, max, result, TRUE); } +/* + * Will just take everything after the first space as the argument. + * Used for `/correct` so that we also include quotation marks. + */ +gchar** +parse_args_as_one(const char* const inp, int min, int max, gboolean* result) +{ + gchar** args = g_malloc0(2 * sizeof(*args)); + int length = g_utf8_strlen(inp, -1); + gchar* space = g_utf8_strchr(inp, length, ' '); + if (space) { + int sub_length = g_utf8_strlen(space, -1); + if (sub_length > 1) { + args[0] = g_strdup(space + 1); + *result = TRUE; + return args; + } else { + g_free(args); + } + } else { + g_free(args); + } + + *result = FALSE; + return NULL; +} + int count_tokens(const char* const string) { diff --git a/src/tools/parser.h b/src/tools/parser.h index d1b6f7bf..054ab2b7 100644 --- a/src/tools/parser.h +++ b/src/tools/parser.h @@ -40,6 +40,7 @@ gchar** parse_args(const char* const inp, int min, int max, gboolean* result); gchar** parse_args_with_freetext(const char* const inp, int min, int max, gboolean* result); +gchar** parse_args_as_one(const char* const inp, int min, int max, gboolean* result); int count_tokens(const char* const string); char* get_start(const char* const string, int tokens); GHashTable* parse_options(gchar** args, gchar** keys, gboolean* res);