All of lore.kernel.org
 help / color / mirror / Atom feed
From: Wenchao Xia <xiawenc@linux.vnet.ibm.com>
To: Luiz Capitulino <lcapitulino@redhat.com>
Cc: pbonzini@redhat.com, qemu-devel@nongnu.org, armbru@redhat.com
Subject: Re: [Qemu-devel] [PATCH V2 5/7] monitor: support sub commands in auto completion
Date: Thu, 27 Jun 2013 09:43:28 +0800	[thread overview]
Message-ID: <51CB98C0.2080602@linux.vnet.ibm.com> (raw)
In-Reply-To: <20130626120323.05c279af@redhat.com>

于 2013-6-27 0:03, Luiz Capitulino 写道:
> On Wed, 26 Jun 2013 12:03:39 +0800
> Wenchao Xia <xiawenc@linux.vnet.ibm.com> wrote:
>
>> 于 2013-6-24 20:48, Wenchao Xia 写道:
>>> This patch allow auot completion work normal in sub command case,
>>> "info block [DEVICE]" can auto complete now, by re-enter the completion
>>> function. Also, original "info" is treated as a special case, now it is
>>> treated as a sub command group, global variable info_cmds is not used
>>> any more.
>>>
>>> "help" command is still treated as a special case, since it is not a sub
>>> command group but want to auto complete command in root command table.
>>>
>>> Signed-off-by: Wenchao Xia <xiawenc@linux.vnet.ibm.com>
>>> ---
>>>    monitor.c |   36 ++++++++++++++++++++++++------------
>>>    1 files changed, 24 insertions(+), 12 deletions(-)
>>>
>>> diff --git a/monitor.c b/monitor.c
>>> index aa641de..f364a0d 100644
>>> --- a/monitor.c
>>> +++ b/monitor.c
>>> @@ -4179,10 +4179,11 @@ static const char *next_arg_type(const char *typestr)
>>>        return (p != NULL ? ++p : typestr);
>>>    }
>>>
>>> -static void monitor_find_completion(Monitor *mon,
>>> -                                    const char *cmdline)
>>> +static void monitor_find_completion_by_table(Monitor *mon,
>>> +                                             const mon_cmd_t *cmd_table,
>>> +                                             const char *cmdline)
>>>    {
>>> -    const char *cmdname;
>>> +    const char *cmdname, *p;
>>>        char *args[MAX_ARGS];
>>>        int nb_args, i, len;
>>>        const char *ptype, *str;
>>> @@ -4212,12 +4213,12 @@ static void monitor_find_completion(Monitor *mon,
>>>            else
>>>                cmdname = args[0];
>>>            readline_set_completion_index(mon->rs, strlen(cmdname));
>>> -        for (cmd = mon->cmd_table; cmd->name != NULL; cmd++) {
>>> +        for (cmd = cmd_table; cmd->name != NULL; cmd++) {
>>>                cmd_completion(mon, cmdname, cmd->name);
>>>            }
>>>        } else {
>>>            /* find the command */
>>> -        for (cmd = mon->cmd_table; cmd->name != NULL; cmd++) {
>>> +        for (cmd = cmd_table; cmd->name != NULL; cmd++) {
>>>                if (compare_cmd(args[0], cmd->name)) {
>>>                    break;
>>>                }
>>> @@ -4226,6 +4227,17 @@ static void monitor_find_completion(Monitor *mon,
>>>                goto cleanup;
>>>            }
>>>
>>> +        /* locate next valid string in original cmdline used by re-enter */
>>> +        p = cmdline + strlen(args[0]);
>>> +        while (qemu_isspace(*p)) {
>>> +            p++;
>>> +        }
>>> +
>>    Here it can't handle command start with space such as "   blk", I plan
>> make parse_cmdline() return additional const char **args_cmdline, which
>> point to cmdline correspond to each args. Just want to
>> mention it to save reviewer's time, I'll fix it with any other
>> comments:).
>
> I prefer you respin it first, because it's not unusual that a single
> change like this one ends up requiring more changes. Also, if the series
> is good enough I can apply it w/o having to wait for another version.
>
   OK, I'll respin. Thanks for your time.

>>
>>
>>> +        if (cmd->sub_table) {
>>> +            monitor_find_completion_by_table(mon, cmd->sub_table, p);
>>> +            goto cleanup;
>>> +        }
>>> +
>>>            ptype = next_arg_type(cmd->args_type);
>>>            for(i = 0; i < nb_args - 2; i++) {
>>>                if (*ptype != '\0') {
>>> @@ -4252,13 +4264,7 @@ static void monitor_find_completion(Monitor *mon,
>>>                bdrv_iterate(block_completion_it, &mbs);
>>>                break;
>>>            case 's':
>>> -            /* XXX: more generic ? */
>>> -            if (!strcmp(cmd->name, "info")) {
>>> -                readline_set_completion_index(mon->rs, strlen(str));
>>> -                for(cmd = info_cmds; cmd->name != NULL; cmd++) {
>>> -                    cmd_completion(mon, str, cmd->name);
>>> -                }
>>> -            } else if (!strcmp(cmd->name, "sendkey")) {
>>> +            if (!strcmp(cmd->name, "sendkey")) {
>>>                    char *sep = strrchr(str, '-');
>>>                    if (sep)
>>>                        str = sep + 1;
>>> @@ -4284,6 +4290,12 @@ cleanup:
>>>        }
>>>    }
>>>
>>> +static void monitor_find_completion(Monitor *mon,
>>> +                                    const char *cmdline)
>>> +{
>>> +    return monitor_find_completion_by_table(mon, mon->cmd_table, cmdline);
>>> +}
>>> +
>>>    static int monitor_can_read(void *opaque)
>>>    {
>>>        Monitor *mon = opaque;
>>>
>>
>>
>


-- 
Best Regards

Wenchao Xia

  reply	other threads:[~2013-06-27  1:44 UTC|newest]

Thread overview: 15+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-06-24 12:48 [Qemu-devel] [PATCH V2 0/7] monitor: support sub command group in auto completion and help Wenchao Xia
2013-06-24 12:48 ` [Qemu-devel] [PATCH V2 1/7] monitor: discard global variable *cur_mon in completion functions Wenchao Xia
2013-06-27 17:45   ` Eric Blake
2013-06-24 12:48 ` [Qemu-devel] [PATCH V2 2/7] monitor: discard global variable *mon_cmds Wenchao Xia
2013-06-27 17:57   ` Eric Blake
2013-06-24 12:48 ` [Qemu-devel] [PATCH V2 3/7] monitor: discard global variable *info_cmds in help functions Wenchao Xia
2013-06-27 19:26   ` Eric Blake
2013-06-24 12:48 ` [Qemu-devel] [PATCH V2 4/7] monitor: code move for parse_cmdline() Wenchao Xia
2013-06-24 12:48 ` [Qemu-devel] [PATCH V2 5/7] monitor: support sub commands in auto completion Wenchao Xia
2013-06-26  4:03   ` Wenchao Xia
2013-06-26 16:03     ` Luiz Capitulino
2013-06-27  1:43       ` Wenchao Xia [this message]
2013-06-24 12:48 ` [Qemu-devel] [PATCH V2 6/7] monitor: improve "help" in auto completion for sub command Wenchao Xia
2013-06-24 12:48 ` [Qemu-devel] [PATCH V2 7/7] monitor: improve "help" to allow show tip of single command in sub group Wenchao Xia
2013-06-27 17:17 ` [Qemu-devel] [PATCH V2 0/7] monitor: support sub command group in auto completion and help Eric Blake

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=51CB98C0.2080602@linux.vnet.ibm.com \
    --to=xiawenc@linux.vnet.ibm.com \
    --cc=armbru@redhat.com \
    --cc=lcapitulino@redhat.com \
    --cc=pbonzini@redhat.com \
    --cc=qemu-devel@nongnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.