From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 3852 invoked from network); 19 Jul 2001 01:53:06 -0000 Received: from sunsite.dk (130.225.51.30) by ns1.primenet.com.au with SMTP; 19 Jul 2001 01:53:06 -0000 Received: (qmail 6007 invoked by alias); 19 Jul 2001 01:52:57 -0000 Mailing-List: contact zsh-workers-help@sunsite.dk; run by ezmlm Precedence: bulk X-No-Archive: yes X-Seq: 15414 Received: (qmail 5996 invoked from network); 19 Jul 2001 01:52:56 -0000 Message-ID: <20010719015254.32691.qmail@web10401.mail.yahoo.com> Date: Wed, 18 Jul 2001 18:52:54 -0700 (PDT) From: Felix Rosencrantz Subject: Generating completion functions from XML To: zsh-workers MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Recently there was discussion about how it is harder to create new completion functions under the new completion system than the old. The new system is easier to use as installed, since there are so many great completion functions available, and those do a much better job at completion than anything before. Part of the problem is the new system provides much more functionality. To do a good job, it takes more than just listing the flags to _arguments, now there is help to provide for the each flag, and then help for the flag value. There are more options on what flags are exclusive and equivalent, and many times this information has to be repeated. It still has been bothering me that it is not easier to create new completions. I've thought about writing shell/perl/python/* scripts that could attempt to make good guesses based on usage information or man pages, and generate the appropriate _arguments call. (_arguments can already do this at runtime with GNU getopts like output.) But I suspect any scripts would still hit some sort of 90/10 rule. It'll get you 90% of the way but there will still be the final 10% which will have to be done manually. So I feared having to look at partially wrong _arguments calls. That command has a lot of syntactic sugar and there is more on the way (e.g. recent changes). It's not easy for me to remember what each special character and grouping does. It occurred to me that having an intermediate file format would be a good idea. Possibly something that would be a little more descriptive, maybe even interspersed with comments and documentation (both from zsh & the command). Also it should be easier to edit. Also, it should make it easier to specify commands that have subcommands (e.g. cvs). There would need to be a tool which transform this intermediate file format into the appropriate completion function, generating the appropriate call to _arguments, _values, etc. Also, as the syntax to _arguments changed it would be possible to change this generation tool, and then regenerate the completion function. Maybe even _arguments could even take this intermediate format file as input. To me it seemed like XML would be a good format to use for this intermediate format. The XML format could be designed with the idea that is it meant more for a person to understand, and edit. Some things that would then be possible. It would be possible to write code that inserts standard documentation describing how zsh works (e.g. how does it handle exclusive flags or equivalent flags) right next to the place where the command specific information is being provided. Command specific help (such as pulled from the man page) could be embedded in the XML. It would also be possible to embed zsh source code for flags that use $state in the XML. It would be possible to provide zstyle information (e.g. default values, values to look up) for particular arguments. Also, editing this file would provide another point of customization. I don't think the XML format devised would necessarily have to be able to generate completion functions for every possible command. Just have to be good enough to work for a good portion of commands. So I've gone on long enough about this. Does this sound like something that could provide an additional easier to use interface to the completion system? -FR. __________________________________________________ Do You Yahoo!? Get personalized email addresses from Yahoo! Mail http://personal.mail.yahoo.com/