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 17420 invoked from network); 28 Feb 2023 15:55:47 -0000 Received: from zero.zsh.org (2a02:898:31:0:48:4558:7a:7368) by inbox.vuxu.org with ESMTPUTF8; 28 Feb 2023 15:55:47 -0000 ARC-Seal: i=1; cv=none; a=rsa-sha256; d=zsh.org; s=rsa-20210803; t=1677599747; b=STbNMO3cMZ8UktMt7KBEFu+OBh3WaLgctWi4+AKBnKQsZwc8L+FmjJAsbx2rYlm5a96QtoLKTV +wZaxnxnXB5K+58586nAb8GH/7z6onD5sPo+uRHsqVv7/XNkleMm8k4+2SJf21h9MRHWTEW0+j I+/oiS/WIllcV6Btx4r5sIRHAxZxuyeYS8Bo2zCGICrp81pjfWRe+fRDh79FO7dUhGS+FTrsTK YHkK2fP9pCe9jxlqgQCxPe0K+ZBX+rJp7UUR0zAwGRhiHX61tJOAJE4yJMoh7hYaga4VVXpPnz +dgBpibdvhSLbTKNrGYhWNtscQmcq+pIiuHOhX4boARBJw==; ARC-Authentication-Results: i=1; zsh.org; iprev=pass (mail-oa1-f53.google.com) smtp.remote-ip=209.85.160.53; 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=1677599747; bh=Ixjz4jeD+O3nBSWkqKLYKY3kGmONX5QNdlIXk9TOZQo=; h=List-Archive:List-Owner:List-Post:List-Unsubscribe:List-Subscribe:List-Help: List-Id:Sender:Content-Transfer-Encoding:MIME-Version:Message-ID:Date: Subject:Cc:To:From:DKIM-Signature:DKIM-Signature; b=R1WFxXggRdh4jlgLbkgJQLMm7GVZ3UmgQrsFR32eSBQrjfKJjr7bIsm6vKlTxAzwEo4qWTjGiq mVzpD7WaM7ygKV6y1zJTVTGZ0KiYXGnnT7F5nSWXEPS4ir2iEXS6eZg2fb+7Dm35FSIdRyae1K K4730gTTji7bSJOIlNWuBg6bGnhq8EMp+HyuCjC86YNp44Nt8eGVzFugB0TOKfkokoOKYavmdm q69rDJIDTrjDZyqAjqnfMWMpmed5MvgHKmFh9c1YNjTxhTsr3Q2rr03kpZQE45tqR+unYYl3Q5 P4sQRzYDfpjxvGhz/d6D31Mr0eC74Dw5V5wUGxQtswaffg==; 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: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:In-Reply-To:References; bh=OKexOUCayLnUcRuM/LMxKS99BnL4chJN2Y5n4TfVYdM=; b=DJOyQzAu8xJ+DkjeJrOyY6zok4 Om6v4gOSz+sqMRjIgwaPMzpMiGM+rDZT5s/Su/5HqBF7gqqPfpsF6DIYTENTFsOQIlSMfTjkFznQ9 2oO/U0j8J0q1docOFoiCz0tXi9NiN8BmHLIhx7Y98I0Zhs4N2Qce50e5qI9oXKzR48qHxzuf9MEsb /8+9ncTYSEE5r7NLqmTIGm1poRHtIDkF5eMC90bg+xlXaqZ+oNknZbVv+95i7nSKeybHAmNb5GvYG HUNdcEnOXxhbTlhbfj/UKYzGY5sAEltWWen4ZpJXxtY0MMuwr947oYb/jkRHjWKEkI0O/Utcg8sA8 xXyQxJFg==; Received: by zero.zsh.org with local id 1pX2KO-000G6v-Hf; Tue, 28 Feb 2023 15:55:44 +0000 Authentication-Results: zsh.org; iprev=pass (mail-oa1-f53.google.com) smtp.remote-ip=209.85.160.53; 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-f53.google.com ([209.85.160.53]:41973) by zero.zsh.org with esmtps (TLS1.3:TLS_AES_128_GCM_SHA256:128) id 1pX2K8-000FnK-KW; Tue, 28 Feb 2023 15:55:29 +0000 Received: by mail-oa1-f53.google.com with SMTP id 586e51a60fabf-172334d5c8aso11336567fac.8 for ; Tue, 28 Feb 2023 07:55:28 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=OKexOUCayLnUcRuM/LMxKS99BnL4chJN2Y5n4TfVYdM=; b=EB1korW2TW+VkGDs9eq5qVb04d/sPzbtn6wQ7Tkh2/Blms6295vTAXal0iuH7n0L6A rgHwhZVxmnPWA22igNqrMmR75D8qHjUR/mrSAhIkGhVkclCgOXA9UK6kS6tMfsQhQK93 Nx3C/cNcIqw0Oh+CCpS2B58TP/DiMGrDlbzO8Fa1QaSGuaEOFrAVwr7U56yhdTOJ9MXi G07L8uG9QJZ8tJJSQAvQAFX2VT7ooLlkwJu5ICGItky914gNUBcZ00hzplT77JRZRV7m tMMumJ9zBPu1g3t6YGN/K9GGlluxRxXE4qMvBa4hBvRMJsgGN16zaSvy6Wn7IYUpqjPt lVLg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=OKexOUCayLnUcRuM/LMxKS99BnL4chJN2Y5n4TfVYdM=; b=1XuaVOvFpNwYCudbto9Vt/do0LLT8wVASJjNmXl61NxFueztIXNS+JGN+XUb1ShOEw /qSe9QTg64NT5R51+vZYGAKKAvjfVh88cxzH45skCfgB95DKkoKZOlM1pOAztm5ojfX+ 8Th+GKUGd1WRamX2fQirXx086Rx2aEpvfLgDluC7TkuqbjGKWw1xX71ByZZtRdiuN6Jk 5vhw+v977GPayVj3e/IRdjbE+Hetkcr/+qsLUZPPeLs6gzjfqeFw/5aUC+hwhJHrPrLH i3JTams76BebHirZSxQMnMDJ63YJrpnV09dFkj+6iLBKTrYmsZCgiWKOAzcS74z483MJ y5RA== X-Gm-Message-State: AO0yUKXNpBxKWrD2jOH2GnjNJkHaBM4eWWaC3+HYPpwSAK35uOp+X352 yPOO+xd79yE8DC1W3AbL5GV1d06BHjQ= X-Google-Smtp-Source: AK7set8wnOxt991J2XBdI/fVA1Q0JgD5RbiV1Mjqrxld413IIxhLeJZh0jpHmMumWaaBQt0Iyc2QwQ== X-Received: by 2002:a05:6870:d29a:b0:172:a2e9:cbe8 with SMTP id d26-20020a056870d29a00b00172a2e9cbe8mr1760008oae.18.1677599727166; Tue, 28 Feb 2023 07:55:27 -0800 (PST) Received: from localhost ([2806:2f0:4060:3465:4ae7:daff:fe31:3285]) by smtp.gmail.com with ESMTPSA id v1-20020a056870e28100b00172473f9fe0sm3357166oad.13.2023.02.28.07.55.26 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 28 Feb 2023 07:55:26 -0800 (PST) From: Felipe Contreras To: zsh-workers@zsh.org Cc: Bart Schaefer , Roman Perepelitsa , Felipe Contreras Subject: [PATCH v3 try2] prompt: support generic non-visible regions Date: Tue, 28 Feb 2023 09:55:25 -0600 Message-Id: <20230228155525.4186428-1-felipe.contreras@gmail.com> X-Mailer: git-send-email 2.39.2 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Seq: 51493 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 --- No change since the previous try. This is how I tested the nesting: $' %{\e[31m\x01\e[31m\x01\e[31m\x02\e[31m\x02\e[31m%}master%{\e[m\x01\e[m\x01\e[m\x02\e[m\x02\e[m%}' And for the \001 and \002 reference: https://git.savannah.gnu.org/cgit/readline.git/tree/display.c#n340 Src/prompt.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/Src/prompt.c b/Src/prompt.c index 39fcf5eb7..8d7a38089 100644 --- a/Src/prompt.c +++ b/Src/prompt.c @@ -877,6 +877,16 @@ putpromptchar(int doprint, int endchar) 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.39.2