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 27435 invoked from network); 25 Mar 2022 00:28:28 -0000 Received: from zero.zsh.org (2a02:898:31:0:48:4558:7a:7368) by inbox.vuxu.org with ESMTPUTF8; 25 Mar 2022 00:28:28 -0000 ARC-Seal: i=1; cv=none; a=rsa-sha256; d=zsh.org; s=rsa-20210803; t=1648168108; b=bQARpm7Ybbv27WsunLrEVeXQdR9+WiWDCffEGwaRq7Zc6UQSbB76ygPcniseJkKXar4gjcHY/Y ojLzacKwVb20hF+Da9q+wiS9iNr5hmZDujqRX8aAaKjbO5EcjRuuGeLZieLfcVg5f49y2lZXsL dxR50j/S8qD2uxWQdyGoUh0LI6vDy4sw2zRop050R+OCI4rjFdmDAnLMAziqUWJsw5bDBNlUQ1 WL4J5Lr+7n+jXqv2nkBFhYtbp/f9Sv2w1K4Gtv6GxE7K8279PjFWYWnhdj8lqXDE2jFodF8j1s pphsXMfJN3Z+HTmDidS2mXxt/OGufuuQI1xGngsmbBchaw==; ARC-Authentication-Results: i=1; zsh.org; iprev=pass (mail-yw1-f178.google.com) smtp.remote-ip=209.85.128.178; 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=1648168108; bh=xHb2LOCCiwKqYWWrc3FhdDUnN17xMKmklKN7P0OJLrk=; h=List-Archive:List-Owner:List-Post:List-Unsubscribe:List-Subscribe:List-Help: List-Id:Sender:Content-Type:Cc:To:Subject:Message-ID:Date:From:In-Reply-To: References:MIME-Version:DKIM-Signature:DKIM-Signature; b=NQkJoWQHTm4Qnrpf1nlXK7c2k4mI7cXdLtHn5lGGxKVpaqcJSEIRrU2pWBzmBoccIQBA/PI3ua u+o8zPEZO/NdZczAGGb0Cgq+MgWlsP9Wwq0SGpI2cJnhp4cuApiilHr750PyfzPfcCKRw9ToKI qiUlrhnGd6j+B/h2oWRMOiNUZsX6ye8i7mVDQ1coZvmq0BPt2s3ifalQBZVkNokjKYoluPMNYa W55Mb4Xf5ZfKDrXq8TdVZTUAaYGCSfluXBz9gKTG3l1J/Er/xk6KisZrzavx9O3sI+HkMstjc+ UEEUhmjd/wbWddF4GYB2plP6maJubC++v5yL9UC4CXl0rg==; 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:Cc:To:Subject:Message-ID :Date:From:In-Reply-To:References:MIME-Version:Reply-To: Content-Transfer-Encoding:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID; bh=OJaOmz+mK6hp3SWUFkwYcL7kmjNFQmRcvCmYThYs2gc=; b=Q1iD304ELONCgj9/N+4N8hTKnv uQ1KjQE9x/OLtKcZBwPI9m1ejQIT3/2ETnvLJTnDchSoWGr7P7iaG4kk6IkTRICZKNx9pZrHRZsPp S4iHmuGYLmHw6EiHGCENj/ojC7G/o4YWD0M715le0/sHWJl0oGPzUfQTeUWN1AcH2mu1S/oZ4eV6H tcAQvnGkjPorr7lLSK34nKxni8zMXiascSey/DS5YJ1xzbTdP32v8bLUnKYFz+J6TsULUv/POl0lM sf59tka6iOJPlVwNYMXC5+B/MZVMwx9MTaM9U078nIGmJ0Q+sedVW4wV9qdLJZ3FF1S69bqQ+P6iW JahzZZTw==; Received: from authenticated user by zero.zsh.org with local id 1nXXoZ-000JzI-2h; Fri, 25 Mar 2022 00:28:27 +0000 Authentication-Results: zsh.org; iprev=pass (mail-yw1-f178.google.com) smtp.remote-ip=209.85.128.178; 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-yw1-f178.google.com ([209.85.128.178]:45150) by zero.zsh.org with esmtps (TLS1.3:TLS_AES_128_GCM_SHA256:128) id 1nXXna-000JGJ-Lg; Fri, 25 Mar 2022 00:27:27 +0000 Received: by mail-yw1-f178.google.com with SMTP id 00721157ae682-2e6650cde1bso67740647b3.12 for ; Thu, 24 Mar 2022 17:27:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=brasslantern-com.20210112.gappssmtp.com; s=20210112; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=OJaOmz+mK6hp3SWUFkwYcL7kmjNFQmRcvCmYThYs2gc=; b=Ssu9qVRg9a5DsMtjRdcNrq70glmkQSjFHd/VaLxtlG/Z08jxPzUo2f8E5WIq5eYxS9 IuN11GQovqeKFlHeWefCzzbbztiwAjzWSJLwoFPdDGiN6ktcQHZfVZrEISDSQC5N6OIQ svarp2S7Ydd5mGxrKJYSBy93IGH8JNtxJucyPchojDIQjYiNDp6ij9G2vzyvB5eVp6XM l/WB3YlP40pG1BJTSABKiaxM+HovJQR5M1CCH3KvsGfOKt3kqmC0Di7r4Nn2w2otvttq NeMpjJeqe2pNnOW+CCEBlw4bN7vQH316LCvaEu8F0y+ihx7R9/1iR7kTXt1+5ziW24q0 w/ew== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=OJaOmz+mK6hp3SWUFkwYcL7kmjNFQmRcvCmYThYs2gc=; b=oXgEsBWIjNM9lpXfep+0U+E2GseOP1ZHXIwcRSNq2VSu+xGYXtxrTGA5K/O5qVgExd lDx9cxVZjnXaYjrPtuUhCTXbmvhiZsKGtizi1G8JKzn9kw9PWUgfwKgED5nLAqz7Zo0t 8VA/rZPqBcunmseHR2ZDQZKmBWzlRZjFverwSNYM+A1Ca8pmqEy6gQcHAHonycT2HOkn X308TKXKo5NUHTN0nJ8z1vB1lloXnRy8QTvkpkkjDxP2+o5mQWSqhRfXQ/87aUlOz6+B jv4VnXmHkldTnje512yRHNxw6NRiDCrGqVx2Hle7DCSMWv44wn8TzPmuSNvF2oT1Hi1S /P/A== X-Gm-Message-State: AOAM530uQPYi/+3Em6iQg0dQrnjgQlx4jiG0qlxBMiAxbzKPEvDOvg7z vAcgZzHtDNVR1DPJyAE2vVNNBP393dg4gxp0dE84IA== X-Google-Smtp-Source: ABdhPJx19/RcDoT24gDcNUmp+p/Lsr6n9TeNsDpvh377FIS+id/bql+jGmB1yV4zXDA8lH1nT97qBrdsA11k68uxJts= X-Received: by 2002:a81:4e8b:0:b0:2e5:9124:2f79 with SMTP id c133-20020a814e8b000000b002e591242f79mr7535367ywb.296.1648168045078; Thu, 24 Mar 2022 17:27:25 -0700 (PDT) MIME-Version: 1.0 References: <306931674.638268.1648141537809@mail2.virginmedia.com> In-Reply-To: From: Bart Schaefer Date: Thu, 24 Mar 2022 17:27:14 -0700 Message-ID: Subject: Re: Load autoloadable function, but only in enclosing function scope To: Peter Stephenson Cc: Zsh Users Content-Type: text/plain; charset="UTF-8" X-Seq: 27615 Archived-At: X-Loop: zsh-users@zsh.org Errors-To: zsh-users-owner@zsh.org Precedence: list Precedence: bulk Sender: zsh-users-request@zsh.org X-no-archive: yes List-Id: List-Help: List-Subscribe: List-Unsubscribe: List-Post: List-Owner: List-Archive: On Thu, Mar 24, 2022 at 12:52 PM Peter Stephenson wrote: > > You're also at the mercy of zsh's ability to convert internal structures > into text and back, which is supposed to work, though not particularly > efficiently. Extending your previous suggestion, then: local -a oldfuncs=(${(k)functions}) local autoloads=(${(k)functions[(R)builtin autoload -X*]}) local funcsrc=(${(kv)functions_source}) { : ... } always { local funcs=(${(k)functions:|oldfuncs}) funcs=(${funcs:|autoloads}) (( $#autoloads )) && unfunction $autoloads (( ${#funcs} )) && unfunction $funcs local func src for func src in $funcsrc; do [[ $src = */$func && $functions[$func] == '' ]] && autoload -r $src done } Handling .zwc files and unusual autoload flags left as an exercise. Particularly difficult is autoloads from "sticky" option scopes.