Signed-off-by: Hani Benhabiles <h...@linux.com> --- hmp-commands.hx | 1 + hmp.h | 1 + monitor.c | 24 +++++++++++++++++------- 3 files changed, 19 insertions(+), 7 deletions(-)
diff --git a/hmp-commands.hx b/hmp-commands.hx index b3f45d6..ba13997 100644 --- a/hmp-commands.hx +++ b/hmp-commands.hx @@ -15,6 +15,7 @@ ETEXI .params = "[cmd]", .help = "show the help", .mhandler.cmd = do_help_cmd, + .command_completion = help_completion, }, STEXI diff --git a/hmp.h b/hmp.h index 12e21e7..55f78fa 100644 --- a/hmp.h +++ b/hmp.h @@ -98,5 +98,6 @@ void object_del_completion(ReadLineState *rs, int nb_args, const char *str); void device_add_completion(ReadLineState *rs, int nb_args, const char *str); void device_del_completion(ReadLineState *rs, int nb_args, const char *str); void sendkey_completion(ReadLineState *rs, int nb_args, const char *str); +void help_completion(ReadLineState *rs, int nb_args, const char *str); #endif diff --git a/monitor.c b/monitor.c index 7edfcee..acbbaf8 100644 --- a/monitor.c +++ b/monitor.c @@ -4407,6 +4407,23 @@ void sendkey_completion(ReadLineState *rs, int nb_args, const char *str) } } +void help_completion(ReadLineState *rs, int nb_args, const char *str) +{ + int i; + size_t len; + + if (nb_args != 2) { + return; + } + len = strlen(str); + readline_set_completion_index(rs, len); + for (i = 0; mon_cmds[i].name; i++) { + if (!strncmp(str, mon_cmds[i].name, len)) { + readline_add_completion(rs, mon_cmds[i].name); + } + } +} + static void monitor_find_completion_by_table(Monitor *mon, const mon_cmd_t *cmd_table, char **args, @@ -4473,13 +4490,6 @@ static void monitor_find_completion_by_table(Monitor *mon, readline_set_completion_index(mon->rs, strlen(str)); bdrv_iterate(block_completion_it, &mbs); break; - case 's': - case 'S': - if (!strcmp(cmd->name, "help|?")) { - monitor_find_completion_by_table(mon, cmd_table, - &args[1], nb_args - 1); - } - break; default: break; } -- 1.8.3.2