]> git.ipfire.org Git - thirdparty/hostap.git/commitdiff
wpa_cli: Improved command parameter tab completion
authorJouni Malinen <j@w1.fi>
Fri, 12 Mar 2010 17:43:15 +0000 (19:43 +0200)
committerJouni Malinen <j@w1.fi>
Fri, 12 Mar 2010 17:43:15 +0000 (19:43 +0200)
wpa_supplicant/wpa_cli.c

index 924ad96a163523da73c702e81bd04e286a8b74a8..75582d853fbab1ccf0bc17387dae231e0dfcadf1 100644 (file)
@@ -1905,14 +1905,60 @@ static char * wpa_cli_cmd_gen(const char *text, int state)
 
 static char * wpa_cli_dummy_gen(const char *text, int state)
 {
+       int i;
+
+       for (i = 0; wpa_cli_commands[i].cmd; i++) {
+               const char *cmd = wpa_cli_commands[i].cmd;
+               size_t len = os_strlen(cmd);
+               if (os_strncasecmp(rl_line_buffer, cmd, len) == 0 &&
+                   rl_line_buffer[len] == ' ') {
+                       printf("\n%s\n", wpa_cli_commands[i].usage);
+                       rl_on_new_line();
+                       rl_redisplay();
+                       break;
+               }
+       }
+
+       rl_attempted_completion_over = 1;
+       return NULL;
+}
+
+
+static char * wpa_cli_status_gen(const char *text, int state)
+{
+       static int i, len;
+       char *options[] = {
+               "verbose", NULL
+       };
+       char *t;
+
+       if (state == 0) {
+               i = 0;
+               len = os_strlen(text);
+       }
+
+       while ((t = options[i])) {
+               i++;
+               if (os_strncasecmp(t, text, len) == 0)
+                       return strdup(t);
+       }
+
+       rl_attempted_completion_over = 1;
        return NULL;
 }
 
 
 static char ** wpa_cli_completion(const char *text, int start, int end)
 {
-       return rl_completion_matches(text, start == 0 ?
-                                    wpa_cli_cmd_gen : wpa_cli_dummy_gen);
+       char * (*func)(const char *text, int state);
+
+       if (start == 0)
+               func = wpa_cli_cmd_gen;
+       else if (os_strncasecmp(rl_line_buffer, "status ", 7) == 0)
+               func = wpa_cli_status_gen;
+       else
+               func = wpa_cli_dummy_gen;
+       return rl_completion_matches(text, func);
 }
 #endif /* CONFIG_READLINE */