From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on inbox.vuxu.org X-Spam-Level: X-Spam-Status: No, score=-3.3 required=5.0 tests=DKIM_SIGNED,DKIM_VALID, MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,T_SCC_BODY_TEXT_LINE, UNPARSEABLE_RELAY autolearn=ham autolearn_force=no version=3.4.4 Received: (qmail 4494 invoked from network); 3 Jun 2022 01:37:28 -0000 Received: from zero.zsh.org (2a02:898:31:0:48:4558:7a:7368) by inbox.vuxu.org with ESMTPUTF8; 3 Jun 2022 01:37:28 -0000 ARC-Seal: i=1; cv=none; a=rsa-sha256; d=zsh.org; s=rsa-20210803; t=1654220248; b=RWRx0MI3imXC6uunYFq4FfnSMvVt6IKz/A3gM+KxOxAvTPwWeZ56c9bEqpPGn2KK04JReS/7OQ OnXick2VPIfKGqaFVOKuilaLwc5Xj80mD2SP4yDUoqxFAVQYwDWtlCfUdgBlg0FCppZZTzxAoH WfgHoVTf+iZ4sBeJ1TT1psHg+TnMmP41fvhDdNUN38jNpLgYBk/w/K0DmN4EiJAvyMyD6JG4WP z5H11Y2p8283gUIiwL5of0j9cA2Ddvcf/m2KVmlEF4m4c5KjBKZJXamlBFGwDReTKX9KICya1g 5aFYe2FDB2DzGP8D/zKa8iuyuebOxSVfG24QlHtp1mZZ0Q==; ARC-Authentication-Results: i=1; zsh.org; iprev=pass (mail-ej1-f44.google.com) smtp.remote-ip=209.85.218.44; dkim=pass header.d=brasslantern-com.20210112.gappssmtp.com header.s=20210112 header.a=rsa-sha256; dmarc=none header.from=brasslantern.com; arc=none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed; d=zsh.org; s=rsa-20210803; t=1654220248; bh=OWBAsSadUPBkiCYxLagaO8XhDWM8KMKMFQcIbPYA8EI=; h=List-Archive:List-Owner:List-Post:List-Unsubscribe:List-Subscribe:List-Help: List-Id:Sender:Content-Type:To:Subject:Message-ID:Date:From:MIME-Version: DKIM-Signature:DKIM-Signature; b=cUokogcWf1T7gJFf151Btcwb34GYGx7Tbgk7YvZtOClL1vB5+D+LLMItqGAUGIGdsOFMVj1VlC iFTKgV8OFoM5tV3uT4QFgf7TiiXEMr2ivLRMtG3m3fgU4kjGuxcT3xZvLdRXSWGDgQO03wiWrC w50D7Lf0BWQRocCS9WiuURcwCXV1KMLrLQF2kskh9G60hB2ZMrj6wuE9t9WRJbp2aDQrZJ3rwG DIx5Htanfvq5UbFPlxF6mjMMWd9Fj/9U1YOagXviaQ32j1Lp0EAF1mZhiviWN+kOv40B3Eim1e P0Kh7ek6+RM63HQ3TWPu0YZ86jTHfqQlBECuejIn1+eceg==; DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=zsh.org; s=rsa-20210803; h=List-Archive:List-Owner:List-Post:List-Unsubscribe: List-Subscribe:List-Help:List-Id:Sender:Content-Type:To:Subject:Message-ID: Date:From:MIME-Version:Reply-To:Cc:Content-Transfer-Encoding:Content-ID: Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc :Resent-Message-ID:In-Reply-To:References; bh=783BJD+cVcjv8TsKBOPRRKMx0UE5xVu88pQRONOIaG8=; b=k11ZmODtR97EOlYj8LF7s+sbtK un3r6J9ucS4Ux16gfdeWe9+HbuJFDAQwPz0URvamG7QFaDpymlHe3g14x5LGEeXtHGdxYSIFDjV4v h3YCNAoGzmShj24PKRReIKl49hu95Rp7jF7mM4SyrP4uIEKXXBhBt+BwVqjkr33uBoQj4Uv+jU5wP mjmBmaAYtXnnb+Q7bGXgjG+zMrZ7L99DrcOqOLehjTT4Vqb792rEanZBWJFyi9s0Jqa4tmTCHidfF /GCkj6ktcrNHj+Yla762sKq2LAqCy996T7fNJsaz4Ll5ODy3W/cXayXlG5+4cRCsLa0/lxIka0QnF hnpVdiug==; Received: from authenticated user by zero.zsh.org with local id 1nwwFh-000CWV-Sm; Fri, 03 Jun 2022 01:37:25 +0000 Authentication-Results: zsh.org; iprev=pass (mail-ej1-f44.google.com) smtp.remote-ip=209.85.218.44; dkim=pass header.d=brasslantern-com.20210112.gappssmtp.com header.s=20210112 header.a=rsa-sha256; dmarc=none header.from=brasslantern.com; arc=none Received: from mail-ej1-f44.google.com ([209.85.218.44]:43530) by zero.zsh.org with esmtps (TLS1.3:TLS_AES_128_GCM_SHA256:128) id 1nwwFN-000CCw-4g; Fri, 03 Jun 2022 01:37:06 +0000 Received: by mail-ej1-f44.google.com with SMTP id m20so13186592ejj.10 for ; Thu, 02 Jun 2022 18:37:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=brasslantern-com.20210112.gappssmtp.com; s=20210112; h=mime-version:from:date:message-id:subject:to; bh=783BJD+cVcjv8TsKBOPRRKMx0UE5xVu88pQRONOIaG8=; b=6x/6lqOITRHYrWGMa5/6du2LNE05ENKjhWdqAqD//rWeY0CjjBoDgX5txmbxR51a4f r1m7Jpl0GXM61Ik22Cq0Yx4dzuegjgjLNwen064S5TA5Y+6hnrmGKgXsMoAewE0hJ/km a36DGbbylC+yG00v5of6n7pkCtyfPYIQOUyRZJ4LtV9baoA4vZS6vVp82FAO0Ovf9lK/ DB1UosNRUD5l+bhsy+4K7Wu4D04n/Ivmqd71jo2FMFLJMAiteIf2zap55V6PbyE+60fh CWGfa0wNuwoj6ExKFZO1bcdBq1ExcOyHN+1P3IYBI6lJ18GytErU6jEtiMmZVVcGx0dN oPgw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:mime-version:from:date:message-id:subject:to; bh=783BJD+cVcjv8TsKBOPRRKMx0UE5xVu88pQRONOIaG8=; b=eHwTL2RXDLtIs014XUewoh6DcCI4GeNCeF/bC1x2YJ9eby8XbuFD2kRrmU5oSs74LF /CyV66fOSU2ejpsQMf9RtBrTXE7rQR8tfiHXFU++UHpHYZ2MOJlBpkjo6+DB20BQTpHk Ln1AiVLuPehkTzCX9BCnNYI05aGzUSLc5k0Yl89/Cz9MzqpO6DJqNfbpTbDufzLK1GnO VPIhubmgeieoGRA0NG/CsZPH1/IljmOxHWNQYVdwYmURHU43bQ6c847FUYw063Epsaul oUIQu7wNZo5+BE0MVW6HwgrJZoersYT4zYeUshxTdEJyUlCYzbEtqdFlxMMtv6C/iurH XrqQ== X-Gm-Message-State: AOAM5301k4GcDJz7lmbPOPgyhMDoYNMm160K7m2xZn9cr+4BMcbUaekI bJCoVLxRsSFJPVfdf4ARCqoXz2JXebYNty4lf8uoMQZes4XDVA== X-Google-Smtp-Source: ABdhPJw1Lim/yv1g+bqzPi+IxFbCXyqsiYJasdya3QbNNWw26P0IIKRyTjV099erUo8enc1Xljr3SIivVmsRN911Zsg= X-Received: by 2002:a17:906:90cf:b0:70b:43a2:658b with SMTP id v15-20020a17090690cf00b0070b43a2658bmr4592568ejw.450.1654220224249; Thu, 02 Jun 2022 18:37:04 -0700 (PDT) MIME-Version: 1.0 From: Bart Schaefer Date: Thu, 2 Jun 2022 18:36:52 -0700 Message-ID: Subject: Shadowing builtins and functions To: Zsh hackers list Content-Type: multipart/mixed; boundary="000000000000d8eb3f05e0812833" X-Seq: 50323 Archived-At: X-Loop: zsh-workers@zsh.org Errors-To: zsh-workers-owner@zsh.org Precedence: list Precedence: bulk Sender: zsh-workers-request@zsh.org X-no-archive: yes List-Id: List-Help: List-Subscribe: List-Unsubscribe: List-Post: List-Owner: List-Archive: --000000000000d8eb3f05e0812833 Content-Type: text/plain; charset="UTF-8" In workers 50316, I wrote: > That needs some work to avoid conflicting with other helpers that > redefine compadd As far as I can tell that now means only _complete_help and _approximate, and _approximate already avoids redefining compadd when it is a function instead of a builtin. I'm not sure if that affects the results of _complete_help for contexts that use _approximate. Nevertheless it seems as though a helper for temporarily redefining builtins and functions as new functions is possible, so an attempt at it is attached. The idea here is to create a new unique function name and link it to the original function, which preserves the function body, and then unwind that when the redefined function is not needed. There's no neat way to do this without help from the caller in the form of an "always" block. So after a bit of noodling with that idea, the result is _shadow (attached as _shadow.txt for list server compatibility). Example of usage: diff --git a/Completion/Base/Widget/_complete_help b/Completion/Base/Widget/_complete_help index 69855de9d..da5947e7f 100644 --- a/Completion/Base/Widget/_complete_help +++ b/Completion/Base/Widget/_complete_help @@ -10,6 +10,7 @@ _complete_help() { local -H _help_filter_funcstack="alternative|call_function|describe|dispatch|wanted|requested|all_labels|next_label" { + _shadow compadd compcall zstyle compadd() { return 1 } compcall() { _help_sort_tags use-compctl } zstyle() { @@ -43,7 +44,7 @@ _complete_help() { ${1:-_main_complete} } always { - unfunction compadd compcall zstyle + _unshadow compadd compcall zstyle } for i in "${(@ok)help_funcs}"; do I'm not certain that Completion/Base/Utility is where _shadow would best be committed, but currently the only places we might want it are in completion, so it should be loaded along with completions, so that's where I was thinking to put it. Remarks? --000000000000d8eb3f05e0812833 Content-Type: text/plain; charset="US-ASCII"; name="_shadow.txt" Content-Disposition: attachment; filename="_shadow.txt" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_l3xq7yxa0 I2F1dG9sb2FkCgojIyBSZWNvbW1lbmRlZCB1c2FnZToKIyAgewojICAgIF9zaGFkb3cgZm5hbWUK IyAgICBmdW5jdGlvbiBmbmFtZSB7CiMgICAgICAjIERvIHlvdXIgbmV3IHRoaW5nCiMgICAgfQoj ICAgICMgSW52b2tlIGNhbGxlcnMgb2YgZm5hbWUKIyAgfSBhbHdheXMgewojICAgIF91bnNoYWRv dyBmbmFtZQojICB9CiMjIEFsdGVybmF0ZSB1c2FnZToKIyB7CiMgICBfc2hhZG93IC1zIHN1ZmZp eCBmbmFtZQojICAgZnVuY3Rpb24gZm5hbWUgewojICAgICAjIERvIG90aGVyIHN0dWZmCiMgICAg IGZuYW1lQHN1ZmZpeCBuZXcgYXJncyBmb3IgZm5hbWUKIyAgIH0KIyAgICMgSW52b2tlIGNhbGxl cnMgb2YgZm5hbWUKIyB9IGFsd2F5cyB7CiMgICBfdW5zaGFkb3cgLXMgc3VmZml4IGZuYW1lCiMg fQojIwoKIyBCVUdTOgojICogYGZ1bmN0aW9ucyAtY2AgYWN0cyBsaWtlIGBhdXRvbG9hZCArWGAK IyAqIG5hbWUgY29sbGlzaW9ucyBhcmUgcG9zc2libGUgaW4gYWx0ZXJuYXRlIHVzYWdlCiMgKiBm dW5jdGlvbnMgdGhhdCBleGFtaW5lICQwIHByb2JhYmx5IG1pc2ZpcmUKCnptb2Rsb2FkIHpzaC9w YXJhbWV0ZXIgIyBPciB3aGF0PwoKIyBUaGlzIHByb2JhYmx5IG5ldmVyIGNvbWVzIHVwLCBidXQg cHJvdGVjdCBvdXJzZWxmIGZyb20gcmVjdXJzaXZlIGNhbGwKIyBjaGFpbnMgdGhhdCBtYXkgZHVw bGljYXRlIHRoZSB0b3AgZWxlbWVudHMgb2YgJGZ1bmNzdGFjayBieSBjcmVhdGluZwojIGEgY291 bnRlciBvZiBfc2hhZG93IGNhbGxzIGFuZCB1c2luZyBpdCB0byBtYWtlIHNoYWRvdyBuYW1lcyB1 bmlxdWUuCnR5cGVzZXQgLWdIaSBfc2hhZG93ZGVwdGg9MAoKIyBDcmVhdGUgYSBjb3B5IG9mIGVh Y2ggZm5hbWUgc28gdGhhdCBhIGNhbGxlciBtYXkgcmVkZWZpbmUKX3NoYWRvdygpIHsKICBsb2Nh bCAtQSBmc2Z4PSggLXMgJHtmdW5jc3RhY2tbMl19OiR7ZnVuY3RyYWNlWzJdfTokKChfc2hhZG93 ZGVwdGgrMSkpICkKICBsb2NhbCBmbmFtZQogIHpwYXJzZW9wdHMgLUsgLUEgZnNmeCAtRCBzOgog IGZvciBmbmFtZTsgZG8KICAgIGxvY2FsIHNoYWRvd25hbWU9JHtmbmFtZX1AJHtmc2Z4Wy1zXX0K ICAgICgoICQrZnVuY3Rpb25zWyRmbmFtZV0gKSkgJiYKICAgICAgYnVpbHRpbiBmdW5jdGlvbnMg LWMgJGZuYW1lICRzaGFkb3duYW1lCiAgZG9uZQogICgoX3NoYWRvd2RlcHRoKyspKQp9CgojIFJl bW92ZSB0aGUgcmVkZWZpbmVkIGZ1bmN0aW9uIGFuZCBzaGFkb3dpbmcgbmFtZQpfdW5zaGFkb3co KSB7CiAgbG9jYWwgLUEgZnNmeD0oIC1zICR7ZnVuY3N0YWNrWzJdfToke2Z1bmN0cmFjZVsyXX06 JHtfc2hhZG93ZGVwdGh9ICkKICBsb2NhbCBmbmFtZQogIHpwYXJzZW9wdHMgLUsgLUEgZnNmeCAt RCBzOgogIGZvciBmbmFtZTsgZG8KICAgIGxvY2FsIHNoYWRvd25hbWU9JHtmbmFtZX1AJHtmc2Z4 Wy1zXX0KICAgIGlmICgoICQrZnVuY3Rpb25zWyRzaGFkb3duYW1lXSApKTsgdGhlbgogICAgICBi dWlsdGluIGZ1bmN0aW9ucyAtYyAkc2hhZG93bmFtZSAkZm5hbWUKICAgICAgYnVpbHRpbiB1bmZ1 bmN0aW9uICRzaGFkb3duYW1lCiAgICBlbGlmICgoICQrZnVuY3Rpb25zWyRmbmFtZV0gKSk7IHRo ZW4KICAgICAgYnVpbHRpbiB1bmZ1bmN0aW9uICRmbmFtZQogICAgZmkKICBkb25lCiAgKChfc2hh ZG93ZGVwdGgtLSkpCn0KCiMgVGhpcyBpcyB0cmlja3kuICBXaGVuIHdlIGNhbGwgX3NoYWRvdyBy ZWN1cnNpdmVseSBmcm9tIGF1dG9sb2FkLAojIHRoZXJlJ3MgYW4gZXh0cmEgbGV2ZWwgb2Ygc3Rh Y2sgaW4gJGZ1bmN0cmFjZSB0aGF0IHdpbGwgY29uZnVzZQojIHRoZSBsYXRlciBjYWxsIHRvIF91 bnNoYWRvdy4gIEZvb2wgb3Vyc2VsZiBpbnRvIHdvcmtpbmcgY29ycmVjdGx5LgooKCBBUkdDICkp ICYmIF9zaGFkb3cgLXMgJHtmdW5jc3RhY2tbMl19OiR7ZnVuY3RyYWNlWzJdfToxICIkQCIK --000000000000d8eb3f05e0812833--