From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on inbox.vuxu.org X-Spam-Level: X-Spam-Status: No, score=-1.1 required=5.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,FREEMAIL_FROM,MAILING_LIST_MULTI,RCVD_IN_DNSWL_NONE autolearn=ham autolearn_force=no version=3.4.2 Received: from primenet.com.au (ns1.primenet.com.au [203.24.36.2]) by inbox.vuxu.org (OpenSMTPD) with ESMTP id c59004cf for ; Sat, 7 Sep 2019 21:21:24 +0000 (UTC) Received: (qmail 10959 invoked by alias); 7 Sep 2019 21:21:16 -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: List-Unsubscribe: X-Seq: 44742 Received: (qmail 3669 invoked by uid 1010); 7 Sep 2019 21:21:15 -0000 X-Qmail-Scanner-Diagnostics: from mail-ua1-f68.google.com by f.primenet.com.au (envelope-from , uid 7791) with qmail-scanner-2.11 (clamdscan: 0.101.2/25559. spamassassin: 3.4.2. Clear:RC:0(209.85.222.68):SA:0(-2.0/5.0):. Processed in 2.354057 secs); 07 Sep 2019 21:21:15 -0000 X-Envelope-From: sgniazdowski@gmail.com X-Qmail-Scanner-Mime-Attachments: | X-Qmail-Scanner-Zip-Files: | Received-SPF: pass (ns1.primenet.com.au: SPF record at _netblocks.google.com designates 209.85.222.68 as permitted sender) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to; bh=x12InRVOdW/C8vkBUn6Vu9ZmrccGibRi/BOliSpKvdc=; b=vaGzJB+8P3KEXYYHathu50ENYhZq9GyrwCH1Yb4RVfzIX82UpMGU0aWXQVfPQMMjOU LmOZW21poTBgGwZHw2soERL2Pl94xw/wIdJOr5PwYDnh4NfnlUqZ3FwRtIqcc5IvWLAY U4RhiOG+PAxtK8R/9kj2tPGs9uHcSWcdH0nSo+e04MMuEOK9Slk/4rOwwz924V7bsuhJ ddQ4dQOg8jPdlZ9ckPkQsqfKBiYCCw1cEagDRT/jVO2dHLnwYba70rXBAg/Z8TQlXi2J T+SbpF0wFGC1YAK+GbeB5IO5GYUySHwdfP5GiRAZXvG22VBUxuiiIAh7Om6dQHM1Y9sj EVbg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to; bh=x12InRVOdW/C8vkBUn6Vu9ZmrccGibRi/BOliSpKvdc=; b=oAm/SP1aA+VjayxBdZjNBd0Pmq4cTO5G69pg17MjLQDtmV/XnaGXmyENDkA7ZDze1I qd/YROuv33GMJ21cS+K4ws4VXlVLujBqlI+j0yezvWq/gQAnZIf4KWLvAzp/D1eFKI6x OulOmYjZw4mrJ/Zi1klkvY9Jvh56RNQTjdYAGEXCNTNsYkx/xR8/LzkYF9Mkf5ymRdXe BtZri1lL7/1IGgRqMgrJ8/CJYnxTQXesyFl2tMxakZ/zbD5zknQhCMKJ+7hog/9zXGFF U5mYfggYCw38Te7xoXFfReVQWNZPd8jKMIVpc0AswqPAPv9UkO4MvnEZprtUGmGZmvWI DBrg== X-Gm-Message-State: APjAAAWtb24zjH1a/z8yAQlXZTMVGoW2J4lscG6eWuUKDmzHToGIIcFA JdddcvtiRLbI8kceNMaifF4cDpEWU3mTKmBMM84= X-Google-Smtp-Source: APXvYqza7xg9LfhrMZ4xbEoJVVAyTwHlgx17re50BQ7WDootWSUP3rp2zj4h8nfVXQ2FrJ/fgBeUvRrGsCVsWc86QTI= X-Received: by 2002:ab0:a83:: with SMTP id d3mr7642604uak.7.1567891239274; Sat, 07 Sep 2019 14:20:39 -0700 (PDT) MIME-Version: 1.0 References: <20190907150741.jwztdoslrvk5j7nk@chaz.gmail.com> <20190907201954.dn2nve65wqk4muvc@chaz.gmail.com> In-Reply-To: <20190907201954.dn2nve65wqk4muvc@chaz.gmail.com> From: Sebastian Gniazdowski Date: Sat, 7 Sep 2019 23:19:58 +0200 Message-ID: Subject: Re: [PATCH] Support the mksh's ${|func;} substitution To: Sebastian Gniazdowski , Zsh hackers list Content-Type: multipart/mixed; boundary="0000000000005d389e0591fd20e1" --0000000000005d389e0591fd20e1 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Sat, 7 Sep 2019 at 22:19, Stephane Chazelas wrote: > > 2019-09-07 20:09:57 +0200, Sebastian Gniazdowski: > > The parsing would have to be changed to prevent the "=3D" in function n= ames? > [...] > > No, I meant that you'd need the parser to handle that case of a > pseudo-command group (a {any shell code here} but with {| > instead of {)). > > So you can do: > > echo ${| > whatever $(...) > for i do > ... > done} > > Whether it would actually be difficult or not I can't comment, > I've not looked at the parser code. I think that it's already supported with the single exception that } would have to be quoted: % print ${| whatever $(...) for i do ... done;} zsh: no such function: \n whatever $(...)\n for i do\n ...\n done > Having an operator that *only* invokes a function to do an > expansion is less useful IMO. That just sound like a very > limited form of command substitution where you could have done a > more complete form by allowing any code instead of just one > function invocation without argument. Ok, I agree, the lambda-function reminiscent version is better. It also isn't much harder to implement =E2=80=93 instead of the doshfunc() jus= t bin_eval() would have to be called. I attach such patch. However, it has some problems: arr=3D( val1 val2 abc1 abc3 ) print ${arr[@]//(#b)(*)/${|REPLY\=3Dtest;}} Output:test test test test So the =3D has to be quoted. Also, not much more works. REPLY\=3D$MATCH nor REPLY\=3D\$MATCH are working. I wonder why, as it doesn't look that bad in general: whatever() { echo func ran; } echo ${| whatever $(...) for i in a b c; do REPLY\=3D1 done;} Output: func ran 1 --=20 Sebastian Gniazdowski News: https://twitter.com/ZdharmaI IRC: https://kiwiirc.com/client/chat.freenode.net:+6697/#zplugin Blog: http://zdharma.org --0000000000005d389e0591fd20e1 Content-Type: text/plain; charset="US-ASCII"; name="0001-Support-the-mksh-s-substitution-func.patch-(2).txt" Content-Disposition: attachment; filename="0001-Support-the-mksh-s-substitution-func.patch-(2).txt" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_k0a1xo0x0 RnJvbSA2YzRhMmI3NzhjYTRjNjI1YmYxNWNmNzAwZDZlYzNjZTFhZWExYmNmIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBTZWJhc3RpYW4gR25pYXpkb3dza2kgPHNnbmlhemRvd3NraUBn bWFpbC5jb20+CkRhdGU6IEZyaSwgNiBTZXAgMjAxOSAwMjozNToxNCArMDIwMApTdWJqZWN0OiBb UEFUQ0hdIFN1cHBvcnQgdGhlIG1rc2gncyBzdWJzdGl0dXRpb24gJHt8ZnVuYzt9CgotLS0KIFNy Yy9zdWJzdC5jIHwgNDYgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrLQogMSBmaWxlIGNoYW5nZWQsIDQ1IGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKCmRp ZmYgLS1naXQgYS9TcmMvc3Vic3QuYyBiL1NyYy9zdWJzdC5jCmluZGV4IGIxMzJmMjUxYi4uZGMy YjU4Y2M3IDEwMDY0NAotLS0gYS9TcmMvc3Vic3QuYworKysgYi9TcmMvc3Vic3QuYwpAQCAtMjks NiArMjksNyBAQAogCiAjaW5jbHVkZSAienNoLm1kaCIKICNpbmNsdWRlICJzdWJzdC5wcm8iCisj aW5jbHVkZSAiYnVpbHRpbi5wcm8iCiAKICNkZWZpbmUgTEZfQVJSQVkJMQogCkBAIC0xODQ3LDgg KzE4NDgsMTcgQEAgcGFyYW1zdWJzdChMaW5rTGlzdCBsLCBMaW5rTm9kZSBuLCBjaGFyICoqc3Ry LCBpbnQgcXQsIGludCBwZl9mbGFncywKICAgICAgKiBuZXN0ZWQgKFApIGZsYWdzLgogICAgICAq LwogICAgIGludCBmZXRjaF9uZWVkZWQ7CisgICAgLyogSW5kaWNhdGVzICR7fGZ1bmM7fSAqLwor ICAgIGludCBycGx5ZnVuYyA9IDA7CisgICAgLyogVGhlIG5hbWUgb2YgdGhlIGZ1bmN0aW9uIHRv IGJlIHJhbiBieSAke3wuLi47fSAqLworICAgIGNoYXIgKnJwbHljb2RlWzJdID0ge05VTEwsIE5V TEx9OworICAgIC8qIFRoZSBsZW5ndGggb2YgdGhlIGlucHV0IHN0cmluZyAqLworICAgIGludCBz bGVuID0gMDsKKyAgICAvKiBUaGUgY2xvc2luZyBicmFjZSBwb2ludGVyICovCisgICAgY2hhciAq b3V0YnJhY2VwOwogCiAgICAgKnMrKyA9ICdcMCc7CisgICAgc2xlbiA9IHN0cmxlbihzKTsKICAg ICAvKgogICAgICAqIE5vdGhpbmcgdG8gZG8gdW5sZXNzIHRoZSBjaGFyYWN0ZXIgZm9sbG93aW5n IHRoZSAkIGlzCiAgICAgICogc29tZXRoaW5nIHdlIHJlY29nbmlzZS4KQEAgLTE4NzYsNiArMTg4 NiwzNiBAQCBwYXJhbXN1YnN0KExpbmtMaXN0IGwsIExpbmtOb2RlIG4sIGNoYXIgKipzdHIsIGlu dCBxdCwgaW50IHBmX2ZsYWdzLAogICAgIGlmIChjID09IEluYnJhY2UpIHsKIAlpbmJyYWNlID0g MTsKIAlzKys7CisKKyAgICAgICAgLyogU2hvcnQtcGF0aCBmb3IgdGhlIGZ1bmN0aW9uLXJ1bm5p bmcgc3Vic3RpdHV0aW9uICR7fGZ1bmM7fQorICAgICAgICAgKiBUaGUgZnVuY3Rpb24gbmFtZSBp cyBleHRyYWN0ZWQgYW5kIGNhbGxlZCwgYW5kIHRoZQorICAgICAgICAgKiBzdWJzdGl0dXRpb24g YXNzaWduZWQuIFRoZXJlJ3Mgbm8gKC4uLiktZmxhZ3MgcHJvY2Vzc2luZywKKyAgICAgICAgICog aS5lLiBubyAke3woVSlmdW5jO30sIGJlY2F1c2UgaXQgbG9va3MgcXVpdGUgYXdmdWwgYW5kCisg ICAgICAgICAqIGFsc28gcmVxdWlyZXMgYSBjaGFuZ2UgdG8gdGhlIG1hbnVhbCwgcGFydCBhYm91 dCB0aGUKKyAgICAgICAgICogc3Vic3RpdHV0aW9uIG9yZGVyLiBVc2UgJHsoVSkke3xmdW5jO319 IGluc3RlYWQsIGl0IGxvb2tzCisgICAgICAgICAqIGNsZWFuZXIuICovCisgICAgICAgIGlmICgg KChvdXRicmFjZXA9c3RyY2hyKHMsT3V0YnJhY2UpKSB8fAorICAgICAgICAgICAgIChvdXRicmFj ZXA9c3RyY2hyKHMsJ30nKSkpICYmCisgICAgICAgICAgICAgICAgKHNbMF0gPT0gQmFyIHx8IHNb MF0gPT0gJ3wnKSAmJgorICAgICAgICAgICAgICAgICAgICBvdXRicmFjZXBbLTFdID09ICc7JyAp CisgICAgICAgIHsKKyAgICAgICAgICAgIHJwbHlmdW5jID0gMTsKKyAgICAgICAgICAgIHJwbHlj b2RlWzBdID0gZHVwc3RycGZ4KHMrMSwgb3V0YnJhY2VwLXMtMik7CisgICAgICAgICAgICBzPW91 dGJyYWNlcDsKKworICAgICAgICAgICAgLyogRXhlY3V0ZSB0aGUgc2hlbGwgZnVuY3Rpb24gKi8K KyAgICAgICAgICAgIGJpbl9ldmFsKE5VTEwsIHJwbHljb2RlLCBOVUxMLCAwKTsKKworICAgICAg ICAgICAgdmFsID0gZ2V0c3BhcmFtKCJSRVBMWSIpOworICAgICAgICAgICAgaWYgKHZhbCkKKyAg ICAgICAgICAgICAgICB2dW5zZXQgPSAwOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAg ICAgICAgdnVuc2V0ID0gMTsKKyAgICAgICAgICAgICAgICB2YWwgPSBkdXBzdHJpbmcoIiIpOwor ICAgICAgICAgICAgfQorICAgICAgICAgICAgZmV0Y2hfbmVlZGVkID0gMDsKKyAgICAgICAgfQor CiAJLyoKIAkgKiBJbiBrc2ggZW11bGF0aW9uIGEgbGVhZGluZyBgIScgaXMgYSBzcGVjaWFsIGZs YWcgd29ya2luZwogCSAqIHNvcnQgb2YgbGlrZSBvdXIgKGspLgpAQCAtMjUxOSw3ICsyNTU5LDEx IEBAIHBhcmFtc3Vic3QoTGlua0xpc3QgbCwgTGlua05vZGUgbiwgY2hhciAqKnN0ciwgaW50IHF0 LCBpbnQgcGZfZmxhZ3MsCiAJCQkgICAgIHNjYW5mbGFncykpIHx8CiAJICAgICh2LT5wbSAmJiAo di0+cG0tPm5vZGUuZmxhZ3MgJiBQTV9VTlNFVCkpIHx8CiAJICAgICh2LT5mbGFncyAmIFZBTEZM QUdfRU1QVFkpKQotCSAgICB2dW5zZXQgPSAxOworICAgICAgICB7CisgICAgICAgICAgICBpZiAo IXJwbHlmdW5jKSB7CisgICAgICAgICAgICAgICAgdnVuc2V0ID0gMTsKKyAgICAgICAgICAgIH0K KyAgICAgICAgfQogCiAJaWYgKHdhbnR0KSB7CiAJICAgIC8qCi0tIAoyLjIxLjAKCg== --0000000000005d389e0591fd20e1--