From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 9960 invoked by alias); 3 May 2011 13:50:05 -0000 Mailing-List: contact zsh-workers-help@zsh.org; run by ezmlm Precedence: bulk X-No-Archive: yes List-Id: Zsh Workers List List-Post: List-Help: X-Seq: 29137 Received: (qmail 9913 invoked from network); 3 May 2011 13:49:52 -0000 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on f.primenet.com.au X-Spam-Level: X-Spam-Status: No, score=-4.2 required=5.0 tests=BAYES_00,RCVD_IN_DNSWL_MED autolearn=ham version=3.3.1 Received-SPF: none (ns1.primenet.com.au: domain at fys.uio.no does not designate permitted sender hosts) MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=_ee6caca3a9466c33be8e05d0bf73ac74" Date: Tue, 03 May 2011 15:49:46 +0200 From: Haakon Riiser To: Subject: Re: How to do completion of toggle flag sequences separated by +/- In-Reply-To: <20110503112742.30ce4904@pwslap01u.europe.root.pri> References: <7965011ce0f14864142f9006d881bba9@ulrik.uio.no> <20110501171846.7ea9607f@pws-pc.ntlworld.com> <20110503112742.30ce4904@pwslap01u.europe.root.pri> Message-ID: X-Sender: haakon.riiser@fys.uio.no User-Agent: Roundcube Webmail/0.4.2 X-UiO-Ratelimit-Test: rcpts/h 1 msgs/h 1 sum rcpts/h 1 sum msgs/h 1 total rcpts 1177 max rcpts/h 16 ratelimit 0 X-UiO-Spam-info: not spam, SpamAssassin (score=-5.0, required=5.0, autolearn=disabled, T_RP_MATCHES_RCVD=-0.01,UIO_MAIL_IS_INTERNAL=-5, uiobl=NO, uiouri=NO) X-UiO-Scanned: EACD40888811CC5E9408F993E71CA25C6A0F54B6 X-UiO-SPAM-Test: remote_host: 129.240.4.214 spam_score: -49 maxlevel 80 minaction 2 bait 0 mail/h: 288 total 1368080 max/h 663 blacklist 0 greylist 0 ratelimit 0 --=_ee6caca3a9466c33be8e05d0bf73ac74 Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset=UTF-8; format=flowed On Tue, 3 May 2011 11:27:42 +0100, Peter Stephenson wrote: > On Mon, 2 May 2011 11:16:06 +0200 > Haakon Riiser wrote: >> By the way: When defining sub-functions inside a completion >> function, is it recommended to test for their existence before >> defining them? E.g., >> >> (( $+functions[_ffmpeg_foo] )) || _ffmpeg_foo() { >> ... >> } >> >> I see this in a lot of completers included with zsh, and I assumed >> it was done for performance reasons (although it seems strange that >> the performance hit could be significant, considering that the code >> is only executed once per TAB keypress). > > That's certainly normal, but I think it's less for performance > reasons > than to allow you to overrided _ffmpeg_foo (or whatever) in another > file. Note that the (( ... )) expression is true even if _ffmpeg_foo > is > marked for autoload. Ah, I see. Doesn't seem to be a reason not to do this then, so I used the same convention for the other stuff I added. Attached to this email you will find a patch that implements toggle flags using the method you posted earlier in this thread (thanks again for that, btw). The ffmpeg completion function is pretty cryptic now, but at least it should be very complete and _very_ future-proof. :) -- Haakon --=_ee6caca3a9466c33be8e05d0bf73ac74 Content-Transfer-Encoding: base64 Content-Type: text/x-patch; charset=UTF-8; name=ffmpeg-flags-completion.patch Content-Disposition: attachment; filename=ffmpeg-flags-completion.patch SW5kZXg6IF9mZm1wZWcKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2c3Jvb3QvenNoL3pzaC9Db21w bGV0aW9uL1VuaXgvQ29tbWFuZC9fZmZtcGVnLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjQKZGlm ZiAtdSAtMSAtMCAtcjEuNCBfZmZtcGVnCi0tLSBfZmZtcGVnCTEgTWF5IDIwMTEgMTU6NDY6NDcg LTAwMDAJMS40CisrKyBfZmZtcGVnCTMgTWF5IDIwMTEgMTM6NDE6NDggLTAwMDAKQEAgLTM2LDQx ICszNiw4NyBAQAogICAgIHBpeF9mbXRzPSgkKF9mZm1wZWdfbGlzdF9waXhfZm10cykpCiAgICAg X3dhbnRlZCBmZm1wZWctcGl4LWZtdHMgZXhwbCAnc2V0IHBpeGVsIGZvcm1hdCcgY29tcGFkZCAt YSBwaXhfZm10cwogfQogCiAoKCAkK2Z1bmN0aW9uc1tfZmZtcGVnX2JzZnNdICkpIHx8IF9mZm1w ZWdfYnNmcygpIHsKICAgICBsb2NhbCBic2ZzCiAgICAgYnNmcz0oJHskeyhmKSIkKF9jYWxsX3By b2dyYW0gYnNmcyAkd29yZHNbMV0gLWJzZnMgMj4vZGV2L251bGwpIn06Iyo6fSkKICAgICBfd2Fu dGVkIGZmbXBlZy1ic2ZzIGV4cGwgJ3NldCBiaXRzdHJlYW0gZmlsdGVyJyBjb21wYWRkIC1hIGJz ZnMKIH0KIAordHlwZXNldCAtQSBfZmZtcGVnX2ZsYWdzCisKKygoICQrZnVuY3Rpb25zW19mZm1w ZWdfZmxhZ19vcHRpb25zXSApKSB8fCBfZmZtcGVnX2ZsYWdfb3B0aW9ucygpIHsKKyAgICBsb2Nh bCBleHBsCisgICAgX3dhbnRlZCBvcHRpb25zIGV4cGwgJ3NlbGVjdCBmbGFncycgY29tcGFkZCAt UyAnJyAtLSB7LSwrfSR7XmZsYWdfb3B0aW9uc30KK30KKworKCggJCtmdW5jdGlvbnNbX2ZmbXBl Z19tb3JlX2ZsYWdfb3B0aW9uc10gKSkgfHwgX2ZmbXBlZ19tb3JlX2ZsYWdfb3B0aW9ucygpIHsK KyAgICBjb21wc2V0IC1wICQxICYmIF9mZm1wZWdfZmxhZ19vcHRpb25zCit9CisKKygoICQrZnVu Y3Rpb25zW19mZm1wZWdfbmV3X2ZsYWdfb3B0aW9uc10gKSkgfHwgX2ZmbXBlZ19uZXdfZmxhZ19v cHRpb25zKCkgeworICAgIGNvbXBzZXQgLVAgJyonICYmIF9mZm1wZWdfZmxhZ19vcHRpb25zCit9 CisKKygoICQrZnVuY3Rpb25zW19mZm1wZWdfZmxhZ3NdICkpIHx8IF9mZm1wZWdfZmxhZ3MoKSB7 CisgICAgbG9jYWwgLWEgZmxhZ19vcHRpb25zCisgICAgZXZhbCAiZmxhZ19vcHRpb25zPShcJHs9 X2ZmbXBlZ19mbGFnc1skMV19KSIKKworICAgIGxvY2FsIG1hdGNoIG1iZWdpbiBtZW5kCisgICAg aW50ZWdlciByZXQ9MQorCisgICAgaWYgW1sgJFBSRUZJWCA9ICgjYikoKilbLStdKFteLStdIykg XV07IHRoZW4gCisgICAgICAgIGlmIFtbIC1uICR7ZmxhZ19vcHRpb25zWyhSKSRtYXRjaFsyXV19 IF1dOyB0aGVuCisgICAgICAgICAgICBfZmZtcGVnX25ld19mbGFnX29wdGlvbnMgJiYgcmV0PTAK KyAgICAgICAgZmkgCisgICAgICAgIGlmIFtbIC1uICR7ZmxhZ19vcHRpb25zWyhSKSRtYXRjaFsy XT8qXX0gXV07IHRoZW4KKyAgICAgICAgICAgIF9mZm1wZWdfbW9yZV9mbGFnX29wdGlvbnMgJHsj bWF0Y2hbMV19ICYmIHJldD0wCisgICAgICAgIGZpCisgICAgZWxzZQorICAgICAgICBfZmZtcGVn X2ZsYWdfb3B0aW9ucyAmJiByZXQ9MAorICAgIGZpCisKKyAgICByZXR1cm4gJHJldAorfQorCiso KCAkK2Z1bmN0aW9uc1tfZmZtcGVnX3JlZ2lzdGVyX2xhc3RvcHRfdmFsdWVzXSApKSB8fCBfZmZt cGVnX3JlZ2lzdGVyX2xhc3RvcHRfdmFsdWVzKCkgeworICAgIGlmICgoIGxhc3RvcHRfdGFrZXNh cmdzICkpOyB0aGVuCisgICAgICAgIGxhc3RvcHQrPSI6JGxhc3RvcHRfZGVzY3JpcHRpb246Igor ICAgICAgICBpZiAoKCAkI2xhc3RvcHRfdmFsdWVzICkpOyB0aGVuCisgICAgICAgICAgICBpZiBb WyAkbGFzdG9wdF90eXBlID09IGZsYWdzIF1dOyB0aGVuCisgICAgICAgICAgICAgICAgZmxhZ3R5 cGU9JHske2xhc3RvcHQlJToqfSMtfQorICAgICAgICAgICAgICAgIGxhc3RvcHQrPSItPiRmbGFn dHlwZSIKKyAgICAgICAgICAgICAgICBfZmZtcGVnX2ZsYWdzWyRmbGFndHlwZV09IiR7bGFzdG9w dF92YWx1ZXNbKl19IgorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGxhc3RvcHQr PSIoJHtsYXN0b3B0X3ZhbHVlc1sqXX0pIgorICAgICAgICAgICAgZmkKKyAgICAgICAgZmkKKyAg ICBmaQorICAgIF9mZm1wZWdfYXJnc3BlY3MrPSRsYXN0b3B0Cit9CisKIGxvY2FsIC1hIF9mZm1w ZWdfYXJnc3BlY3MKIHsKICAgICBsb2NhbCBsYXN0b3B0CiAgICAgbG9jYWwgbGFzdG9wdF9kZXNj cmlwdGlvbgogICAgIGxvY2FsIGxhc3RvcHRfdGFrZXNhcmdzCisgICAgbG9jYWwgbGFzdG9wdF90 eXBlCiAgICAgbG9jYWwgLWEgbGFzdG9wdF92YWx1ZXMKIAogICAgIF9jYWxsX3Byb2dyYW0gb3B0 aW9ucyAkd29yZHNbMV0gLWggMj4vZGV2L251bGwgfCB3aGlsZSBJRlM9JCdcbicgcmVhZCAtcjsg ZG8KICAgICAgICAgaWYgW1sgJFJFUExZID09IC0qIF1dOyB0aGVuCi0gICAgICAgICAgICBpZiBb WyAtbiAkbGFzdG9wdCBdXTsgdGhlbgotICAgICAgICAgICAgICAgIGlmICgoIGxhc3RvcHRfdGFr ZXNhcmdzICkpOyB0aGVuCi0gICAgICAgICAgICAgICAgICAgIGxhc3RvcHQrPSI6JGxhc3RvcHRf ZGVzY3JpcHRpb246IgotICAgICAgICAgICAgICAgICAgICBpZiAoKCAkI2xhc3RvcHRfdmFsdWVz ICkpOyB0aGVuCi0gICAgICAgICAgICAgICAgICAgICAgICBsYXN0b3B0Kz0iKCR7bGFzdG9wdF92 YWx1ZXNbKl19KSIKLSAgICAgICAgICAgICAgICAgICAgZmkKLSAgICAgICAgICAgICAgICBmaQot ICAgICAgICAgICAgICAgIF9mZm1wZWdfYXJnc3BlY3MrPSRsYXN0b3B0Ci0gICAgICAgICAgICBm aQorICAgICAgICAgICAgW1sgLW4gJGxhc3RvcHQgXV0gJiYgX2ZmbXBlZ19yZWdpc3Rlcl9sYXN0 b3B0X3ZhbHVlcwogICAgICAgICAgICAgbGFzdG9wdD0ke1JFUExZJSVbWzpzcGFjZTpdXSp9CiAg ICAgICAgICAgICBsYXN0b3B0X2Rlc2NyaXB0aW9uPSR7UkVQTFkjIy1bXls6c3BhY2U6XV0jI1tb OnNwYWNlOl1dIyN9Ci0gICAgICAgICAgICBpZiBbWyAkbGFzdG9wdF9kZXNjcmlwdGlvbiA9PSAn PCcqIF1dOyB0aGVuCisgICAgICAgICAgICBpZiBbWyAkbGFzdG9wdF9kZXNjcmlwdGlvbiA9PSAo I2IpJzwnKD8jIyknPicqIF1dOyB0aGVuCisgICAgICAgICAgICAgICAgbGFzdG9wdF90eXBlPSRt YXRjaFsxXQogICAgICAgICAgICAgICAgIGxhc3RvcHRfZGVzY3JpcHRpb249JHtsYXN0b3B0X2Rl c2NyaXB0aW9uIyM8W15bOnNwYWNlOl1dIyM+W1s6c3BhY2U6XV0jI1teWzpzcGFjZTpdXSMjW1s6 c3BhY2U6XV0jfQogICAgICAgICAgICAgICAgIGlmIFtbIC16ICRsYXN0b3B0X2Rlc2NyaXB0aW9u IF1dOyB0aGVuCiAgICAgICAgICAgICAgICAgICAgIGxhc3RvcHRfZGVzY3JpcHRpb249JGxhc3Rv cHQKICAgICAgICAgICAgICAgICBmaQogICAgICAgICAgICAgICAgIGxhc3RvcHRfZGVzY3JpcHRp b249JHtsYXN0b3B0X2Rlc2NyaXB0aW9uLy86L1xcOn0KICAgICAgICAgICAgIGVsaWYgW1sgJGxh c3RvcHRfZGVzY3JpcHRpb24gPT0gW15bOnNwYWNlOl1dIyNbWzpzcGFjZTpdXVtbOnNwYWNlOl1d KiBdXTsgdGhlbgogICAgICAgICAgICAgICAgIGxvY2FsIGV4YW1wbGU9JHtsYXN0b3B0X2Rlc2Ny aXB0aW9uJSUgKn0KICAgICAgICAgICAgICAgICBleGFtcGxlPSR7ZXhhbXBsZS8vOi9cXDp9CiAg ICAgICAgICAgICAgICAgbGFzdG9wdF9kZXNjcmlwdGlvbj0ke2xhc3RvcHRfZGVzY3JpcHRpb24j I1teWzpzcGFjZTpdXSMjW1s6c3BhY2U6XV0jI30KICAgICAgICAgICAgICAgICBsYXN0b3B0X2Rl c2NyaXB0aW9uPSR7bGFzdG9wdF9kZXNjcmlwdGlvbi8vOi9cXDp9CkBAIC0xMDYsMjkgKzE1Miwy MSBAQAogICAgICAgICAgICAgICAgIGZpCiAgICAgICAgICAgICBmaQogICAgICAgICAgICAgbGFz dG9wdF92YWx1ZXM9KCkKICAgICAgICAgZWxpZiBbWyAkUkVQTFkgPT0gJyAnKiBdXTsgdGhlbgog ICAgICAgICAgICAgUkVQTFk9JHtSRVBMWSMjW1s6c3BhY2U6XV0jI30KICAgICAgICAgICAgIFJF UExZPSR7UkVQTFklJVtbOnNwYWNlOl1dIyMqfQogICAgICAgICAgICAgbGFzdG9wdF90YWtlc2Fy Z3M9MQogICAgICAgICAgICAgbGFzdG9wdF92YWx1ZXMrPSRSRVBMWQogICAgICAgICBmaQogICAg IGRvbmUKLSAgICBpZiBbWyAtbiAkbGFzdG9wdCBdXTsgdGhlbgotICAgICAgICBpZiAoKCBsYXN0 b3B0X3Rha2VzYXJncyApKTsgdGhlbgotICAgICAgICAgICAgbGFzdG9wdCs9IjokbGFzdG9wdF9k ZXNjcmlwdGlvbjoiCi0gICAgICAgICAgICBpZiAoKCAkI2xhc3RvcHRfdmFsdWVzICkpOyB0aGVu Ci0gICAgICAgICAgICAgICAgbGFzdG9wdCs9Iigke2xhc3RvcHRfdmFsdWVzWypdfSkiCi0gICAg ICAgICAgICBmaQotICAgICAgICBmaQotICAgICAgICBfZmZtcGVnX2FyZ3NwZWNzKz0kbGFzdG9w dAotICAgIGZpCisgICAgW1sgLW4gJGxhc3RvcHQgXV0gJiYgX2ZmbXBlZ19yZWdpc3Rlcl9sYXN0 b3B0X3ZhbHVlcwogfQogCiBfYXJndW1lbnRzIC1TIFwKICAgICAiJHtfZmZtcGVnX2FyZ3NwZWNz W0BdfSIgXAogICAgICcqOm91dHB1dCBmaWxlOl9maWxlcycgXAogICAgICYmIHJldHVybiAwCiAK IFtbICIkc3RhdGUiID09ICJ2ZmlsdGVycyIgXV0gJiYKICAgICBfdmFsdWVzIC1zICwgLVMgPSAn dmlkZW8gZmlsdGVycycgXAogICAgICdhc3BlY3Q6c2V0IGFzcGVjdCByYXRpbyAocmF0aW9uYWwg bnVtYmVyIFhcOlkgb3IgZGVjaW1hbCBudW1iZXIpOicgXApAQCAtMTQ2LDExICsxODQsMTQgQEAK ICAgICAnbnVsbHNyYycgXAogICAgICdudWxsc2luaycgXAogICAgICYmIHJldHVybiAwCiAKIFtb ICIkc3RhdGUiID09ICJmb3JtYXQiIF1dICYmCiAgICAgX3ZhbHVlcyAtcyA6IC1TID0gJ2NvbnZl cnQgaW5wdXQgdmlkZW8gdG8gb25lIG9mIHRoZSBzcGVjaWZpZWQgcGl4ZWwgZm9ybWF0cycgJChf ZmZtcGVnX2xpc3RfcGl4X2ZtdHMpICYmIHJldHVybiAwCiAKIFtbICIkc3RhdGUiID09ICJub2Zv cm1hdCIgXV0gJiYKICAgICBfdmFsdWVzIC1zIDogLVMgPSAnZGlzYWJsZSBzcGVjaWZpZWQgcGl4 ZWwgZm9ybWF0cyBieSBmb3JjZScgJChfZmZtcGVnX2xpc3RfcGl4X2ZtdHMpICYmIHJldHVybiAw CiAKK1tbIC1uICRzdGF0ZSAmJiAtbiAkX2ZmbXBlZ19mbGFnc1skc3RhdGVdIF1dICYmCisgICAg X2ZmbXBlZ19mbGFncyAkc3RhdGUgJiYgcmV0dXJuIDAKKwogcmV0dXJuIDEK --=_ee6caca3a9466c33be8e05d0bf73ac74--