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.4 required=5.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,FREEMAIL_FROM,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED autolearn=ham autolearn_force=no version=3.4.4 Received: (qmail 9676 invoked from network); 22 Jan 2023 09:59:39 -0000 Received: from zero.zsh.org (2a02:898:31:0:48:4558:7a:7368) by inbox.vuxu.org with ESMTPUTF8; 22 Jan 2023 09:59:39 -0000 ARC-Seal: i=1; cv=none; a=rsa-sha256; d=zsh.org; s=rsa-20210803; t=1674381579; b=d5AkJEM0CMcyZT+wrsGSA5dwQdcnbVSTLbqD3Nln8ENKoIzlgmWanqdsPhavokbo3vZdvInvC/ 8Ed2YBD5fE/hMqraXJwz+mtpx3BrOlPywBOT1gZIXg2NOuuoiNT0ZmGpqvxgZa9Fc67agtyh7J KGmMYMp8et8DGwysdnhME6UcTfDxQcchvl+fkV1op5KXhzWne16Xf4ZSkEILO256Hw/pPi9boW X+9W72nR3OtsPENvHSQrb43DcUTHpYnXzLQTBfX5Z8qokIuyx4z90IQPxbUtpvV7ZrOX7kIYkO AoXZZKXFgyrnu2KE941gIqighAf5zxBnjPR5r9q3i2uxXQ==; ARC-Authentication-Results: i=1; zsh.org; iprev=pass (mail-lj1-f171.google.com) smtp.remote-ip=209.85.208.171; dkim=pass header.d=gmail.com header.s=20210112 header.a=rsa-sha256; dmarc=pass header.from=gmail.com; arc=none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed; d=zsh.org; s=rsa-20210803; t=1674381579; bh=f/rp+pSo7EmfokBFSE+FBbJDPpQ0nouqXTICQWRR7jc=; 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=AF4q8yXO/4xbhxU0wLG8kUnTQCUdmWZlPoKnyjoHufazDiEAO53Li0042tiu26dGPu/rto/Cec IUR8t7kgnz82Dh1jBu4g8+2i0QsbBxGH416yBL14XggN2ps9E8LCHA3WWWlm/ws8HPh5acAnUE epQvGA88ti2I7FXHBJvPtNIpKk3hv9gyhzuL42pozshcm/8qFB6Ge0UtuP6jlJBT7t9FeCpHxO K8NNG88LgXrUBI8y60z6pVmrBq60zjLlRMX/Yk1Lpt8Iw/MlFQxQBc66A2xoKtiRDTC/ZpKsAm MKmLxcka7+P89PreOvOoq4hdXvPgXM1OnDcBmRc3rwQc/g==; 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=T0da8kUyX6sELqjWPZKt1ikCpgPcfYREhXio9jAS5sA=; b=bLXx78n5gdb1ebcT1SH7j8glzo wkgkE7isj2cVzrTJTIjNU7PlDC7wI1XYdX9vc4oeBMIoF7AGXXfc/Rl4YPodz+8qiV/mnZqZnbMM9 cVS+rX5iYpvLF2ObvLQs8TmeJrMm69JpeU99dJFohG5s1GeE7fe+v0k87ZLaSe+IMESxdKglkiZd/ nNBZ+sbdw7dzfYnT3N87TYvPPhZXRlvT3pGoQn98l9UKLExhzgZRmeysElLgwEysSS/NvmYjWte1T 8GpXa0yvdIPJ3RGQ98ELmdLcqusrT5k6sLX6gUOgUOvHm1HCs9dsPgxRfnvkx6uHDxBwdLpyT5Ucv ZetnxAFQ==; Received: by zero.zsh.org with local id 1pJX8U-000JwW-JH; Sun, 22 Jan 2023 09:59:38 +0000 Authentication-Results: zsh.org; iprev=pass (mail-lj1-f171.google.com) smtp.remote-ip=209.85.208.171; dkim=pass header.d=gmail.com header.s=20210112 header.a=rsa-sha256; dmarc=pass header.from=gmail.com; arc=none Received: from mail-lj1-f171.google.com ([209.85.208.171]:44962) by zero.zsh.org with esmtps (TLS1.3:TLS_AES_128_GCM_SHA256:128) id 1pJX7r-000JHe-IL; Sun, 22 Jan 2023 09:59:00 +0000 Received: by mail-lj1-f171.google.com with SMTP id y18so10170906ljk.11 for ; Sun, 22 Jan 2023 01:58:59 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=T0da8kUyX6sELqjWPZKt1ikCpgPcfYREhXio9jAS5sA=; b=SpV/X/rOn78OlKxGiNP9/iYHSIppQVmaUzlo1lN5hK53Jg3T6EBwQdtIrUjIIxT/S3 1AM7cl0uROH/eAooPIGvtrNMuCOKJyCuNk98Kr6Dv/Q6rullpPiOHq6gjjain5XZmd5l 5Jta+49Ns9xJBa2ml9biY/jC2XwNvnFWP2QnyPsctlTEdxd7R3iUwsj9KCBOqJNl6sAa 8X4dGuoyL57PyWLff2dUstpq6zYUyVIv4T0NgKmYEaQ9JQAeubMWUHp8LJJHYdh6mMRe Gav6NGAp+m11R5UknTzNaELNVfKBW2VnQavok/3gJrJlor3GUK7B0GHwt6rYujwNZTF0 7DCw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=T0da8kUyX6sELqjWPZKt1ikCpgPcfYREhXio9jAS5sA=; b=GR/h/s5w8U1K3GYLTCeDzHpcBMtA6z3LQL9/47TGpk0kPmyLAcVb0anjpkeZtri0Gs fMib/s9IeCTCGG5yHvNlq+f1CHoYULE2LLVTfuRr9OzUrEcxqLNSOirgi9ZfkiWL1TKb 5k1Vbrn3mwkvK9qPV8dAFJjbmkeuH9r07uDGdO7rCLYmInzWPeSytosAilZPflmfLlu4 4i+UJ3Yi0c9U/t/3zzhXIiDnbSIDfN80qWRpJEe8Z7r1Ixf1XKY8lUOhGDniX3m1x+Q7 SLzlX5iruJSlDBVvSVylcz7Axs8mgibHyNXechWk1gWf/TqmeuryX7bGJ8xgOTIxCiyB qaXA== X-Gm-Message-State: AFqh2kqv63MwmfKTz8z9Xi526ZiPADb4eAM52r11XeQIbYUEZJ7cQ8xp wmkaNTVBXA9GcYK4gzuN35/HRIR/GSrPjmWzxms= X-Google-Smtp-Source: AMrXdXtcOUlbA2fpbEsZUYC6/FTlBanHAuw/vwBkKY2ww6NjSvN3nb3mEtbQziLObq0LTHGTEcYoBAU9y/c1aB89Vvw= X-Received: by 2002:a2e:b70e:0:b0:287:647b:e049 with SMTP id j14-20020a2eb70e000000b00287647be049mr1000090ljo.14.1674381538601; Sun, 22 Jan 2023 01:58:58 -0800 (PST) MIME-Version: 1.0 References: In-Reply-To: From: Roman Perepelitsa Date: Sun, 22 Jan 2023 10:58:46 +0100 Message-ID: Subject: Re: A way to untie -T vars? To: Pier Paolo Grassi Cc: Bart Schaefer , Zsh Users Content-Type: text/plain; charset="UTF-8" X-Seq: 28709 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 Sun, Jan 22, 2023 at 10:34 AM Pier Paolo Grassi wrote: > > and what your solution could look like? I would use something like > ___untie_array and ___untie_scalar that I would never use outside > the untie function, but I wonder if there is a more general solution Something like this: untie() { emulate -L zsh case ${(tP)1} in (scalar-tied) set -- $1 ${(P)1} unset $1 typeset -g $1=$2 ;; (array-tied) set -- $1 "${(@P)1}" unset $1 set -A "$@" ;; (*) ;; esac } Positional parameters already shadow same-name parameters from the caller, so we can safely use them for locals. I've made one unrelated change here: replaced `eval` with `set -A`. It looks simpler, and incidentally fixes a bug with the handling of empty elements. If you wanted to turn this into a library function, you would need to handle more types. Things like array-local-tied (simply ignore "local") and scalar-tied-export (make sure to export the scalar). This should be straightforward. Roman.