Zsh Mailing List Archive
Messages sorted by: Reverse Date, Date, Thread, Author

Re: Help with completion of option arguments



On Jul 8, 12:06am, Travis Spencer wrote:
} Subject: Help with completion of option arguments
}
} I have a command for which I'm trying to write a completion widget. 
} 
} _arguments -C \
}     "-A-[this is a test]:test:((a\:'test sub-message'))"
}     "-B-[notify (e-mail) admins]:notify:((
}           b\:'suppress interactive query (for use in crontab)'))"

This wouldn't work as written, because you left off the backslash on
the second line, and because -A is an *option of* _arguments, so it
is necessary to use
    _arguments -C : "-A-..."
in order to get "-A-..." to be treated as an *argument* of _arguments.

I mention this to point out that it's almost always better to show the
real example you're working with, rather than attempt to make up an
equivalent one.  The exception would be when you're showing a minimal
test case for a bug, but then you should have tried the example to be
sure it demonstrates what you intend it to.

By the way, does your call to _arguments use the ->state mechanism at
any point?  If not, you don't need the -C in there.

} The command has options that take arguments that must follow the
} option without any white space.  For example, the command takes
} options such as these: `-A', `-Aa', `-B', and `-Bb'.
} 
} But the problem is, with only a single argument like this, after
} typing `-A' or `-B', the sole completion `a' and `b' are run rather
} than outputting the descriptions.

I interpret this to mean that you're trying to use the completion as a
sort of interactive help lookup ("I don't remember what -A does, please
tell me").  If that's what you want, don't press TAB to complete further;
rather, type ctrl-d (or whatever you have bound to list-choices) to show
the possible alternatives.

However, the literal answer to your question ...

} Is there some way to get _arguments to output the messages `test
} sub-message' and `suppress interactive query (for use in crontab)'
} when `-A' or `-B' have been input rather than completing them
} directly?

... is, insert an empty string element into the double-parens like this:

_arguments : \
    "-A-[this is a test]:test:(('' a\:'test sub-message'))" \
    "-B-[notify (e-mail) admins]:notify:((''
	b\:'suppress interactive query (for use in crontab)'))"



Messages sorted by: Reverse Date, Date, Thread, Author