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 5e7d1f73 for ; Thu, 7 Feb 2019 07:37:25 +0000 (UTC) Received: (qmail 9249 invoked by alias); 7 Feb 2019 07:37:09 -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: 44048 Received: (qmail 7198 invoked by uid 1010); 7 Feb 2019 07:37:09 -0000 X-Qmail-Scanner-Diagnostics: from mail-ot1-f66.google.com by f.primenet.com.au (envelope-from , uid 7791) with qmail-scanner-2.11 (clamdscan: 0.100.2/25112. spamassassin: 3.4.2. Clear:RC:0(209.85.210.66):SA:0(-2.0/5.0):. Processed in 1.754731 secs); 07 Feb 2019 07:37:09 -0000 X-Envelope-From: sgniazdowski@gmail.com X-Qmail-Scanner-Mime-Attachments: | X-Qmail-Scanner-Zip-Files: | DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to; bh=u08xV2dijP5jOyfh9piTgdaHIEsLCrN8kIS3MaIfwp0=; b=hXPCWhaphHnZmtfOo/JS0M2KpimqrKXUMH/MH3xCz+tmXvmc/E65CNig0mESlR+Erz yjVGhrPA9IqhsFMTz/oJLJE2gAGlc9bOgpo/gKuO5uyiXR0MTEz0U7eYDvM2Kih5f+s2 dJ9iGv3YaUb1YLK1+Dk9AGsA84FTXh71Vy5M1pRa6SGmz9Nb7rU8W9bnlHDqqLJsIwXG ap8iqtSJ4cGUJlD5duKw3UePdX4lRZa8Ud5YqyxXIETZmPAvbib4yq49GiL4ukFACbiu QbsdrfXQCyUd3dqrT71IdyClF1H55Wm1GG/S8h+yz8FV3K12X4EyfkHsVJXmQn2Yh2yt 4hgw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to; bh=u08xV2dijP5jOyfh9piTgdaHIEsLCrN8kIS3MaIfwp0=; b=cIR1ySGKViVq0YfDfajtb69pXVEzRiT2KqMkTn2xmWKtVR6ZB0SDqRJFM1BitbpqlK ONDAUb08swQ+6ScXj7AWMRRYMd/tgNA3TffwqjLnap+p1/ZHSTiMz3TR5igX9v12Jnn1 jcQ/v0b4BI7UIRDEBye/gxNeSs6u++LJ29qcQKqYemdanKRIF5Y21DMyfPHulz3d5f56 IBl9Y+XwUmCTYbI1GqZWZ0Tj4wralLNTs7tordBKQ/RR9jVUOdNnISBJ8C0JAZBGoupQ 12HWoQtmCabPgknGgGYmIopgzS6xBkhUrDG/iqWwujKqNk2N9S+bGcb0vBqzIvjZRzlR hOeA== X-Gm-Message-State: AHQUAuYlOS0zNE+/zeC1p9VQT94A7ZG3qI1HKOAC7ntNT1wRjxo2vPZk 9KlOTwswuYDzrQFPJxrqpK3nw6A8Wu/fZJZM33YpULAH X-Google-Smtp-Source: AHgI3IaF84C6jFpC7e2y1/ratUyDK8IgQNA2kSVcvOTxZIKDn3uU4h/z27t2Wz4bP9Qhe1xmawlFy8uhB+SOoxS1Qvo= X-Received: by 2002:a9d:17ca:: with SMTP id j68mr7546893otj.268.1549525023549; Wed, 06 Feb 2019 23:37:03 -0800 (PST) MIME-Version: 1.0 References: <20190203215711.sofrde7s4lb7nttb@Daniels-MacBook-Air.local> <20190204061946.dmygdd7n5c2zoi7d@Daniels-MacBook-Air.local> <20190204212123.mpzkt4bpajx2cxpw@Daniels-MacBook-Air.local> In-Reply-To: <20190204212123.mpzkt4bpajx2cxpw@Daniels-MacBook-Air.local> From: Sebastian Gniazdowski Date: Thu, 7 Feb 2019 08:36:50 +0100 Message-ID: Subject: Re: [PATCH] Support true colours via termcap interface To: Zsh hackers list Content-Type: text/plain; charset="UTF-8" On Mon, 4 Feb 2019 at 22:22, Daniel Tameling wrote: > > On Mon, Feb 04, 2019 at 09:11:04AM +0100, Sebastian Gniazdowski wrote: > > On Mon, 4 Feb 2019 at 07:20, Daniel Tameling wrote: > But I also noticed that my patch breaks the is_default_zle_highlight = > 0 code. It doesn't set use_truecolor for the #ffcc00 syntax. Could you restore the is_default_zle_highlight to its functioning state? > But that > is not the only problem: with a true colour terminal, one expects > colours beyond 255 to work, e.g. via fg=273. In that case one also has > to use the true colour escape sequence. Then also colours in the range > from 8 to 255 should use this sequence. But colours from 0 to 7 should > probably still be the standard ansi sequence, like ncurses does it. > > One could achieve that by modifying the if(use_truecolor) checks when > the escape sequence is constructed manually. Alternatively, the patch > below should accomplish the same. Now zlehighlight.ztst fails at the > same point as without the patch for xterm-direct. It seems that this > is because the non-termcap code emits only the standard true colour > escape sequence, which cannot be modified like the other ones. > > -- > Best regards, > Daniel > > > diff --git a/Src/prompt.c b/Src/prompt.c > index f2b3f161e..bef53b148 100644 > --- a/Src/prompt.c > +++ b/Src/prompt.c > @@ -1652,6 +1652,13 @@ match_colour(const char **teststrp, int is_fg, int colour) > colour = runhookdef(GETCOLORATTR, &color) - 1; > if (colour == -1) { /* no hook function added, try true color (24-bit) */ > colour = (((color.red << 8) + color.green) << 8) + color.blue; > + /* > + * If we have a true colour termcap entry and colour > 7 > + * use termcap; for colours 0-7 termcap usually emits the > + * standard ANSI sequences; we don't want that. > + */ > + if (tccolours == 0x1000000 && colour > 7) > + on |= is_fg ? TXT_ATTR_FG_TERMCAP : TXT_ATTR_BG_TERMCAP; > return on | (is_fg ? TXT_ATTR_FG_24BIT : TXT_ATTR_BG_24BIT) | > (zattr)colour << shft; > } else if (colour <= -2) { > @@ -1668,7 +1675,7 @@ match_colour(const char **teststrp, int is_fg, int colour) > } > else { > colour = (int)zstrtol(*teststrp, (char **)teststrp, 10); > - if (colour < 0 || colour >= 256) > + if (colour < 0 || colour >= tccolours) > return TXT_ERROR; > } > } > @@ -1692,6 +1699,16 @@ match_colour(const char **teststrp, int is_fg, int colour) > */ > on |= is_fg ? TXT_ATTR_FG_TERMCAP : > TXT_ATTR_BG_TERMCAP; > + /* > + * If our terminal supports more than 256 colours it is > + * most likely a true colour terminal (it's not always > + * 256*256*256 colours: sometimes tccolours get truncated > + * to the largest short, which is significantly smaller); > + * if we don't use termcap, we want to emit true colour > + * escape sequences for colour > 7. > + */ > + if (tccolours > 256 && colour > 7) > + on |= is_fg ? TXT_ATTR_FG_24BIT : TXT_ATTR_BG_24BIT; > } > } > return on | (zattr)colour << shft; > @@ -2039,8 +2056,7 @@ set_colour_attribute(zattr atr, int fg_bg, int flags) > * highlighting variables, so much of this shouldn't be > * necessary at this point, but we might as well be safe. > */ > - if (!def && !use_truecolor && > - (is_default_zle_highlight && (colour > 7 || use_termcap))) > + if (!def && (is_default_zle_highlight && (colour > 7 || use_termcap))) > { > /* > * We can if it's available, and either we couldn't get -- Sebastian Gniazdowski News: https://twitter.com/ZdharmaI IRC: https://kiwiirc.com/client/chat.freenode.net:+6697/#zplugin Blog: http://zdharma.org