From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 7188 invoked by alias); 16 Dec 2011 00:18:04 -0000 Mailing-List: contact zsh-users-help@zsh.org; run by ezmlm Precedence: bulk X-No-Archive: yes List-Id: Zsh Users List List-Post: List-Help: X-Seq: 16643 Received: (qmail 9321 invoked from network); 16 Dec 2011 00:18:02 -0000 X-Spam-Checker-Version: SpamAssassin 3.3.2 (2011-06-06) on f.primenet.com.au X-Spam-Level: X-Spam-Status: No, score=-2.5 required=5.0 tests=BAYES_00,DKIM_SIGNED, RCVD_IN_DNSWL_LOW,T_DKIM_INVALID autolearn=ham version=3.3.2 Received-SPF: pass (ns1.primenet.com.au: SPF record at spf-00082601.pphosted.com designates 67.231.153.30 as permitted sender) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=fb.com; h=from : to : cc : subject : date : message-id : in-reply-to : content-type : content-id : content-transfer-encoding : mime-version; s=facebook; bh=CGY2LZvwAUqc41QxNk6MPKvtXef3Z/BdC0os1cFF/eU=; b=QH7RIl5CoKe7F9wpZOpkok1JokA5ky3opWX69s569C09ieqBVxpHk65qVZRrfNz7uE1l eOeOsLNeaz/mHyuLURGyLe0rB/LlMovu0LxrXeiZ38RmiivJTtr8Ow1rMTxiUh7A7ABt koolG8vjgh6bi38k8dWsZl43XvH8SFJEN4o= From: Larry Schrof To: Mikael Magnusson CC: "zsh-users@zsh.org" Subject: Re: Having a tough time setting up completion. Thread-Topic: Having a tough time setting up completion. Thread-Index: AQHMu3XdAqNB7xXbw0yZ5vB/QP2nIZXeCDqA//+RJgA= Date: Fri, 16 Dec 2011 00:17:52 +0000 Message-ID: In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [192.168.18.252] Content-Type: text/plain; charset="us-ascii" Content-ID: Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10432:5.5.7110,1.0.211,0.0.0000 definitions=2011-12-15_07:2011-12-16,2011-12-15,1970-01-01 signatures=0 X-Proofpoint-Spam-Reason: safe Thanks - this is definitely getting there. However, I have a problem. Many, but not all, of the strings in this set contain internal hyphens. For example, we have 'create', 'delete', and 'add-property'. Adding create and delete to the list of strings works great. $ foo -- # yields... $ foo --longword # Awesome! $ foo --longword # Offers up 'create' and 'delete' - fantastic When we try adding a hyphenated string into the mix, things break: $ foo - # completes incorrectly to $ foo add-property # This should have offered -x and --longword as completions Any suggestions? On 12/15/11 2:54 PM, "Mikael Magnusson" wrote: >On 15 December 2011 23:06, Larry Schrof wrote: >> I've spent a lot to time studying the zshcompsys man page (the docs for >>_arguments specifically), but I"m still having a tough time specifying >>the syntax to do the following completion. >> >> I have a command called foo. This command takes exactly one of three >>forms: >> >> foo -x >> foo --longword >> foo >> >> -x is a single-letter option, --longword is a double-dashed GNU-style >>long option. (These two options are synonymous.) Of these two options, >>either zero or exactly one of them should appear. IF one of them >>appears, it must appear immediately after foo (separated from foo, of >>course, by whitespace). >> >> In all cases, is a single >>(non-leading-dash) word. As soon as this word is entered or completed, >>no other word from the (really large) set should appear on the command >>line. >> >> If anyone can offer a general outline as to how I can use _arguments to >>implement this, that would be great. I need to manually enter in all >>fifty words at some point, and make them mutually exclusive. Will be >>interesting to see how to do that. Thanks! > >I'm not sure if I should be happy or sad I got this on the first try >without even using backspace, without looking anything up, and it >worked (all on one line if gmail breaks it): > >compdef '_arguments ''(-x --longword)''{-x,--longword}''[something]'' >''1:fiftystrings:(one two three and so forth fifty)''' foo > >(i use rcquotes so you want '\'' instead of '', or more likely, >putting the whole quoted string in a regular completer.) >If you want to give a description for each words, use double parens >instead and separate desc with :, as >...:fiftystrings:((one:a\ description\ of\ one two:... > >--=20 >Mikael Magnusson