On 11/08/2017 05:26 PM, Eric Blake wrote: > On 11/08/2017 10:06 AM, Michal Privoznik wrote: > >>> $ virsh complete some-command --arg partial<TAB><TAB> >> >> This is excatly what my patches are doing. With one tiny difference. In >> fact bash script calls: >> >> virsh complete "some-command --arg partial" >> >> so that I can have cmdComplete which takes exactly one string argument. > > Ouch. That difference matters, and I don't think you want to do that. > > We don't want to reimplement shell parsing; if the user does: > > virsh snapshot-create-as 'domain with space' 'name with space' > 'description with space', then my approach feeds those three arguments > as is (the virsh parser doesn't have to undo any shell quoting), while > your approach HAS to over-quote the original command line, then > reimplement shell quoting to remove those quotes in virsh, in order to > reconstruct the original line in spite of being temporarily squashed > through one argument. > >> Parsing of the string is then done within cmdComplete. I don't think >> that we have variable args in virsh for commands, do we? > > Yes, we do. See 'virsh echo' for an example of its use. So while implementing this I realized it will not fly. At ARGV level it is impossible to tell apart "--domain" and "--domain ". But the difference is important, because in the first case we want to offer list of all --options, while in the second case we want to call the --domain completer. Okay, this might not be the best example because there's no other option that shares the prefix, but for instance 'migrate' command has: --timeout --timeout-suspend --timeout-postcopy So if user types in: "virsh migrate --timeout" we have to bring up list: "--timeout" "--timeout-suspend" "--timeout-postcopy" and only after they type: "virsh migrate --timeout " we can call --timeout completer. Since it's impossible to differentiate these cases with VSH_OT_ARGV, I'm sticking with what I have now. Sure, it might has its own problems but those can be solved later. Michal -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list