]> xenbits.xensource.com Git - libvirt.git/commitdiff
virsh: Complete multiple options when any one option requires data
authorNishith Shah <nishithshah.2211@gmail.com>
Mon, 5 Sep 2016 09:45:11 +0000 (09:45 +0000)
committerMichal Privoznik <mprivozn@redhat.com>
Mon, 5 Sep 2016 12:16:45 +0000 (14:16 +0200)
Before this patch:
    virsh # start --domain dom1 [TAB][TAB] <- offers filename completion
    virsh # start --domain [TAB][TAB] <- offers filename completion

After this patch:
    virsh # start --domain dom1 [TAB][TAB] <- offers command completion
    virsh # start --domain [TAB][TAB] <- calls domain completer if
    defined, otherwise falls back to filename completion

Signed-off-by: Nishith Shah <nishithshah.2211@gmail.com>
tools/vsh.c

index 45f55d94925cb634b89961eafcc8ada1de05af20..31579228b003020bc2f9be137b3aebb082e3fea3 100644 (file)
@@ -2731,6 +2731,7 @@ vshReadlineParse(const char *text, int state)
                     goto error;
                 }
 
+                opts_seen = const_opts_seen;
                 opt_exists = true;
                 VIR_FREE(const_tkdata);
                 if (opt->type != VSH_OT_BOOL) {
@@ -2748,14 +2749,14 @@ vshReadlineParse(const char *text, int state)
                             goto error;
 
                         tkdata = const_tkdata;
+                        virSkipSpaces((const char **)&tkdata);
                     }
                     if (STREQ(tkdata, sanitized_text)) {
                         /* auto-complete non-bool option arg */
                         data_complete = true;
                         break;
                     }
-                    if (opt->type != VSH_OT_ARGV)
-                        opts_need_arg &= ~(1ULL << opt_index);
+                    non_bool_opt_exists = false;
                 } else {
                     tkdata = NULL;
                     /* opt type is BOOL */