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 3af84acd for ; Thu, 8 Nov 2018 03:49:05 +0000 (UTC) Received: (qmail 10140 invoked by alias); 8 Nov 2018 03:48:52 -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: 43805 Received: (qmail 15569 invoked by uid 1010); 8 Nov 2018 03:48:52 -0000 X-Qmail-Scanner-Diagnostics: from park01.gkg.net by f.primenet.com.au (envelope-from , uid 7791) with qmail-scanner-2.11 (clamdscan: 0.99.2/21882. spamassassin: 3.4.1. Clear:RC:0(205.235.26.22):SA:0(-1.7/5.0):. Processed in 1.642156 secs); 08 Nov 2018 03:48:52 -0000 X-Envelope-From: SRS0=0+Q+=NT=yahoo.co.uk=okiddle@bounces.park01.gkg.net X-Qmail-Scanner-Mime-Attachments: | X-Qmail-Scanner-Zip-Files: | X-Virus-Scanned: by amavisd-new at gkg.net Authentication-Results: amavisd4.gkg.net (amavisd-new); dkim=pass (2048-bit key) header.d=yahoo.co.uk X-Greylist: domain auto-whitelisted by SQLgrey-1.8.0 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yahoo.co.uk; s=s2048; t=1541648911; bh=ngI+HXvU4JN3uoXrPyQ+GeuxqWiwEXmFcxf7/PQJezg=; h=To:From:References:Subject:Date:From:Subject; b=kD+rrbSplb4yjCflPGfqHvALhSyIA6QSLUfAgveLEF2a5kwPsGmMuQsNWDNqiymzKY8nuBkU8FoIKCNvPSvS1VNglMQEUKSTYO8Zi6Uw2h0mA47PMBZskGROYSZEHMxTZ+ZMh5hZIV/wa9pfqoq39On4lqcpjN8WoKX5D7g+jMQM/4pCy5HdpadhEZM8JahKDNWG9qF77nZMHN8CuEQt29+hujvXzbaHi+NMIs+pHZ72PH3DMcVMizLdfZm0mBczLmiyvtgyirlZDz8pQcs5TuMoq2nNNzA3rlLyCG7hpuKWy++f8551kF+xBAyCY7JVafIXcl2KA6Xwzzd/Dw8wYQ== X-YMail-OSG: Lk2x040VM1npYw51A.UMRVrNVyD9uaOeaRJjnsXlTITQlJVkQFlxn6rKZZwJGjI vOUOehRdvtLslRq1Vl92pII3JoaNJr555GyubHwSjf47xnmBjbN8lAtDXqaWxMShMmNnYmpsaDV9 iVsjmrusrfot0d9w_x6d12AYmTVCVaC9Nnxl6MkS2c7QFLrHLC3KUh2LRsJHmQ6TKnn4B3tdIJo2 0eUyzdt0yZWxTDBh5Sj_8.9LLvnNmU3BedCwAdZU8qhcg9Xu8BfuBla3crMRFqdRO3kFWpca70yW LkOy4XThLJoo9leLfjtCVphQtp4PujEB3re691v5RzL0pel.4FwltX9YbIb6oAWEKz90k9wNM_sl zZKuor0QvaG05ElbqgwoEtTOCUprBfWKxpJv7aPmhaOjYAv.I4zxeaVv41Aq.x_CTqCJzxspCQL9 9TV0DG1m85s9ioEP9ME9vwZuYCCgSVIcUnksCCRSBTKVm9mosNqyilYmGN0wssJ8GNl3MVKfAVz5 .TPu57f42xlU0cun2_XQzPfxbydcBoju_FfMkOjPXT9b7ADNjHHPXIaF81cHSWNBk3f4EexUU52X IuEaUMJGSJq9H..fwd50q9Dxmxb6P7_DgwKmn2I78TazuVr9um.whaqevZviwgSEiVDW1WynQxKY IIeXpZxHrOUiNPPXXS.fmBU7MeeyT97ggztuOz3CTpWdAWJSNhSt7EnM6Tu65EiJkHmJSbfrPqOK bZOI5jYUZ24.O3z380Gd69KEAyA.48HmnZ6mS2gnfXVCSjweZyAfHiR1i6km2HZQUp97QU.KZz35 bDUd9smRevAwpp6.g9l6WPVA5KlTKgopj7oZkNJkuf2nidUPZzRi9T67tBdbhzt_fhKBX4KYxeEY qAssa4_Mu7ww0k2jFGF0PfSXttKzsWoZx41T8.OziETV_KEb8ua1m_111FB21wH9SHMqt6u9kAFc O9.WSVzxaqVu5YzzIn1tyInI0aNnUlRNk28xdrGdoLPpS04VRizQblD4tyrIocoH5icy3LkknkHQ ciiKaqaZKmvsTyJU- To: Zsh hackers list In-reply-to: From: Oliver Kiddle References: cc: Sebastian Gniazdowski Subject: Re: [BUG?] If true-color is used, overlapping colors do not work MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-ID: <2916.1541648904.1@hydra> Date: Thu, 08 Nov 2018 04:48:24 +0100 Message-ID: <2917-1541648904.343056@V1WL.VCjm.HHYZ> Sebastian Gniazdowski wrote: > I was testing on Linux, via docker. $termcap[Co] shows 8, the same > $terminfo[colors]. The zsh/nearcolor fails and maybe it could fail a > little better? I admit that black, as opposed to the default colour isn't clever. The patch changes this. > Color 30 is apparently black. Maybe zsh/nearcolor could use (compare > against) first 8 or 16 colors when $termcap[Co] <= 8? The first 16 colours vary between terminals and are also commonly configurable so nearcolor never compares against them. There is an escape sequence for getting colour definitions but I don't think trying to use it gains us much. Oliver diff --git a/Src/Modules/nearcolor.c b/Src/Modules/nearcolor.c index 128658e20..7ebc75365 100644 --- a/Src/Modules/nearcolor.c +++ b/Src/Modules/nearcolor.c @@ -117,13 +117,14 @@ mapRGBto256(int red, int green, int blue) static int getnearestcolor(UNUSED(Hookdef dummy), Color_rgb col) { + /* we add 1 to the colours so that colour 0 (black) is + * distinguished from runhookdef() indicating that no + * hook function is registered */ if (tccolours == 256) return mapRGBto256(col->red, col->green, col->blue) + 1; if (tccolours == 88) return mapRGBto88(col->red, col->green, col->blue) + 1; - /* returning 1 indicates black rather than failure (0) so this - * module still serves to prevent fallback on true color */ - return 1; + return -1; } static struct features module_features = { diff --git a/Src/prompt.c b/Src/prompt.c index 377015ad8..568bfc2a9 100644 --- a/Src/prompt.c +++ b/Src/prompt.c @@ -1650,10 +1650,12 @@ match_colour(const char **teststrp, int is_fg, int colour) return TXT_ERROR; *teststrp = end; colour = runhookdef(GETCOLORATTR, &color) - 1; - if (colour < 0) { /* no hook function added, try true color (24-bit) */ + if (colour == -1) { /* no hook function added, try true color (24-bit) */ colour = (((color.red << 8) + color.green) << 8) + color.blue; return on | (is_fg ? TXT_ATTR_FG_24BIT : TXT_ATTR_BG_24BIT) | (zattr)colour << shft; + } else if (colour <= -2) { + return TXT_ERROR; } } else if ((named = ialpha(**teststrp))) { colour = match_named_colour(teststrp);