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, T_SCC_BODY_TEXT_LINE,UNPARSEABLE_RELAY autolearn=ham autolearn_force=no version=3.4.4 Received: (qmail 26341 invoked from network); 22 Aug 2022 00:11:40 -0000 Received: from zero.zsh.org (2a02:898:31:0:48:4558:7a:7368) by inbox.vuxu.org with ESMTPUTF8; 22 Aug 2022 00:11:40 -0000 ARC-Seal: i=1; cv=none; a=rsa-sha256; d=zsh.org; s=rsa-20210803; t=1661127100; b=WE+lTYmLZORETf0LuWnethFsonyafbplrw2fOwr5glgh5glDtL6N731Uq5UScPDu0XaHtd1xZc HaykxdekELVOIOee56IkVwM8v16swKJzVetNptlxVTozby14WP69crNfwp/ux0dGvzl1txp0ab aD2lCZnyK14M2FF6ISeDSh31oPOterrV9okdWeAl5njF+qCzLuMU3IYFHCUSPbKmF3b99f6Mb3 99NNN6jn/mXd2i+6DkH8tzJkI07/dFT2FeBm8/6duPsWl/UlGAAbK4DMcOn7s1beVFT9/HRBjq dFI7YvDh41pLYREGFL720ExauJRcrg3Oo/LflPL30gnXGg==; ARC-Authentication-Results: i=1; zsh.org; iprev=pass (mail-oa1-f51.google.com) smtp.remote-ip=209.85.160.51; 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=1661127100; bh=bw1zxQC0NqC22STyiPD8ZBy7Zg5YnJhex7sVDLPbpXc=; h=List-Archive:List-Owner:List-Post:List-Unsubscribe:List-Subscribe:List-Help: List-Id:Sender:Content-Transfer-Encoding:MIME-Version:References: In-Reply-To:Message-ID:Date:Subject:Cc:To:From:DKIM-Signature: DKIM-Signature; b=BXtyN8FF54C42mg7GK3kk3MY+5yioZA2Krf37UlrpfRRIXF1oJ0qQxFzSkYBCj734jdc9mUs/s N2/PA34ZOclHdhETNTumNGMZZkZObOEgZ5+QHx37LgUwLmwfyIaarTPgRR94LpnvTioQxRIwxM v8++eRooKVInoTdWZmSvX8DzgSBZ46QBvOQ9yRyJK+m+CVgMGH3cP36kuBGnxZSNVaIusXzhk7 nwxlVUuojs/zO/OyzQ4utGNvumed8Ot7b1zVk50lIgnzJmJqcnY0tMp6mbIOMbT9BVy5Y/bZMa iEME6UWm7NLoWHubk/ZXUaq/oyh8IMFlneu8wDXXmTUUiQ==; 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-Transfer-Encoding: MIME-Version:References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From: Reply-To:Content-Type:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID; bh=wql+0T4WEexmlZeMXdsKSIUwDtMW5zXKMJS1GEhfrNw=; b=fDUktTG8pmIjKX/BuIMoZEy3BI cjWWa+WvOpdrRUfGoObtIH7TgLp2Mo6qMlwTLoMRi8D5E5BWXYr+bSboM5b0aEQ2wlPWwyyJuN8to IYCc8dKAOSpHabYwmYpmJdZF7NvOMEAQOSmsBeYY7CXwO4/Ha0bMxLoLp+azcgaFatHizJ5A7fUj3 gEIWABbaFy/BFpcGRejJ+WmE64pnXkXM3SK2DpNBktXIAmiqHgti+cvEMbRTvVcFDRlMkU964wjLv u7nuDezd/TJ28E7JX/T3BUmQGcM/fobmGYq8d2PHsyaAaZ/+Vr8cA2J8taOSdgswJAvP8bo5TWcIC SI7v4dJg==; Received: from authenticated user by zero.zsh.org with local id 1oPv2Z-000G1E-6w; Mon, 22 Aug 2022 00:11:39 +0000 Authentication-Results: zsh.org; iprev=pass (mail-oa1-f51.google.com) smtp.remote-ip=209.85.160.51; dkim=pass header.d=gmail.com header.s=20210112 header.a=rsa-sha256; dmarc=pass header.from=gmail.com; arc=none Received: from mail-oa1-f51.google.com ([209.85.160.51]:44651) by zero.zsh.org with esmtps (TLS1.3:TLS_AES_128_GCM_SHA256:128) id 1oPv2G-000FhA-Ow; Mon, 22 Aug 2022 00:11:21 +0000 Received: by mail-oa1-f51.google.com with SMTP id 586e51a60fabf-11c59785966so11109300fac.11 for ; Sun, 21 Aug 2022 17:11:20 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc; bh=wql+0T4WEexmlZeMXdsKSIUwDtMW5zXKMJS1GEhfrNw=; b=pQrBlQnZx8lMDdHu6PYWk009UovaMBCOjIlyhq3wss9nklN3tOWClpLUfcnbf5rD83 6lsjFXq08w+Pswq/Duc4yH4FbUSOD17I7t+zbhJxvrDzVD45DuHIPAERx3hU0Y/W4x6S TatPN4fmUkDxCoHnn9rbTUUQqB3M+yR8J7ffQ8D58vig2u75242o58yvrD54ScWghkQm pkOOmkriJWgAeQ6iPJNKKwbM6jMMP4Z5RHTA+hz2rt9GViOh9FiYMJIg5Uw0mySuSU02 qC5sC2exMyq/H7rX2Zqh3li6+xEMK81pBDbyiJ/Ni887l6/tGT8aG/Ytt6F7FIiGXr4e oTwQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc; bh=wql+0T4WEexmlZeMXdsKSIUwDtMW5zXKMJS1GEhfrNw=; b=42eg9Jm50Zm9L+JVICEqrng06S4/b+xnsctOypxHeiuWTsUbD5KB2zknVO2+UzCQXJ GlCUmVhbYQOZh06zQCQnLDO9Lxu6L4XVi0maYmloiqX7lt4OkmexL2LMMFaPfHViXTpL 9/+yX2LXBZtcbwyuA5vXf+htqoJFoxQIdOvdMslK1wl9thrD2Tr/htWTp4evLlb0paBn F9aLc7X/TP4RGX+8iE6r7COsmOiVatv8skcXpT1X5deF/eDjn6zGLTAQaMN0ktAiXGD5 MUl0oS+rJsffHY2ve9mu1xaCvFOWUY85CM4T/XLYkm9s7xTJKmTnGphHX9fwUtT9xPLC dzyA== X-Gm-Message-State: ACgBeo3pwJBkH9XydZmYrQX3/UWeObVzlruILXfwPLNmtV5p60NT9l/2 hHtHiBtZUivkMz8utI04uO/k3C6mw6c= X-Google-Smtp-Source: AA6agR6BDAECdke83yVaeSCsZyPWVNy4udbNvMgCSTkmhbv54bqwas7nKoKMp1hrbQwaQg0jbwPQBw== X-Received: by 2002:a05:6870:d58b:b0:11d:482e:347a with SMTP id u11-20020a056870d58b00b0011d482e347amr1664894oao.293.1661127079401; Sun, 21 Aug 2022 17:11:19 -0700 (PDT) Received: from localhost ([2806:2f0:4000:94d:4ae7:daff:fe31:3285]) by smtp.gmail.com with ESMTPSA id q2-20020a9d5782000000b0061c9ccb051bsm2612648oth.37.2022.08.21.17.11.18 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 21 Aug 2022 17:11:18 -0700 (PDT) From: Felipe Contreras To: zsh-workers@zsh.org Cc: Felipe Contreras Subject: [PATCH v3] prompt: support generic non-visible regions Date: Sun, 21 Aug 2022 19:11:17 -0500 Message-Id: <20220822001117.74365-1-felipe.contreras@gmail.com> X-Mailer: git-send-email 2.37.2.351.g9bf691b78c.dirty In-Reply-To: <20220811230901.471640-1-felipe.contreras@gmail.com> References: <20220811230901.471640-1-felipe.contreras@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Seq: 50491 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: readline uses \001 (start of header) and \002 (start of text) as markers to delimit a non-visible character zone, which are necessary to calculate the width of a prompt. In zsh we do this with %{ and %}, but we could support \001 and \002 as well, so that a function which generates output for the prompt can use colors in a way that works for both bash and zsh. This additionally has the benefit of allowing prompts without PROMPT_PERCENT to use colors correctly. Signed-off-by: Felipe Contreras --- Since v2 I added checks to allow nesting of these non-visible regions as Bart Schaefer suggested. Interdiff against v2: diff --git a/Src/prompt.c b/Src/prompt.c index 803937029..ec74cc835 100644 --- a/Src/prompt.c +++ b/Src/prompt.c @@ -887,11 +887,15 @@ putpromptchar(int doprint, int endchar, zattr *txtchangep) } } } else if(*bv->fm == 0x01) { // start non-visible characters - addbufspc(1); - *bv->bp++ = Inpar; + if (!bv->dontcount++) { + addbufspc(1); + *bv->bp++ = Inpar; + } } else if(*bv->fm == 0x02) { // end non-visible characters - addbufspc(1); - *bv->bp++ = Outpar; + if (bv->dontcount && !--bv->dontcount) { + addbufspc(1); + *bv->bp++ = Outpar; + } } else { char c = *bv->fm == Meta ? *++bv->fm ^ 32 : *bv->fm; Src/prompt.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/Src/prompt.c b/Src/prompt.c index 092de63a4..ec74cc835 100644 --- a/Src/prompt.c +++ b/Src/prompt.c @@ -886,6 +886,16 @@ putpromptchar(int doprint, int endchar, zattr *txtchangep) bv->bp += strlen(bv->bp); } } + } else if(*bv->fm == 0x01) { // start non-visible characters + if (!bv->dontcount++) { + addbufspc(1); + *bv->bp++ = Inpar; + } + } else if(*bv->fm == 0x02) { // end non-visible characters + if (bv->dontcount && !--bv->dontcount) { + addbufspc(1); + *bv->bp++ = Outpar; + } } else { char c = *bv->fm == Meta ? *++bv->fm ^ 32 : *bv->fm; -- 2.37.2.351.g9bf691b78c.dirty