about summary refs log tree commit diff stats
path: root/src
diff options
context:
space:
mode:
authorDmitry Podgorny <pasis.ua@gmail.com>2012-11-11 16:16:31 +0200
committerDmitry Podgorny <pasis.ua@gmail.com>2012-11-11 16:16:31 +0200
commitef64262f8be55000e344444e5fc6888f33705209 (patch)
tree9518909f56c621cea676842402e91e2f8341776f /src
parentc3b0e80432a3fe8cb64276cc8a1337fe61986428 (diff)
downloadprofani-tty-ef64262f8be55000e344444e5fc6888f33705209.tar.gz
fix autocompletion for /sub command
Diffstat (limited to 'src')
-rw-r--r--src/command.c24
-rw-r--r--src/preferences.c24
-rw-r--r--src/preferences.h2
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);