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);
|
void qemuio_add_command(const cmdinfo_t *ci);
|
||||||
int qemuio_command_usage(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 */
|
#endif /* QEMU_IO_H */
|
||||||
|
@ -94,6 +94,21 @@ static const cmdinfo_t *find_command(const char *cmd)
|
|||||||
return NULL;
|
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)
|
static char **breakline(char *input, int *count)
|
||||||
{
|
{
|
||||||
int c = 0;
|
int c = 0;
|
||||||
|
@ -236,9 +236,15 @@ static void readline_func(void *opaque, const char *str, void *readline_opaque)
|
|||||||
*line = g_strdup(str);
|
*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)
|
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)
|
static char *fetchline_readline(void)
|
||||||
|
Loading…
Reference in New Issue
Block a user