gatttool: Add command completion for interactive mode

This commit is contained in:
Jefferson Delfes 2012-02-29 16:17:31 -04:00 committed by Johan Hedberg
parent 7b797f88f8
commit 466360ddc6

View File

@ -800,6 +800,33 @@ static gboolean prompt_read(GIOChannel *chan, GIOCondition cond,
return TRUE;
}
static char *completion_generator(const char *text, int state)
{
static int index = 0, len = 0;
const char *cmd = NULL;
if (state == 0) {
index = 0;
len = strlen(text);
}
while ((cmd = commands[index].cmd) != NULL) {
index++;
if (strncmp(cmd, text, len) == 0)
return strdup(cmd);
}
return NULL;
}
static char **commands_completion(const char *text, int start, int end)
{
if (start == 0)
return rl_completion_matches(text, &completion_generator);
else
return NULL;
}
int interactive(const gchar *src, const gchar *dst, int psm)
{
GIOChannel *pchan;
@ -820,6 +847,7 @@ int interactive(const gchar *src, const gchar *dst, int psm)
events = G_IO_IN | G_IO_ERR | G_IO_HUP | G_IO_NVAL;
g_io_add_watch(pchan, events, prompt_read, NULL);
rl_attempted_completion_function = commands_completion;
rl_callback_handler_install(get_prompt(), parse_line);
g_main_loop_run(event_loop);