From caec298a482ed93140401185bf866edacad35742 Mon Sep 17 00:00:00 2001 From: Benjamin Franzke Date: Tue, 27 Sep 2011 06:45:43 +0200 Subject: Add support for command shortcuts So that distinct substrings of commands, can be used as shortcuts. --- src/commands.c | 19 +++++++++++++++++++ src/commands.h | 3 +++ src/io.c | 5 ++++- 3 files changed, 26 insertions(+), 1 deletion(-) diff --git a/src/commands.c b/src/commands.c index 4683068..3e4e7aa 100644 --- a/src/commands.c +++ b/src/commands.c @@ -3,6 +3,7 @@ #include "cmumble.h" #include +#include #include #include @@ -67,6 +68,24 @@ static const struct cmumble_command commands[] = { { NULL, NULL , NULL} }; +const char * +cmumble_command_complete(const char *text) +{ + int i = 0; + int found_index = -1; + + do { + if (strncmp(commands[i].name, text, strlen(text)) == 0) { + /* Found at least two matches, so do not complete. */ + if (found_index >= 0) + return text; + found_index = i; + } + } while (commands[++i].name); + + return found_index >= 0 ? commands[found_index].name : text; +} + void cmumble_commands_init(struct cmumble_context *ctx) { diff --git a/src/commands.h b/src/commands.h index c95f238..1c56860 100644 --- a/src/commands.h +++ b/src/commands.h @@ -12,4 +12,7 @@ struct cmumble_command { void cmumble_commands_init(struct cmumble_context *ctx); +const char * +cmumble_command_complete(const char *text); + #endif /* _COMMANDS_H_ */ diff --git a/src/io.c b/src/io.c index 7c69447..1d4d4ec 100644 --- a/src/io.c +++ b/src/io.c @@ -66,6 +66,7 @@ static void process_line(char *line) { struct cmumble_context *ctx = global_rl_user_data; + const char *cmd; int i; g_assert(global_rl_user_data); @@ -80,8 +81,10 @@ process_line(char *line) return; } + cmd = cmumble_command_complete(line); + for (i = 0; ctx->commands[i].name; ++i) { - if (strcmp(line, ctx->commands[i].name) == 0) { + if (strcmp(cmd, ctx->commands[i].name) == 0) { ctx->commands[i].callback(ctx); break; } -- cgit