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 746c5b6c for ; Fri, 11 Oct 2019 08:21:19 +0000 (UTC) Received: (qmail 4490 invoked by alias); 11 Oct 2019 08:21:11 -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: 44815 Received: (qmail 7012 invoked by uid 1010); 11 Oct 2019 08:21:11 -0000 X-Qmail-Scanner-Diagnostics: from mail-vs1-f51.google.com by f.primenet.com.au (envelope-from , uid 7791) with qmail-scanner-2.11 (clamdscan: 0.102.0/25598. spamassassin: 3.4.2. Clear:RC:0(209.85.217.51):SA:0(-2.0/5.0):. Processed in 1.301665 secs); 11 Oct 2019 08:21:11 -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.217.51 as permitted sender) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:from:date:message-id:subject:to; bh=Pr00J88BhVx7iXgBRBtZ0RACWy3bbZmKUXxJO8ml9NE=; b=P/TnnnH/38+cBqERWdzHuhUJFV31udlAOUD7duIyO4Sy3PoO8eb0/SNeUVNppAutfD qX2N79t/0dv4/SzaExysDQHd2e2Smzz6v/RTJKwEr897QRAnbYw483AzgGE7ZUsrij+z lCuSUHJO5SBqdJSYOyApL8rthn9vnl4ABohfL/RDMEZBxdDh5NJeTA5afwzOoHvkA/gM nvZgvUxhhKwQlqlLPPSm9s+sX2yCYIc5mjhOGlSOgcXDnWz5FYA4ZSyZYoYQqljkAjx+ QXC+6DH+R8OmEWmMIax+Rbd9k3EfUckqM/26MX41DN5qxvTsjBKdQZcquMiq9ceH0CBI GWjg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:from:date:message-id:subject:to; bh=Pr00J88BhVx7iXgBRBtZ0RACWy3bbZmKUXxJO8ml9NE=; b=rkdYb0vGXXxo3fLxQsIIdcOjh6tKpsQyUP0ILdOBXuqnYVytGfowd4bDAozPHFDMRi RhEbY3hEWDEac0w/msKHNBmBgyQvBteR4JQoNmVXIdjeNOzNh/30xHXMi6t3pk9/TBLW bFrj7kVSMMEO24xJOaq69O4OsKf4VqQqZTp14zLqxk/pH8RZXiFdamnc7WHpQeC/qyrO sBWRE70M0n4+Gu9QXoebz83UHi4k1fO9rDuclcPN+8DBNJvdu9ark1VODNPJ2ZrTfRYw xT4RbDBG82LfZAIS0OOLYj22kl3bMWVQ4IdBJ33tIH+GdRPA4gxnvy0+DWyjozFnozYO 64Cg== X-Gm-Message-State: APjAAAXc60bPPovASEl03fMF1/pqkjX1U2QZ0oj47bl8auRhILGmsoXH Pl/WcLpzmgOptT1Fnk4KpS6LKRCDPh0vpXs69GLfZZBs X-Google-Smtp-Source: APXvYqzr/iebez/NqgKlmC3MLdnyjz0ZL8n1O3JBlMJdYmwf4IIX66Sw8Ehjq9qZtV/0qEjFIfUdjndpFGoj1ZQw1c8= X-Received: by 2002:a67:c783:: with SMTP id t3mr3989316vsk.113.1570782035978; Fri, 11 Oct 2019 01:20:35 -0700 (PDT) MIME-Version: 1.0 From: Sebastian Gniazdowski Date: Fri, 11 Oct 2019 10:20:25 +0200 Message-ID: Subject: A tip: a technique to limit the # of global variables To: Zsh hackers list Content-Type: text/plain; charset="UTF-8" Hello, when writing a plugin one often needs to keep a state during the Zsh session. To do this it is natural to use global parameters. However, when the number of the parameters grows one might want to limit it. I've discovered a way to do this. Only a single global parameter per plugin might be needed with it: typeset -A PLGMAP typeset -A some_map typeset -a some_array # Use PLGMAP[state]=1 some_map[state]=1 some_array[1]=state can be converted into: typeset -A PLGMAP # Use PLGMAP[state]=1 PLGMAP[some_map__state]=1 PLGMAP[some_array__1]=state i've did this in Zplugin reducing the # of global parameters by 21. It's really unproblematic, I was using vim patterns with back references to do the conversion without any back firing. -- Sebastian Gniazdowski News: https://twitter.com/ZdharmaI IRC: https://kiwiirc.com/client/chat.freenode.net:+6697/#zplugin Blog: http://zdharma.org