diff options
author | Michael Vetter <jubalh@iodoru.org> | 2020-07-23 09:40:22 +0200 |
---|---|---|
committer | Michael Vetter <jubalh@iodoru.org> | 2020-07-23 09:40:22 +0200 |
commit | 8c0c5cb28ce74d4eb66a3161dadaa07068b15383 (patch) | |
tree | 12c3b8c35efa7a68b5875f38fbcfd07077ee5c1f /src | |
parent | a5ca65453e04a2af2b01c1c0bfb65c9a5cc1563e (diff) | |
download | profani-tty-8c0c5cb28ce74d4eb66a3161dadaa07068b15383.tar.gz |
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
Diffstat (limited to 'src')
-rw-r--r-- | src/command/cmd_ac.c | 1 | ||||
-rw-r--r-- | src/command/cmd_defs.c | 2 | ||||
-rw-r--r-- | src/tools/parser.c | 27 | ||||
-rw-r--r-- | 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); |