about summary refs log tree commit diff stats
path: root/src/command/command.c
diff options
context:
space:
mode:
authorJames Booth <boothj5@gmail.com>2013-12-10 22:13:21 +0000
committerJames Booth <boothj5@gmail.com>2013-12-10 22:13:21 +0000
commit06367723d7b97abe1958944b651cdbbf9b5c856a (patch)
tree38ebab1433526f1defd4e593423a995f7e011034 /src/command/command.c
parent5eb0cf9f353436afe4fcdc25130290a1cbb77909 (diff)
parent2fe258ad1bba79606289e49d3a16983d2a32db2e (diff)
downloadprofani-tty-06367723d7b97abe1958944b651cdbbf9b5c856a.tar.gz
Merge branch 'master' into otr
Diffstat (limited to 'src/command/command.c')
-rw-r--r--src/command/command.c49
1 files changed, 49 insertions, 0 deletions
diff --git a/src/command/command.c b/src/command/command.c
index 9a6af5a3..dd270c70 100644
--- a/src/command/command.c
+++ b/src/command/command.c
@@ -905,6 +905,8 @@ static Autocomplete titlebar_ac;
 static Autocomplete theme_ac;
 static Autocomplete theme_load_ac;
 static Autocomplete account_ac;
+static Autocomplete account_set_ac;
+static Autocomplete account_clear_ac;
 static Autocomplete disco_ac;
 static Autocomplete close_ac;
 static Autocomplete wins_ac;
@@ -1010,6 +1012,23 @@ cmd_init(void)
     autocomplete_add(account_ac, "set");
     autocomplete_add(account_ac, "clear");
 
+    account_set_ac = autocomplete_new();
+    autocomplete_add(account_set_ac, "jid");
+    autocomplete_add(account_set_ac, "server");
+    autocomplete_add(account_set_ac, "status");
+    autocomplete_add(account_set_ac, "online");
+    autocomplete_add(account_set_ac, "chat");
+    autocomplete_add(account_set_ac, "away");
+    autocomplete_add(account_set_ac, "xa");
+    autocomplete_add(account_set_ac, "dnd");
+    autocomplete_add(account_set_ac, "resource");
+    autocomplete_add(account_set_ac, "password");
+    autocomplete_add(account_set_ac, "muc");
+    autocomplete_add(account_set_ac, "nick");
+
+    account_clear_ac = autocomplete_new();
+    autocomplete_add(account_clear_ac, "password");
+
     close_ac = autocomplete_new();
     autocomplete_add(close_ac, "read");
     autocomplete_add(close_ac, "all");
@@ -1068,6 +1087,8 @@ cmd_close(void)
         autocomplete_free(theme_load_ac);
     }
     autocomplete_free(account_ac);
+    autocomplete_free(account_set_ac);
+    autocomplete_free(account_clear_ac);
     autocomplete_free(disco_ac);
     autocomplete_free(close_ac);
     autocomplete_free(wins_ac);
@@ -1139,6 +1160,8 @@ cmd_reset_autocomplete()
         theme_load_ac = NULL;
     }
     autocomplete_reset(account_ac);
+    autocomplete_reset(account_set_ac);
+    autocomplete_reset(account_clear_ac);
     autocomplete_reset(disco_ac);
     autocomplete_reset(close_ac);
     autocomplete_reset(wins_ac);
@@ -3960,6 +3983,32 @@ static char *
 _account_autocomplete(char *input, int *size)
 {
     char *result = NULL;
+
+    input[*size] = '\0';
+    gchar **args = parse_args(input, 3, 3);
+
+    if ((strncmp(input, "/account set", 12) == 0) && (args != NULL)) {
+        GString *beginning = g_string_new("/account set ");
+        g_string_append(beginning, args[1]);
+        result = autocomplete_param_with_ac(input, size, beginning->str, account_set_ac);
+        g_string_free(beginning, TRUE);
+        if (result != NULL) {
+            return result;
+        }
+    }
+
+    if ((strncmp(input, "/account clear", 14) == 0) && (args != NULL)) {
+        GString *beginning = g_string_new("/account clear ");
+        g_string_append(beginning, args[1]);
+        result = autocomplete_param_with_ac(input, size, beginning->str, account_clear_ac);
+        g_string_free(beginning, TRUE);
+        if (result != NULL) {
+            return result;
+        }
+    }
+
+    g_strfreev(args);
+
     int i = 0;
     gchar *account_choice[] = { "/account set", "/account show", "/account enable",
         "/account disable", "/account rename", "/account clear" };