From ef64262f8be55000e344444e5fc6888f33705209 Mon Sep 17 00:00:00 2001 From: Dmitry Podgorny Date: Sun, 11 Nov 2012 16:16:31 +0200 Subject: [PATCH] fix autocompletion for /sub command --- src/command.c | 24 +++++++++++++++++++++++- src/preferences.c | 24 ------------------------ src/preferences.h | 2 -- 3 files changed, 23 insertions(+), 27 deletions(-) diff --git a/src/command.c b/src/command.c index 5fc59249..44c4a6f1 100644 --- a/src/command.c +++ b/src/command.c @@ -70,6 +70,8 @@ static char *_cmd_help_complete(char *inp); static void _cmd_help_reset_completer(void); static char *_cmd_notify_complete(char *inp); static void _cmd_notify_reset_completer(void); +static char *_cmd_sub_complete(char *inp); +static void _cmd_sub_reset_completer(void); static void _cmd_complete_parameters(char *input, int *size); static void _notify_autocomplete(char *input, int *size); static void _parameter_autocomplete(char *input, int *size, char *command, @@ -468,6 +470,7 @@ static PAutocomplete commands_ac; static PAutocomplete who_ac; static PAutocomplete help_ac; static PAutocomplete notify_ac; +static PAutocomplete sub_ac; /* * Initialise command autocompleter and history @@ -491,6 +494,12 @@ cmd_init(void) p_autocomplete_add(notify_ac, strdup("typing")); p_autocomplete_add(notify_ac, strdup("remind")); + sub_ac = p_autocomplete_new(); + p_autocomplete_add(sub_ac, strdup("add")); + p_autocomplete_add(sub_ac, strdup("del")); + p_autocomplete_add(sub_ac, strdup("request")); + p_autocomplete_add(sub_ac, strdup("show")); + unsigned int i; for (i = 0; i < ARRAY_SIZE(main_commands); i++) { struct cmd_t *pcmd = main_commands+i; @@ -560,6 +569,7 @@ cmd_reset_autocomplete() prefs_reset_boolean_choice(); _cmd_help_reset_completer(); _cmd_notify_reset_completer(); + _cmd_sub_reset_completer(); _cmd_reset_command_completer(); _cmd_reset_who_completer(); } @@ -690,6 +700,18 @@ _cmd_notify_reset_completer(void) p_autocomplete_reset(notify_ac); } +static char * +_cmd_sub_complete(char *inp) +{ + return p_autocomplete_complete(sub_ac, inp); +} + +static void +_cmd_sub_reset_completer(void) +{ + p_autocomplete_reset(sub_ac); +} + static void _cmd_complete_parameters(char *input, int *size) { @@ -717,7 +739,7 @@ _cmd_complete_parameters(char *input, int *size) _parameter_autocomplete(input, size, "/connect", prefs_find_login); _parameter_autocomplete(input, size, "/sub", - prefs_autocomplete_sub_cmd); + _cmd_sub_complete); _parameter_autocomplete(input, size, "/help", _cmd_help_complete); _parameter_autocomplete(input, size, "/who", diff --git a/src/preferences.c b/src/preferences.c index 7bf72529..e6275bbc 100644 --- a/src/preferences.c +++ b/src/preferences.c @@ -42,7 +42,6 @@ static GKeyFile *prefs; static PAutocomplete login_ac; static PAutocomplete boolean_choice_ac; -static PAutocomplete sub_cmd_ac; struct colour_string_t { char *str; @@ -117,12 +116,6 @@ prefs_load(void) boolean_choice_ac = p_autocomplete_new(); p_autocomplete_add(boolean_choice_ac, strdup("on")); p_autocomplete_add(boolean_choice_ac, strdup("off")); - - sub_cmd_ac = p_autocomplete_new(); - p_autocomplete_add(sub_cmd_ac, strdup("add")); - p_autocomplete_add(sub_cmd_ac, strdup("del")); - p_autocomplete_add(sub_cmd_ac, strdup("request")); - p_autocomplete_add(sub_cmd_ac, strdup("show")); } void @@ -130,7 +123,6 @@ prefs_close(void) { p_autocomplete_clear(login_ac); p_autocomplete_clear(boolean_choice_ac); - p_autocomplete_clear(sub_cmd_ac); g_key_file_free(prefs); } @@ -230,22 +222,6 @@ prefs_reset_boolean_choice(void) p_autocomplete_reset(boolean_choice_ac); } -char * -prefs_autocomplete_sub_cmd(char *prefix) -{ - char *result; - result = p_autocomplete_complete(sub_cmd_ac, prefix); - /* TODO: fix the problem with ac->last_found instead of this hack */ - prefs_reset_sub_cmd(); - return result; -} - -void -prefs_reset_sub_cmd(void) -{ - p_autocomplete_reset(sub_cmd_ac); -} - gboolean prefs_get_beep(void) { diff --git a/src/preferences.h b/src/preferences.h index 3671e35e..e2975c51 100644 --- a/src/preferences.h +++ b/src/preferences.h @@ -41,8 +41,6 @@ char * prefs_find_login(char *prefix); void prefs_reset_login_search(void); char * prefs_autocomplete_boolean_choice(char *prefix); void prefs_reset_boolean_choice(void); -char * prefs_autocomplete_sub_cmd(char *prefix); -void prefs_reset_sub_cmd(void); gboolean prefs_get_beep(void); void prefs_set_beep(gboolean value);