diff options
Diffstat (limited to 'src/command/command.c')
-rw-r--r-- | src/command/command.c | 46 |
1 files changed, 43 insertions, 3 deletions
diff --git a/src/command/command.c b/src/command/command.c index a65084ce..68c2c6dc 100644 --- a/src/command/command.c +++ b/src/command/command.c @@ -68,6 +68,7 @@ static char * _bookmark_autocomplete(char *input, int *size); static char * _otr_autocomplete(char *input, int *size); static char * _connect_autocomplete(char *input, int *size); static char * _statuses_autocomplete(char *input, int *size); +static char * _alias_autocomplete(char *input, int *size); GHashTable *commands = NULL; @@ -877,6 +878,7 @@ static Autocomplete connect_property_ac; static Autocomplete statuses_ac; static Autocomplete statuses_cons_chat_ac; static Autocomplete alias_ac; +static Autocomplete aliases_ac; /* * Initialise command autocompleter and history @@ -887,6 +889,7 @@ cmd_init(void) log_info("Initialising commands"); commands_ac = autocomplete_new(); + aliases_ac = autocomplete_new(); help_ac = autocomplete_new(); autocomplete_add(help_ac, "commands"); @@ -922,6 +925,7 @@ cmd_init(void) GString *ac_alias = g_string_new("/"); g_string_append(ac_alias, alias->name); autocomplete_add(commands_ac, ac_alias->str); + autocomplete_add(aliases_ac, alias->name); g_string_free(ac_alias, TRUE); curr = g_list_next(curr); } @@ -1113,6 +1117,7 @@ cmd_uninit(void) autocomplete_free(statuses_ac); autocomplete_free(statuses_cons_chat_ac); autocomplete_free(alias_ac); + autocomplete_free(aliases_ac); } void @@ -1131,6 +1136,22 @@ cmd_autocomplete_remove(char *value) } } +void +cmd_alias_add(char *value) +{ + if (aliases_ac != NULL) { + autocomplete_add(aliases_ac, value); + } +} + +void +cmd_alias_remove(char *value) +{ + if (aliases_ac != NULL) { + autocomplete_remove(aliases_ac, value); + } +} + // Command autocompletion functions void cmd_autocomplete(char *input, int *size) @@ -1208,6 +1229,7 @@ cmd_reset_autocomplete() autocomplete_reset(statuses_ac); autocomplete_reset(statuses_cons_chat_ac); autocomplete_reset(alias_ac); + autocomplete_reset(aliases_ac); bookmark_autocomplete_reset(); } @@ -1455,8 +1477,8 @@ _cmd_complete_parameters(char *input, int *size) return; } - gchar *cmds[] = { "/help", "/prefs", "/log", "/disco", "/close", "/wins", "/alias" }; - Autocomplete completers[] = { help_ac, prefs_ac, log_ac, disco_ac, close_ac, wins_ac, alias_ac }; + gchar *cmds[] = { "/help", "/prefs", "/log", "/disco", "/close", "/wins" }; + Autocomplete completers[] = { help_ac, prefs_ac, log_ac, disco_ac, close_ac, wins_ac }; for (i = 0; i < ARRAY_SIZE(cmds); i++) { result = autocomplete_param_with_ac(input, size, cmds[i], completers[i]); @@ -1471,7 +1493,7 @@ _cmd_complete_parameters(char *input, int *size) _autoaway_autocomplete, _titlebar_autocomplete, _theme_autocomplete, _account_autocomplete, _roster_autocomplete, _group_autocomplete, _bookmark_autocomplete, _autoconnect_autocomplete, _otr_autocomplete, - _connect_autocomplete, _statuses_autocomplete }; + _connect_autocomplete, _statuses_autocomplete, _alias_autocomplete }; for (i = 0; i < ARRAY_SIZE(acs); i++) { result = acs[i](input, size); @@ -1777,6 +1799,24 @@ _statuses_autocomplete(char *input, int *size) } static char * +_alias_autocomplete(char *input, int *size) +{ + char *result = NULL; + + result = autocomplete_param_with_ac(input, size, "/alias remove", aliases_ac); + if (result != NULL) { + return result; + } + + result = autocomplete_param_with_ac(input, size, "/alias", alias_ac); + if (result != NULL) { + return result; + } + + return NULL; +} + +static char * _connect_autocomplete(char *input, int *size) { char *result = NULL; |