qemu-io: add command completion
Autocomplete qemu-io commands at the interactive prompt. Note this only completes command names and not their options. Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com> Signed-off-by: Kevin Wolf <kwolf@redhat.com>
This commit is contained in:
parent
0cf17e1817
commit
4694020d3c
@ -42,5 +42,8 @@ bool qemuio_command(BlockDriverState *bs, const char *cmd);
|
||||
|
||||
void qemuio_add_command(const cmdinfo_t *ci);
|
||||
int qemuio_command_usage(const cmdinfo_t *ci);
|
||||
void qemuio_complete_command(const char *input,
|
||||
void (*fn)(const char *cmd, void *opaque),
|
||||
void *opaque);
|
||||
|
||||
#endif /* QEMU_IO_H */
|
||||
|
@ -94,6 +94,21 @@ static const cmdinfo_t *find_command(const char *cmd)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/* Invoke fn() for commands with a matching prefix */
|
||||
void qemuio_complete_command(const char *input,
|
||||
void (*fn)(const char *cmd, void *opaque),
|
||||
void *opaque)
|
||||
{
|
||||
cmdinfo_t *ct;
|
||||
size_t input_len = strlen(input);
|
||||
|
||||
for (ct = cmdtab; ct < &cmdtab[ncmds]; ct++) {
|
||||
if (strncmp(input, ct->name, input_len) == 0) {
|
||||
fn(ct->name, opaque);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static char **breakline(char *input, int *count)
|
||||
{
|
||||
int c = 0;
|
||||
|
@ -236,9 +236,15 @@ static void readline_func(void *opaque, const char *str, void *readline_opaque)
|
||||
*line = g_strdup(str);
|
||||
}
|
||||
|
||||
static void completion_match(const char *cmd, void *opaque)
|
||||
{
|
||||
readline_add_completion(readline_state, cmd);
|
||||
}
|
||||
|
||||
static void readline_completion_func(void *opaque, const char *str)
|
||||
{
|
||||
/* No command or argument completion implemented yet */
|
||||
readline_set_completion_index(readline_state, strlen(str));
|
||||
qemuio_complete_command(str, completion_match, NULL);
|
||||
}
|
||||
|
||||
static char *fetchline_readline(void)
|
||||
|
Loading…
Reference in New Issue
Block a user