[libvirt] [PATCHv3 2/6] virsh: Add vshCmdCompleter and vshOptCompleter

Tomas Meszaros exo at tty.sk
Sun Sep 1 19:22:56 UTC 2013


On 28/08/13 at 06:00am, Eric Blake wrote:
> [re-adding the list, which was accidentally omitted]
> 
> On 08/28/2013 05:26 AM, Tomas Meszaros wrote:
> >> Per-option completions make sense.  For example, 'virsh vol-key --pool
> >> <TAB>' wants to use a pool completer, while 'virsh vol-key --vol <TAB>'
> >> wants to use a volume completer; furthermore, 'virsh vol-key <TAB>'
> >> should be the combination of the option completer (showing --vol and
> >> --pool) AND the volume completer filtered to names not starting with '-'
> >> (since virsh has the semantics that arguments are positional, where the
> >> option '--vol' is implied if the argument that appears in that position
> >> does not resemble an option).
> > 
> > So If I get it right, you are suggesting that it should work like this:
> > 
> > virsh # vol-key <TAB>
> > vol1	vol2	pool1	pool2
> > 
> > as you said, combination of --vol and --pool completers.
> 
> No, it should work like this:
> 
> virsh# vol-key <TAB>
> vol1 vol2 --vol --pool
> 
> the combination of all (non-option) completions for the current
> available mandatory option (volume completer), and of all possible
> options that still make sense at this point in the command line.
> 
> Likewise:
> 
> virsh# vol-key vol <TAB>
> pool1 pool2 --pool
> 
> virsh# vol-key -<TAB>
> --vol --pool
> 
> virsh# vol-key v<TAB>
> vol1 vol2
> 
> virsh# vol-key --pool <TAB>
> pool1 pool2
> 
> virsh# vol-key --pool pool1 <TAB>
> vol1 vol2 --vol
> 
> and so forth.
>
> > 
> > 
> > I was initially thinking that completion should work like this:
> > 
> > virsh # vol-key <TAB>
> > vol1	vol2
> > 
> > It is completing <vol> first becasue <vol> is only mandatory argument
> > for this command.
> 
> It is a mandatory option, but mandatory options need not come first.
> Remember, our option parser allows mandatory options to occur
> positionally without an option name, OR to be interleaved in any other
> order by including the option string.
> 
> > 
> > 
> > Only if someone type:
> > 
> > virsh # vol-key --pool <TAB>
> > pool1	pool2
> > 
> > then call --pool completer.
> 
> This is correct - once an option is awaiting an argument, then the
> option completer must return nothing at that point in time.  But if you
> look at it as the union of two completers - the set of options that are
> still valid in the current context, and the set of strings that are
> valid assuming positional semantics of the current option, you will
> always get the right answer, without needing a per-command completer
> (just per-option completers).
> 
> -- 
> Eric Blake   eblake redhat com    +1-919-301-3266
> Libvirt virtualization library http://libvirt.org
> 
> 
> 

Yeah, It makes more sense.
I'm now rewriting the whole stuff to just use opt completers.

-- 
Tomas Meszaros




More information about the libvir-list mailing list