Received: (at 77054) by debbugs.gnu.org; 21 Mar 2025 12:42:13 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Fri Mar 21 08:42:13 2025 Received: from localhost ([127.0.0.1]:36189 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1tvbhU-0003sw-IN for submit <at> debbugs.gnu.org; Fri, 21 Mar 2025 08:42:13 -0400 Received: from mail-oi1-x233.google.com ([2607:f8b0:4864:20::233]:42158) by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.84_2) (envelope-from <joaotavora@HIDDEN>) id 1tvbhR-0003s7-W7 for 77054 <at> debbugs.gnu.org; Fri, 21 Mar 2025 08:42:10 -0400 Received: by mail-oi1-x233.google.com with SMTP id 5614622812f47-3f6a92f2328so1030115b6e.0 for <77054 <at> debbugs.gnu.org>; Fri, 21 Mar 2025 05:42:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1742560924; x=1743165724; darn=debbugs.gnu.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=fytvHgbOlUBWnEdVAhf2EXJ5XSLUYo5AZrVUuJ6nvtA=; b=Uo5zVFnt08YeC56NWU6OqANRDsLRevcrNXqI79Je28PQGs5McyFJ7p6ON4DEgdnd8i naoMT6mQGXL4CnPusO6mlTRgckwIhwxoza7YBwjF/A/23Ci9EVn4NmYlrZXOq4sF634n Ue7xx/GtYiTftHTkfwEDtOPrHfhNE+bWi78FE2uGInDNazQ+hFYEMMPCZ2LaqTe4Uahf gE/DByU2F4tYuT8X1/8CkfSMfwMS9sAkMcKt7kCR0H0LJIf0kdKCxvNT6XxIbB4DQ3l/ LSP+3y9dk7ESmw+dhfJJiVmWbF3jtwWfyWuwfAT/Vj0w7rJlRHDrgz3Q/pocmjROI54V y1+w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1742560924; x=1743165724; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=fytvHgbOlUBWnEdVAhf2EXJ5XSLUYo5AZrVUuJ6nvtA=; b=DChfRxI9z7kviaU3v3bKO7cO3BoXWi/9gV0o3pWbOwA1b4wq47INDLJbp/5agpWfZe 1YCMN5zmUhPAr3PThmCm64U4pFC46IF32goH1OJU+2x6r4UTJakGLqwgD7mkw8v8qket 9ve56L7hgT/2S0z7mkC+tMhxLCzZXipFNo3W8ZvsMtX9tFkbss2Roy+gNqD4JRM+AomP O+yWMMMfV97zrGcuxkdOJgmEeOhafoaEwp+np2dQetpEOil9M788tQpxczJCji7hiy3V rgfYS4FIrIYec5qkEHBPlvzfIR6lyHTedJgF+FV61VJ6GoqgM/aafTSJdBFC/LgrSmrj KKXg== X-Forwarded-Encrypted: i=1; AJvYcCVwlhbV1/Rf8wAUQ4dzkiw3XkrQIFEh05Sf+f4taU7GfuUwnzmX7VhwiIYOPRXnVK2+Jgt6tQ==@debbugs.gnu.org X-Gm-Message-State: AOJu0YzqOZaBpscvZDsHmdQOaQLes3UJtDmKzzOKWZLTTbX1tqoGEIhD /qRCVr6t9/nthRl/L9MOfxt8K4+MkL2LWGfbjrKLD8hMAk/PDOKXmUuVEdYx+36gk390bMTTU6R gIGorIXDuE84tIlrvpziwi8ssOm0= X-Gm-Gg: ASbGncssipFq8DBCaL5Wry3jxKl2xrTw1EgpN8vpnKKQGrmLjTc7drXawpr/Jiyejgf VGXFjd9Ke1sn89wCIOwY6GKzTe1KYzdszsnAvB3eGIM3CMgEJMcNiyRIcX5GlWih0KbVUOqFseC MpW7H0vJZpUoUEm35TLsalrl858g== X-Google-Smtp-Source: AGHT+IEogOFn4SQylbNgmzCFT5/T5PD7O0Iw1Jrkpv3h1y12FQQvZ6R5NFTg30RblARMPkTqyst8fNnAoa2A0AWhYKU= X-Received: by 2002:a05:6808:309b:b0:3f9:aeb6:6e92 with SMTP id 5614622812f47-3feb45dc68fmr5261882b6e.9.1742560923988; Fri, 21 Mar 2025 05:42:03 -0700 (PDT) MIME-Version: 1.0 References: <CAGiBfP0mDdeC=-ke_06kpvq5amod1urXK8n6LaawWVgppEWY_A@HIDDEN> <868qp5t1kj.fsf@HIDDEN> <CALDnm535E6xK9xen6VGkH51jwsRs06xgJNHFXQyLo5xBW+tGMw@HIDDEN> <CAGiBfP1s0exbPYvcVVysj5JwZGRU75PJ=fdWbzA6PbYwWTTfzg@HIDDEN> <861puropw5.fsf@HIDDEN> <CALDnm50aE6xbioLANVSX=pKqn+6hiJe9KbQD7c_wvJPsvKvFyg@HIDDEN> <d5e3cc56-bc70-4c44-bd8d-35d0727c9afe@HIDDEN> <CALDnm50JbSnpFY9DNmDMOAS=wCxMA=bFhoP1rkDVzeJfnEvRTg@HIDDEN> <CAGiBfP2FXqhaxe7H3fOFOoU=09z=6S6tKK_u_RtkqskEqv+QnQ@HIDDEN> In-Reply-To: <CAGiBfP2FXqhaxe7H3fOFOoU=09z=6S6tKK_u_RtkqskEqv+QnQ@HIDDEN> From: =?UTF-8?B?Sm/Do28gVMOhdm9yYQ==?= <joaotavora@HIDDEN> Date: Fri, 21 Mar 2025 12:41:55 +0000 X-Gm-Features: AQ5f1Jq2YsUcBcjHxH8NutzD_jQUHGoTouVcHsJuld2pC6eeRJ2RUOR-ZadXq9c Message-ID: <CALDnm51h=SqJ_uweJZdiQToJ=uZoKj_S=kZUvb2Kb8vgxt0NFA@HIDDEN> Subject: Re: bug#77054: Completion highlighting applied outside completion-lazy-hilit-fn To: =?UTF-8?B?Sm/Do28gR3VlcnJh?= <joca.bt@HIDDEN> Content-Type: multipart/alternative; boundary="000000000000dfc13f0630d9945e" X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 77054 Cc: Dmitry Gutov <dmitry@HIDDEN>, Eli Zaretskii <eliz@HIDDEN>, 77054 <at> debbugs.gnu.org X-BeenThere: debbugs-submit <at> debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: <debbugs-submit.debbugs.gnu.org> List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe> List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/> List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org> List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help> List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe> Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org> X-Spam-Score: -1.0 (-) --000000000000dfc13f0630d9945e Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Fri, Mar 21, 2025, 11:10 Jo=C3=A3o Guerra <joca.bt@HIDDEN> wrote: > . Having the completion style > remove all prior fontification sounds a bit extreme for an interface. > For me, it makes more sense to be additive, but I don't know what > Emacs' vision is on this topic. > It's up to the style. If you like it additive keep it additive, else do what Eli suggests. `completion--twq-all` is doing fontification. This function doesn't > look like it's part of the completion frontend nor of the completion > style. Why is it doing fontification? Should it be doing > fontification? > It's part of the table. It does what it has done probably for many years. If you want to change that behavior for everyone, go ahead, but IME you'll eventually bother lots of people using simpler setups. If your style is bothered by it, remove it there just like Eli suggests. In lazy and in non-lazy situations. IOW the lazy optimization has nothing to do with this. And if for some reason you're worrying about performance, don't. The lazy optimization is largely about avoiding premature upfront string allocations, not propertization. And it more than likely doesn't matter for file tables anyway which are small compared to symbol obarrays, for instance. --000000000000dfc13f0630d9945e Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable <div dir=3D"auto"><div dir=3D"auto">On Fri, Mar 21, 2025, 11:10 Jo=C3=A3o G= uerra <<a href=3D"mailto:joca.bt@HIDDEN" target=3D"_blank" rel=3D"nor= eferrer">joca.bt@HIDDEN</a>> wrote:</div><div class=3D"gmail_quote" d= ir=3D"auto"><blockquote class=3D"gmail_quote" style=3D"margin:0px 0px 0px 0= .8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">. Having the = completion style<br> remove all prior fontification sounds a bit extreme for an interface.<br> For me, it makes more sense to be additive, but I don't know what<br> Emacs' vision is on this topic.<br></blockquote></div><div dir=3D"auto"= ><br></div><div dir=3D"auto">It's up to the style. If you like it addit= ive keep it additive, else do what Eli suggests.</div><div dir=3D"auto"><br= ></div><div class=3D"gmail_quote" dir=3D"auto"><blockquote class=3D"gmail_q= uote" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,2= 04);padding-left:1ex"> `completion--twq-all` is doing fontification. This function doesn't<br> look like it's part of the completion frontend nor of the completion<br= > style. Why is it doing fontification? Should it be doing<br> fontification?<br></blockquote></div><div dir=3D"auto"><br></div><div dir= =3D"auto">It's part of the table. It does what it has done probably for= many years. If you want to change that behavior for everyone, go ahead, bu= t IME you'll eventually bother lots of people using simpler setups. If = your style is bothered by it, remove it there just like Eli suggests. In la= zy and in non-lazy situations. IOW the lazy optimization has nothing to do = with this.=C2=A0</div><div dir=3D"auto"><br></div><div dir=3D"auto">And if = for some reason you're worrying about performance, don't. The lazy = optimization is largely about avoiding premature upfront string allocations= , not propertization. And it more than likely doesn't matter for file t= ables anyway which are small compared to symbol obarrays, for instance.</di= v></div> --000000000000dfc13f0630d9945e--
bug-gnu-emacs@HIDDEN
:bug#77054
; Package emacs
.
Full text available.Received: (at 77054) by debbugs.gnu.org; 21 Mar 2025 11:10:29 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Fri Mar 21 07:10:29 2025 Received: from localhost ([127.0.0.1]:35691 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1tvaGi-0001ee-LC for submit <at> debbugs.gnu.org; Fri, 21 Mar 2025 07:10:29 -0400 Received: from mail-il1-x12a.google.com ([2607:f8b0:4864:20::12a]:46127) by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.84_2) (envelope-from <joca.bt@HIDDEN>) id 1tvaGe-0001cy-IR for 77054 <at> debbugs.gnu.org; Fri, 21 Mar 2025 07:10:25 -0400 Received: by mail-il1-x12a.google.com with SMTP id e9e14a558f8ab-3cf82bd380bso18939725ab.0 for <77054 <at> debbugs.gnu.org>; Fri, 21 Mar 2025 04:10:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1742555418; x=1743160218; darn=debbugs.gnu.org; h=content-transfer-encoding:cc:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=WC1efwuQLcf5xUwhGaYffGJnCZhUlgZXKYstfTQAbqE=; b=HK8QVKOH5OXCuXQ+4g7YC9tALVujKT9BMCB3X7PI/oypEFfvEeiYFrSXNsfGhgcYal EYlU7WnXdLG90mF2yr0I8E4wZ8pdLl6sWzMxc9A3EzdCRslGXKaB9X6eN+SiEqnSmAoK OF5TpOl7BX4cQl0EU/YEv2m1exT2kmjaVayV2QwSrfDf/h7yz7l1HiICAJwx23Zqn2Vk D3FgXjtmRXWmvcnB3HwXn4qlwxFr1VKJMfxAdYr70Kll1JNLcaK2Iwnw8P18X0XGZnGo DkUZYuh6qp0QaYyhD7GIJ41KtqzwIgC+kXT3sep2hLAwv1OK1aweCabEMvmBuVa7uFfb DtWg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1742555418; x=1743160218; h=content-transfer-encoding:cc:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=WC1efwuQLcf5xUwhGaYffGJnCZhUlgZXKYstfTQAbqE=; b=TNDdE91/O2rSyhg8cIKnqa66lzL7RVWbTq+lSS0X41INCB2ODdJD7wux01kYx50v7e ezTJoVATgnhvxH2e268b8NvrTaF2hPWPmXRirmFjdt6k3R5mAYXvq8+GfM/QgJR4aoQh hGhlqIqW5AuYcNRj6wTDtpLPpo6nub3qOC3DYfrg4VjBLozpmMRV9JEVlOBegj9kZZ1A 0TAa23qFY2gRqHQJEOVhGsT1MpGCHDZ6DFNSngUNNPENnshGqXXFClc+nurTYAh4wPVR DrmbLM3shA0a2nJ7aOTfZt2re5iHIpIEyCtNmOo6KdimgdC2/fPsBkNA94Ia+5er2aw8 puaQ== X-Forwarded-Encrypted: i=1; AJvYcCWogzT1iVxB3cMtckyqAW6wGldsje0YQNr/HLCTg616v73tzQNG1e1/+XHG8PSWlw2bgWP4TQ==@debbugs.gnu.org X-Gm-Message-State: AOJu0Yy+Jtsc/d4ziZjdWuys89twvY/QghSYaZLJpnmqM8XY1hKoZs0W bjAub5cRBq5YsVzNVdQd/7Yq/Z+t6EuSQ7XxOLYMszo/5L0paiPgPl5LgymERScS4JZ/BMzRi5v M/J1Tq7IOsbZcYCg9tQLB+SdilII= X-Gm-Gg: ASbGncu47mkYfaeLsa3PVTjMCtCJfNHu4hd14o6OZeLJdVz7Eo1o3D3tVYgTABZ9KZ+ nhTspS8Gth4ajUpTwM2Snxm3H0RDdSuM/WuIz+Zh+O/Q4mHzntkvvDtLli/tAIyDIO8l386r+Dg egiJEPOv9tzqFJA0FNsHGaT4fo X-Received: by 2002:a05:6e02:b49:b0:3d2:b66b:94cd with SMTP id e9e14a558f8ab-3d59612be1amt41652415ab.3.1742555418418; Fri, 21 Mar 2025 04:10:18 -0700 (PDT) MIME-Version: 1.0 References: <CAGiBfP0mDdeC=-ke_06kpvq5amod1urXK8n6LaawWVgppEWY_A@HIDDEN> <868qp5t1kj.fsf@HIDDEN> <CALDnm535E6xK9xen6VGkH51jwsRs06xgJNHFXQyLo5xBW+tGMw@HIDDEN> <CAGiBfP1s0exbPYvcVVysj5JwZGRU75PJ=fdWbzA6PbYwWTTfzg@HIDDEN> <861puropw5.fsf@HIDDEN> <CALDnm50aE6xbioLANVSX=pKqn+6hiJe9KbQD7c_wvJPsvKvFyg@HIDDEN> <d5e3cc56-bc70-4c44-bd8d-35d0727c9afe@HIDDEN> <CALDnm50JbSnpFY9DNmDMOAS=wCxMA=bFhoP1rkDVzeJfnEvRTg@HIDDEN> In-Reply-To: <CALDnm50JbSnpFY9DNmDMOAS=wCxMA=bFhoP1rkDVzeJfnEvRTg@HIDDEN> From: =?UTF-8?B?Sm/Do28gR3VlcnJh?= <joca.bt@HIDDEN> Date: Fri, 21 Mar 2025 12:09:31 +0100 X-Gm-Features: AQ5f1JpMGNk86PNWAX5lfxzq2bMfM7jS8P7kexxOEoNApmo1qk-3NWU-TKYQtCI Message-ID: <CAGiBfP2FXqhaxe7H3fOFOoU=09z=6S6tKK_u_RtkqskEqv+QnQ@HIDDEN> Subject: Re: bug#77054: Completion highlighting applied outside completion-lazy-hilit-fn Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Spam-Score: 4.3 (++++) X-Spam-Report: Spam detection software, running on the system "debbugs.gnu.org", has NOT identified this incoming email as spam. The original message has been attached to this so you can view it or label similar future email. If you have any questions, see the administrator of that system for details. Content preview: > The "should destructively propertize" part tells me that the function should take care of removing the face properties present in the input string where it doesn't want those fontifications. By cont [...] Content analysis details: (4.3 points, 10.0 required) pts rule name description ---- ---------------------- -------------------------------------------------- -0.0 RCVD_IN_DNSWL_NONE RBL: Sender listed at https://www.dnswl.org/, no trust [2607:f8b0:4864:20:0:0:0:12a listed in] [list.dnswl.org] -0.0 SPF_PASS SPF: sender matches SPF record 1.0 FORGED_GMAIL_RCVD 'From' gmail.com does not match 'Received' headers 0.0 FREEMAIL_FROM Sender email is commonly abused enduser mail provider (joca.bt[at]gmail.com) 0.0 SPF_HELO_NONE SPF: HELO does not publish an SPF Record 1.2 MISSING_HEADERS Missing To: header 2.1 MALFORMED_FREEMAIL Bad headers on message from free email service X-Debbugs-Envelope-To: 77054 Cc: Dmitry Gutov <dmitry@HIDDEN>, Eli Zaretskii <eliz@HIDDEN>, =?UTF-8?B?Sm/Do28gVMOhdm9yYQ==?= <joaotavora@HIDDEN>, 77054 <at> debbugs.gnu.org X-BeenThere: debbugs-submit <at> debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: <debbugs-submit.debbugs.gnu.org> List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe> List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/> List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org> List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help> List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe> Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org> X-Spam-Score: 3.3 (+++) X-Spam-Report: Spam detection software, running on the system "debbugs.gnu.org", has NOT identified this incoming email as spam. The original message has been attached to this so you can view it or label similar future email. If you have any questions, see the administrator of that system for details. Content preview: > The "should destructively propertize" part tells me that the function should take care of removing the face properties present in the input string where it doesn't want those fontifications. By cont [...] Content analysis details: (3.3 points, 10.0 required) pts rule name description ---- ---------------------- -------------------------------------------------- -0.0 RCVD_IN_DNSWL_NONE RBL: Sender listed at https://www.dnswl.org/, no trust [2607:f8b0:4864:20:0:0:0:12a listed in] [list.dnswl.org] -0.0 SPF_PASS SPF: sender matches SPF record 1.0 FORGED_GMAIL_RCVD 'From' gmail.com does not match 'Received' headers 0.0 FREEMAIL_FROM Sender email is commonly abused enduser mail provider (joca.bt[at]gmail.com) 0.0 SPF_HELO_NONE SPF: HELO does not publish an SPF Record 1.2 MISSING_HEADERS Missing To: header 2.1 MALFORMED_FREEMAIL Bad headers on message from free email service -1.0 MAILING_LIST_MULTI Multiple indicators imply a widely-seen list manager > The "should destructively propertize" part tells me that the function sho= uld take care of removing the face properties present in the input string w= here it doesn't want those fontifications. By contrast, your function call= s add-text-properties, which only adds the face properties to a single char= acter, but does nothing with the face properties of the rest of the string. I read "should destructively propertize" as "mutate the string to avoid using more memory / efficiency reasons". While I understand this argument, I could see this behaviour being problematic in certain situations. For example, a frontend may decide to do some fontification on top of completion-lazy-hilit-fn (e.g. to highlight the current candidate differently). While there's an obvious workaround - the frontend doing their fontification after calling completion-lazy-hilit-fn - I'm not sure whether it could cause restrictions in more complex scenarios. Having the completion style remove all prior fontification sounds a bit extreme for an interface. For me, it makes more sense to be additive, but I don't know what Emacs' vision is on this topic. > can Emacs perform additional fontification (outside the completion fronte= nd and style)? > I believe the answer is YES I believe this is problematic. I would like to understand in which situations does it make sense for Emacs to do fontification outside the completion frontend and completion style. These are the two main drivers when completing, and are the ones responsible for the user interface. Having other parts of the code chime in on fontification, which is basically user interface, seems to break that division. `completion--twq-all` is doing fontification. This function doesn't look like it's part of the completion frontend nor of the completion style. Why is it doing fontification? Should it be doing fontification? > To clarify: this doesn't happen with any of the built-in styles, right? > To look at this another way - like Joao said, if this happens it might be= a problem even without lazy highlighting. Does it occur then? The reported issue is caused by the fontification applied by `completion--twq-all` and it happens even without lazy highlighting (it's just easier to spot when using lazy highlighting because the expectation is that no fontification will happen prior to it). I would say that the reason it hasn't been noticed before is that its behaviour mostly matches the behaviour of the builtin completion styles, so it won't be noticeable because they're fontifiying the same characters with the same faces.
bug-gnu-emacs@HIDDEN
:bug#77054
; Package emacs
.
Full text available.Received: (at 77054) by debbugs.gnu.org; 20 Mar 2025 19:03:06 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Thu Mar 20 15:03:06 2025 Received: from localhost ([127.0.0.1]:58972 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1tvLAY-00012f-3Y for submit <at> debbugs.gnu.org; Thu, 20 Mar 2025 15:03:06 -0400 Received: from mail-oi1-x235.google.com ([2607:f8b0:4864:20::235]:43199) by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.84_2) (envelope-from <joaotavora@HIDDEN>) id 1tvLAU-00011Q-S7 for 77054 <at> debbugs.gnu.org; Thu, 20 Mar 2025 15:03:04 -0400 Received: by mail-oi1-x235.google.com with SMTP id 5614622812f47-3fa0eb29cebso1366040b6e.0 for <77054 <at> debbugs.gnu.org>; Thu, 20 Mar 2025 12:03:02 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1742497377; x=1743102177; darn=debbugs.gnu.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=WKGju4xruVXiuJ52Lv+IiTKxSfd9PIR7toCbOCWCIec=; b=gHPd/0AHAe4ZyM2cDfO2O/xmH0nDfqycKu5O8n0gR9nDmA0bIJz2GtzLTmfAcMa2Om l0CfYmg9pQO1WBOJHfI+AXXlDhWQNqmzTrhanBZla+AtU5hohsS29vnFCqsc5vGmuPdN l5I1fU0G7vARzX/mOawxQUa8dQ0m1iwMQhrFwBXHl/spQN4aVdvNPVVPCA7ICqUhn0z5 giUacYg1YpqFfSyi19hXAbutLwn4BgAM1g3bzEoakyHIR1uZLtolJtARVnrwgrvTgwz2 G1ajmS+G35pScT8yNwkQ7Ek8bdo16uHeqNJXb1oKYivJnWxH0IhuHo8bAqTbNJYJvnpp aOHg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1742497377; x=1743102177; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=WKGju4xruVXiuJ52Lv+IiTKxSfd9PIR7toCbOCWCIec=; b=tAuQtFm96cvTcPmXZN7X9H2yMzi3gncSYDBaqEfYLXHp+ajYvf9w4yyLeYOiXHGsA2 IAx2D7XX9SNxjcHHbl9cEhmllsqKgdulzE6YJ1nmnLukzeVl6hTPjXIhC84DaY0Iudzf tAzNSJaEkxTT4OfKnZ8JbDARV01pPFgsc2SEShx2MklSLzg+xUfeYgRiPtyzfZOiB+/Q OkeAAj4ueLHYnCSaPlfRo9WuaSO2vHf5cwLVSLGGS9PHhk0dTohEH4lHWTek8PzfCfjY WHv+rbmzjNIPj1KOR20Gd8oC+eXiakC/KJQKlslde8UbtzpfgICvemsIwnBJr1hGVHO4 XwUA== X-Forwarded-Encrypted: i=1; AJvYcCUB0JoXeuwKzrIk76mr+mekw2ywwucY8jw1H18yxeOOH8nsnS9feo6U8EGPcdx+PzqaavS0hQ==@debbugs.gnu.org X-Gm-Message-State: AOJu0YxCXKmxk7x9r/gb2UudlbkpoBf3lVmBtgpAFzSSKVvQbtHwkETo X7QWYoi80XinfKFWtQylFIxDDgZt/Kl/PrOHqwoQw6Ws/yqxJVZZISsGTry9Tl8r6Pt26CfIb8Q GdLqBnHa6nwgZBHHE6u5Fm8elsIs= X-Gm-Gg: ASbGncu43Dt87CDmDWHYIclLtg09fjJnB/N0TyC5edjIhpk/ur8wpRBKCpNr60G+Pjh +/MNy4F+e/LvqZq1vzbO2NSAEofrTQ/lleXeTnmY0avcY0aYy3T5a11lSa1yabLl90CfQPghoh9 blO6EuThGsmyOt4kk2dw+s42gGPHFX+KLoOzq2 X-Google-Smtp-Source: AGHT+IFru0kYBdjF0nudopxxFsegrnCxpGmweMJ3bHdf2vnPY2buIF72ak/skyJ2YixS+lWfd2UXruMYGbd8RJ9fTI0= X-Received: by 2002:a05:6808:2f1a:b0:3f8:18a3:b1cc with SMTP id 5614622812f47-3febee9509fmr535795b6e.12.1742497376821; Thu, 20 Mar 2025 12:02:56 -0700 (PDT) MIME-Version: 1.0 References: <CAGiBfP0mDdeC=-ke_06kpvq5amod1urXK8n6LaawWVgppEWY_A@HIDDEN> <868qp5t1kj.fsf@HIDDEN> <CALDnm535E6xK9xen6VGkH51jwsRs06xgJNHFXQyLo5xBW+tGMw@HIDDEN> <CAGiBfP1s0exbPYvcVVysj5JwZGRU75PJ=fdWbzA6PbYwWTTfzg@HIDDEN> <861puropw5.fsf@HIDDEN> <CALDnm50aE6xbioLANVSX=pKqn+6hiJe9KbQD7c_wvJPsvKvFyg@HIDDEN> <d5e3cc56-bc70-4c44-bd8d-35d0727c9afe@HIDDEN> In-Reply-To: <d5e3cc56-bc70-4c44-bd8d-35d0727c9afe@HIDDEN> From: =?UTF-8?B?Sm/Do28gVMOhdm9yYQ==?= <joaotavora@HIDDEN> Date: Thu, 20 Mar 2025 19:02:47 +0000 X-Gm-Features: AQ5f1Jrp7guVi8nzRwMKUroqTAoi3qmDsLT7A-htxsNADEqzB1ZPjUI8sjQE_Bw Message-ID: <CALDnm50JbSnpFY9DNmDMOAS=wCxMA=bFhoP1rkDVzeJfnEvRTg@HIDDEN> Subject: Re: bug#77054: Completion highlighting applied outside completion-lazy-hilit-fn To: Dmitry Gutov <dmitry@HIDDEN> Content-Type: multipart/alternative; boundary="0000000000002aea630630cac92a" X-Spam-Score: 0.7 (/) X-Debbugs-Envelope-To: 77054 Cc: Eli Zaretskii <eliz@HIDDEN>, =?UTF-8?B?Sm/Do28gR3VlcnJh?= <joca.bt@HIDDEN>, 77054 <at> debbugs.gnu.org X-BeenThere: debbugs-submit <at> debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: <debbugs-submit.debbugs.gnu.org> List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe> List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/> List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org> List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help> List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe> Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org> X-Spam-Score: -0.3 (/) --0000000000002aea630630cac92a Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Thu, Mar 20, 2025, 17:26 Dmitry Gutov <dmitry@HIDDEN> wrote: > On 20/03/2025 19:11, Jo=C3=A3o T=C3=A1vora wrote: > > The function may do this and it's passed a fresh string to destroy at > > will I think, but it may not matter if later parts of the machinery add > > these properties. It could come from the table's sorting for example. > > There's little the style can do about that. > > > > Furthermore, as I've been trying to explain, lazy highlighting as I > > implemented is completely orthogonal. It's just a mechanism to allow > > front ends to delay fontification to the last possible moment when they > > actually display stuff to the user. Styles are not supposed to set it t= o > > anything that fontifies differently/specially because styles don't know > > in general what frontend is driving them. IOW, whatever problem the OP > > is experiencing would likely be there if lazy highlighting were turned > > off (by the frontend or the style, or both). > > Styles are indeed not supposed to alter it - they're supposed to obey it > instead. > Exactly. Well, they're _encouraged_ to obey it by setting the fn. But they don't have to. Afair many styles don't, likely because that wouldn't bring much speed. Flex does it because by its nature it can match a lot of stuff. But completion-lazy-hilit does have something to do with not altering > the original string: that's the whole definition of > completion-lazy-hilit: if on, do copy-sequence first. > Yup. Completion tables might alter the strings inside their sorting, but they > own those string so that seems fine. Completion style's sorting should > avoid that. This was a large part of the discussion we had at the time, > and one result is that the sorter inside > completion--flex-adjust-metadata does not alter the strings. > All true! Jo=C3=A3o --0000000000002aea630630cac92a Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable <div dir=3D"auto"><div dir=3D"auto"><br></div><div dir=3D"auto">On Thu, Mar= 20, 2025, 17:26 Dmitry Gutov <<a href=3D"mailto:dmitry@HIDDEN">dmitr= y@HIDDEN</a>> wrote:</div><div class=3D"gmail_quote gmail_quote_conta= iner" dir=3D"auto"><blockquote class=3D"gmail_quote" style=3D"margin:0px 0p= x 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">On 20/= 03/2025 19:11, Jo=C3=A3o T=C3=A1vora wrote:<br> > The function may do this and it's passed a fresh string to destroy= at <br> > will I think, but it may not matter if later parts of the machinery ad= d <br> > these properties. It could come from the table's sorting for examp= le. <br> > There's little the style can do about that.<br> > <br> > Furthermore, as I've been trying to explain, lazy highlighting as = I <br> > implemented is completely orthogonal. It's just a mechanism to all= ow <br> > front ends to delay fontification to the last possible moment when the= y <br> > actually display stuff to the user. Styles are not supposed to set it = to <br> > anything that fontifies differently/specially because styles don't= know <br> > in general what frontend is driving them. IOW, whatever problem the OP= <br> > is experiencing would likely be there if lazy highlighting were turned= <br> > off (by the frontend or the style, or both).<br> <br> Styles are indeed not supposed to alter it - they're supposed to obey i= t <br> instead.<br></blockquote></div><div dir=3D"auto"><br></div><div dir=3D"auto= ">Exactly. Well, they're _encouraged_ to obey it by setting the fn. But= they don't have to. Afair many styles don't, likely because that w= ouldn't bring much speed. Flex does it because by its nature it can mat= ch a lot of stuff.</div><div dir=3D"auto"><br></div><div class=3D"gmail_quo= te gmail_quote_container" dir=3D"auto"><blockquote class=3D"gmail_quote" st= yle=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padd= ing-left:1ex"> But completion-lazy-hilit does have something to do with not altering <br> the original string: that's the whole definition of <br> completion-lazy-hilit: if on, do copy-sequence first.<br></blockquote></div= ><div dir=3D"auto"><br></div><div dir=3D"auto">Yup.</div><div dir=3D"auto">= <br></div><div class=3D"gmail_quote gmail_quote_container" dir=3D"auto"><bl= ockquote class=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8ex;border-lef= t:1px solid rgb(204,204,204);padding-left:1ex"> Completion tables might alter the strings inside their sorting, but they <b= r> own those string so that seems fine. Completion style's sorting should = <br> avoid that. This was a large part of the discussion we had at the time, <br= > and one result is that the sorter inside <br> completion--flex-adjust-metadata does not alter the strings.<br></blockquot= e></div><div dir=3D"auto"><br></div><div dir=3D"auto">All true!</div><div d= ir=3D"auto"><br></div><div class=3D"gmail_quote gmail_quote_container" dir= =3D"auto"><blockquote class=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8= ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"> </blockquote></div><div data-smartmail=3D"gmail_signature">Jo=C3=A3o</div><= /div> --0000000000002aea630630cac92a--
bug-gnu-emacs@HIDDEN
:bug#77054
; Package emacs
.
Full text available.Received: (at 77054) by debbugs.gnu.org; 20 Mar 2025 17:34:10 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Thu Mar 20 13:34:10 2025 Received: from localhost ([127.0.0.1]:58816 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1tvJmT-0005Ny-TV for submit <at> debbugs.gnu.org; Thu, 20 Mar 2025 13:34:10 -0400 Received: from fout-a2-smtp.messagingengine.com ([103.168.172.145]:40683) by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.84_2) (envelope-from <dmitry@HIDDEN>) id 1tvJmQ-0005NN-QV for 77054 <at> debbugs.gnu.org; Thu, 20 Mar 2025 13:34:07 -0400 Received: from phl-compute-13.internal (phl-compute-13.phl.internal [10.202.2.53]) by mailfout.phl.internal (Postfix) with ESMTP id 3583913833F2; Thu, 20 Mar 2025 13:34:01 -0400 (EDT) Received: from phl-mailfrontend-02 ([10.202.2.163]) by phl-compute-13.internal (MEProxy); Thu, 20 Mar 2025 13:34:01 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gutov.dev; h=cc :content-transfer-encoding:content-type:content-type:date:date :from:from:in-reply-to:in-reply-to:message-id:mime-version :references:reply-to:subject:subject:to:to; s=fm3; t=1742492041; x=1742578441; bh=ZrXKF6v3906PEhCOokLEYUNsHpq7J0g931JASW7EaMg=; b= MT6VOL97jTFCjYglfhhMHCIwoU7g515GA8KE9JA/ScWG+r7gM1cDTFKgkyPl+HHW rToPrRM2WiLpVzhJKRscA6EdqKDS+9hj1rXO9gdhRATU4K6erbPlh11iDYxdYo3m 0Y+EhIhfhPGSY+DNMPWy0xJDKux2j1iukDH1V4KkoaOhnc/gep/DE9Qt1s7LmeGB GEgBwyHijOOzq4Ju5JUH5u17iJWC9ypsW1eLe4iJmMylQjfhQZ4RGcvOL8QMJ2Vr MRYE6fHenZER/surgk/+hMosUpg26JZx6tEAg0+Hm8FjYA0Rn947pfsCUdNtLDV2 fqmkPyyzho5r977OEEh8Yw== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:content-transfer-encoding:content-type :content-type:date:date:feedback-id:feedback-id:from:from :in-reply-to:in-reply-to:message-id:mime-version:references :reply-to:subject:subject:to:to:x-me-proxy:x-me-sender :x-me-sender:x-sasl-enc; s=fm1; t=1742492041; x=1742578441; bh=Z rXKF6v3906PEhCOokLEYUNsHpq7J0g931JASW7EaMg=; b=hXNjHBzEAKgxdBR0L yRKQTbdeCN37krqVmvJPcdz2qYIuJMmczb8CJVlMEaLc+395VnVTqs1s0Tb4YF3/ JydWBnHNxD6piE+TINqPpuMYgszVJV9RUOaNg9jEeoHR0iZL2S3wpTx2cmOdfjx8 Lqq8eQqs9fuJy33OUeCfafnONcD2oM9Q/Baz9rQ9/Lg9J/hW5LF6brj7x+nv4zz2 zvRQXHtfBzw0HduRARYM8GQVVQhX9QhzvOw6d5zFBtitd+ZbNeAegnPUjIRmEJfO QEmDYb1waCKLCR1TEVEIG5LUtRZyDNjJXzmt+CaiDGSlDP/jdpxvOhA7foMvF0lW k1wZA== X-ME-Sender: <xms:iVHcZ157uVM9RrXKwazAHttjHTeHsRtm6efRo4NR9l6L05Yge6D6xQ> <xme:iVHcZy4XbtFVJieEU22Bx6kS53w-bOHmJrf75FvweFBRXBJu7aJ9U7g5R9IWDwrC8 U5xz1vDbbUpeuJNs7Q> X-ME-Received: <xmr:iVHcZ8eKe04MWjmwVHJwhWcapvN3SWfZEWMwC8fQu68QOuSsh3M4HkpAUVOthz7Fnq7U> X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeefvddrtddtgddugeekkedvucetufdoteggodetrf dotffvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdggtfgfnhhsuhgsshgtrhhisggv pdfurfetoffkrfgpnffqhgenuceurghilhhouhhtmecufedttdenucenucfjughrpefkff ggfgfuvfhfhfgjtgfgsehtkeertddtvdejnecuhfhrohhmpeffmhhithhrhicuifhuthho vhcuoegumhhithhrhiesghhuthhovhdruggvvheqnecuggftrfgrthhtvghrnhepheekfe dtveetkeehheffkedtffevfeffieellefhgfeguefhtdekfeeuveeiudfgnecuffhomhgr ihhnpehgihhthhhusgdrtghomhenucevlhhushhtvghrufhiiigvpedtnecurfgrrhgrmh epmhgrihhlfhhrohhmpegumhhithhrhiesghhuthhovhdruggvvhdpnhgspghrtghpthht ohepvddpmhhouggvpehsmhhtphhouhhtpdhrtghpthhtohepjhhotggrrdgsthesghhmrg hilhdrtghomhdprhgtphhtthhopeejjedtheegseguvggssghughhsrdhgnhhurdhorhhg X-ME-Proxy: <xmx:iVHcZ-JMoC8JQwj9LG6Mb8cqTX6zJnxllZhFJfYtCbPH-qmt8TipcQ> <xmx:iVHcZ5KM72R4GEUKCKLwNKnAclU-vZT9f1XUqYDFCMF5RHgQ-Zys_g> <xmx:iVHcZ3yiyOU-qLTtGRydxoObVxVc99bCNTc7YQHsrFIF2fBPDSGe3g> <xmx:iVHcZ1IoVt1AriiHljwW4JH3kwxuWbwIdt2qO4PMYYnEgiNBsogOHw> <xmx:iVHcZwXaFIesNbGPfmOTHjtCxmYaKQSYWxgKW9c5TY2UhlIFLsdbiceA> Feedback-ID: i07de48aa:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA; Thu, 20 Mar 2025 13:34:00 -0400 (EDT) Message-ID: <81a20c8f-001a-4d6a-9c20-ee8f2ce97387@HIDDEN> Date: Thu, 20 Mar 2025 19:33:58 +0200 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: bug#77054: Completion highlighting applied outside completion-lazy-hilit-fn To: =?UTF-8?Q?Jo=C3=A3o_Guerra?= <joca.bt@HIDDEN>, 77054 <at> debbugs.gnu.org References: <CAGiBfP0mDdeC=-ke_06kpvq5amod1urXK8n6LaawWVgppEWY_A@HIDDEN> Content-Language: en-US From: Dmitry Gutov <dmitry@HIDDEN> In-Reply-To: <CAGiBfP0mDdeC=-ke_06kpvq5amod1urXK8n6LaawWVgppEWY_A@HIDDEN> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 77054 X-BeenThere: debbugs-submit <at> debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: <debbugs-submit.debbugs.gnu.org> List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe> List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/> List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org> List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help> List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe> Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org> X-Spam-Score: -1.0 (-) Hi! On 16/03/2025 17:27, João Guerra wrote: > TL;DR: Emacs applies additional completion highlighting even when > completion-lazy-hilit-fn is set, leading to incorrect behaviour with > alternative completion styles and frontends. > > I'm implementing a custom fuzzy completion style and encountering an > issue where Emacs highlights parts of completions that it shouldn't. To clarify: this doesn't happen with any of the built-in styles, right? That might mean that the new style violates some of the assumptions - perhaps ones that are not too well documented. > When completing files and buffers, but not commands, Emacs is > highlighting prefixes in > [completion--twq-all](https://github.com/emacs-mirror/emacs/blob/8ac894e2246f25d2a2a97d866b10e6e0b0fede5a/lisp/minibuffer.el#L677). > This becomes more evident if I make my completion-lazy-hilit-fn not do > any highlighting: completions are still highlighted when they > shouldn't at all. To look at this another way - like Joao said, if this happens it might be a problem even without lazy highlighting. Does it occur then? If so, might be unrelated to your style as well.
bug-gnu-emacs@HIDDEN
:bug#77054
; Package emacs
.
Full text available.Received: (at 77054) by debbugs.gnu.org; 20 Mar 2025 17:27:10 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Thu Mar 20 13:27:10 2025 Received: from localhost ([127.0.0.1]:58806 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1tvJfi-000545-1E for submit <at> debbugs.gnu.org; Thu, 20 Mar 2025 13:27:10 -0400 Received: from fout-a1-smtp.messagingengine.com ([103.168.172.144]:54617) by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.84_2) (envelope-from <dmitry@HIDDEN>) id 1tvJfc-00053K-G6 for 77054 <at> debbugs.gnu.org; Thu, 20 Mar 2025 13:27:08 -0400 Received: from phl-compute-01.internal (phl-compute-01.phl.internal [10.202.2.41]) by mailfout.phl.internal (Postfix) with ESMTP id 4C9B61383667; Thu, 20 Mar 2025 13:26:59 -0400 (EDT) Received: from phl-mailfrontend-02 ([10.202.2.163]) by phl-compute-01.internal (MEProxy); Thu, 20 Mar 2025 13:26:59 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gutov.dev; h=cc :cc:content-transfer-encoding:content-type:content-type:date :date:from:from:in-reply-to:in-reply-to:message-id:mime-version :references:reply-to:subject:subject:to:to; s=fm3; t=1742491619; x=1742578019; bh=sIwWpnO6zck7wENG8+df4WgYqoEWZX28qMqxOlMRXD4=; b= tT3AZi/mCS0Qr5yxjp9QallO2Gv+CUYbczXTVPT47X7z73CPIerZVdmxUC3KYebv K49b/ViDoVVRl87ARGP4UOYbReWz2VHMtUgMhLD7ZilMkc6+b2xRmE0xpWqY4uPS KRoinP+um4QOaNx/5FYF3yNtbLs0oQjcAsX+7iA3WRXG6D46YdY7Q8OcFN53hcWr 7bMYbmMzOx9cIdFl8eMxr7anFiix7H7S3JV5FDbNO5oEYVAmeNGKNI2IXGeNGOsx axYPQLYXEwy4/mtcCLLYzAgcEvUsvsK3MSZQNGOpEUelVkn8OdrRuHB4M422R9wQ xEKcbBepNQueTShjTzrMtw== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:cc:content-transfer-encoding :content-type:content-type:date:date:feedback-id:feedback-id :from:from:in-reply-to:in-reply-to:message-id:mime-version :references:reply-to:subject:subject:to:to:x-me-proxy :x-me-sender:x-me-sender:x-sasl-enc; s=fm1; t=1742491619; x= 1742578019; bh=sIwWpnO6zck7wENG8+df4WgYqoEWZX28qMqxOlMRXD4=; b=0 KJsyQmix5y2bG6i1JoCovZ8GfRK+gJgIvwrC+c/DlBE67cuP3oVf0OTvEbmuhluX Mi/vEa2VN3ZSqfEsNBeQq7kTrrLQxQ568wBA7H/m6KjSs+2yudrbCNxIagfMMsfn X4BUaUaNcBG4KQFeOqZAshg69z1hlYyI4RlPmnUeIsh36aHUI+9SB7+ly3x5Ijwa davI3nGUZAG4iLKW/RV0lPVGoDlRBlydCzZIabkh5+bTWSvPYSegW8zferL+LELu Uc6c8GYZPMZDZogbxFa3FkuhuuOijX1sYv1XSSjobO+wgx1y8MgGH+H5ORafe4QM ZsA701k+MokOTlT/c4xVA== X-ME-Sender: <xms:40_cZ91LGXac9AUoA4y-TgqmB67yq2I45btpOdFvvCx0fxfU1XGCJQ> <xme:40_cZ0H3n-DAtRMt7Sqlu6BDKPtu6FnxlfzLS66n01Yv9AwcEmXolMobPy1-Ho4g0 cT_--LRfsBArqa3uRE> X-ME-Received: <xmr:40_cZ94EjaHuheJW8DtSWLh8LdYWpHQVzgkay2yD4m4Of2qyQi9MXfjixTCZP-RC24Tt> X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeefvddrtddtgddugeekkeduucetufdoteggodetrf dotffvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdggtfgfnhhsuhgsshgtrhhisggv pdfurfetoffkrfgpnffqhgenuceurghilhhouhhtmecufedttdenucesvcftvggtihhpih gvnhhtshculddquddttddmnecujfgurhepkfffgggfuffvvehfhfgjtgfgsehtkeertddt vdejnecuhfhrohhmpeffmhhithhrhicuifhuthhovhcuoegumhhithhrhiesghhuthhovh druggvvheqnecuggftrfgrthhtvghrnhepgeelfeetkefghfdvhfdtgeevveevteetgeet veegtedthefhudekteehffeukeeknecuvehluhhsthgvrhfuihiivgeptdenucfrrghrrg hmpehmrghilhhfrhhomhepughmihhtrhihsehguhhtohhvrdguvghvpdhnsggprhgtphht thhopeegpdhmohguvgepshhmthhpohhuthdprhgtphhtthhopehjohgrohhtrghvohhrrg esghhmrghilhdrtghomhdprhgtphhtthhopegvlhhiiiesghhnuhdrohhrghdprhgtphht thhopehjohgtrgdrsghtsehgmhgrihhlrdgtohhmpdhrtghpthhtohepjeejtdehgeesug gvsggsuhhgshdrghhnuhdrohhrgh X-ME-Proxy: <xmx:40_cZ63y9cCsT8KtztyHOGJU1xBF-ypQRQFRI9q_CZ6rcLD6TR5Q3w> <xmx:40_cZwGGfxrOZ4AM_1s4sIdO761eY0CowKtKQS_PdwEQ6SqN9okDcg> <xmx:40_cZ7-Qg8KAsxtsiiU-urSht3hV_ymKfogzgogFviwSEkhXZIogtA> <xmx:40_cZ9nMwYqwBRfe9CFyK86zBLWfYBijN2QVpC1C1ycgNpD9_dWTuA> <xmx:40_cZ8i9hPgMAaGBqUxwgTw7pNCfHVsXMreZMg8mUY6L0u4msZ68dIM6> Feedback-ID: i07de48aa:Fastmail Received: by mail.messagingengine.com (Postfix) with ESMTPA; Thu, 20 Mar 2025 13:26:57 -0400 (EDT) Message-ID: <d5e3cc56-bc70-4c44-bd8d-35d0727c9afe@HIDDEN> Date: Thu, 20 Mar 2025 19:26:55 +0200 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: bug#77054: Completion highlighting applied outside completion-lazy-hilit-fn To: =?UTF-8?B?Sm/Do28gVMOhdm9yYQ==?= <joaotavora@HIDDEN>, Eli Zaretskii <eliz@HIDDEN> References: <CAGiBfP0mDdeC=-ke_06kpvq5amod1urXK8n6LaawWVgppEWY_A@HIDDEN> <868qp5t1kj.fsf@HIDDEN> <CALDnm535E6xK9xen6VGkH51jwsRs06xgJNHFXQyLo5xBW+tGMw@HIDDEN> <CAGiBfP1s0exbPYvcVVysj5JwZGRU75PJ=fdWbzA6PbYwWTTfzg@HIDDEN> <861puropw5.fsf@HIDDEN> <CALDnm50aE6xbioLANVSX=pKqn+6hiJe9KbQD7c_wvJPsvKvFyg@HIDDEN> Content-Language: en-US From: Dmitry Gutov <dmitry@HIDDEN> In-Reply-To: <CALDnm50aE6xbioLANVSX=pKqn+6hiJe9KbQD7c_wvJPsvKvFyg@HIDDEN> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 77054 Cc: =?UTF-8?Q?Jo=C3=A3o_Guerra?= <joca.bt@HIDDEN>, 77054 <at> debbugs.gnu.org X-BeenThere: debbugs-submit <at> debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: <debbugs-submit.debbugs.gnu.org> List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe> List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/> List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org> List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help> List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe> Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org> X-Spam-Score: -1.0 (-) On 20/03/2025 19:11, João Távora wrote: > The function may do this and it's passed a fresh string to destroy at > will I think, but it may not matter if later parts of the machinery add > these properties. It could come from the table's sorting for example. > There's little the style can do about that. > > Furthermore, as I've been trying to explain, lazy highlighting as I > implemented is completely orthogonal. It's just a mechanism to allow > front ends to delay fontification to the last possible moment when they > actually display stuff to the user. Styles are not supposed to set it to > anything that fontifies differently/specially because styles don't know > in general what frontend is driving them. IOW, whatever problem the OP > is experiencing would likely be there if lazy highlighting were turned > off (by the frontend or the style, or both). Styles are indeed not supposed to alter it - they're supposed to obey it instead. But completion-lazy-hilit does have something to do with not altering the original string: that's the whole definition of completion-lazy-hilit: if on, do copy-sequence first. Completion tables might alter the strings inside their sorting, but they own those string so that seems fine. Completion style's sorting should avoid that. This was a large part of the discussion we had at the time, and one result is that the sorter inside completion--flex-adjust-metadata does not alter the strings.
bug-gnu-emacs@HIDDEN
:bug#77054
; Package emacs
.
Full text available.Received: (at 77054) by debbugs.gnu.org; 20 Mar 2025 17:11:58 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Thu Mar 20 13:11:58 2025 Received: from localhost ([127.0.0.1]:58733 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1tvJQz-0004Ev-No for submit <at> debbugs.gnu.org; Thu, 20 Mar 2025 13:11:58 -0400 Received: from mail-oi1-x22e.google.com ([2607:f8b0:4864:20::22e]:50585) by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.84_2) (envelope-from <joaotavora@HIDDEN>) id 1tvJQt-0004EB-2F for 77054 <at> debbugs.gnu.org; Thu, 20 Mar 2025 13:11:55 -0400 Received: by mail-oi1-x22e.google.com with SMTP id 5614622812f47-3feaedb39e9so298125b6e.1 for <77054 <at> debbugs.gnu.org>; Thu, 20 Mar 2025 10:11:51 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1742490705; x=1743095505; darn=debbugs.gnu.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=BSoSvPSWIFCN+EOyjhu5Z+/TGAq+deKO/FmfHI3oUSg=; b=ixMLq6J4WFZopkNLwcwj8qIu4Ggj0y5M+tLziNtieMb+pY2DNUkWpeheTuH6EqOZnl N/nawajlNpYSiE7uPL0faAg8h3JwpTOiJC1KPXUqsKMy1ReKjtslSHmspG+jgMPHAUCe 3DMUzoESERQ97uELo8U7oHGHkEF+Mrs+vtx01lo0JncwLdEROnklq5vtJD1xFXqqYD9v zb+NbiJYODiU6PJbbFvTghzifkvIBXLWFDvkf+KnYZXamdzUF7BVKfrsAgSuTtBslUjm mvShbnVjNOcPQ6SLs/Pmbb1l3IznK5e/504ZOcWQDvXEMWhDkFpoLVuY/yH/hTatdpDD 3jIw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1742490705; x=1743095505; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=BSoSvPSWIFCN+EOyjhu5Z+/TGAq+deKO/FmfHI3oUSg=; b=K4AZ8J8aL2JZXMx5GVp7tYtd0TDPcB5yN2M+VJu8A3BGDeYu6idaboIwwoSO436CV9 VzLMeRvNaOKlvuoi/X2aD40XiOqDUtAcAzq8CVwKfajkQXZPXsXKyKuOL/v7/VWfbD10 2jUF9It7ywgks01jaa04rkYfgIzbPryX0kv8oYoSHOCbJ5mWa66f0arJuIlnzN6yCDLj R3VIcwMIVA44c+XmOfNZoLwtXc76jtt5UJSEXHp29NOJDIz+hWOjebcD9WsBFgsJzH4k BMKpE2EZNEWjy/Ue9ZtRg1O2asnQfMm+N8qrgbOCiPkDevNdA2WMS3cNBJvid2Rmn8KQ O/YQ== X-Forwarded-Encrypted: i=1; AJvYcCV8Km0oioZ/1Qv8xUqASHlV790Pqo6zZsslC50UmWmEhP7wEoP3tqUA8D1mcFrUQd1WzORyqg==@debbugs.gnu.org X-Gm-Message-State: AOJu0YyeuWHyQ5CfntgbzRBv8bjPqL5T188K2eH9OUTtxotEl8Og6BLX 0e8qj/myJrrKzr29xbHZHI/W3HOq3k/MQYKpXLxvgN8Gqf0KdI2sWw3nKFArl1BaHs3V18wIwio NM0UNG78HK74ujXb6TPaVatVedSU= X-Gm-Gg: ASbGncuVjKfSDMBnxc52n7PuzO96MABQf04fl3gO8z5St/I8kLISv7ZJPV0E/2J737i mF+whXJ6hIrwP+SvGmmMXFNT2qAjLPU/ZjzGBV1D9M2BTNgiyfcVQIP4VB7qXBnztG+LEfnjhh0 kf7fey1RP5kqfH2vhR+W4v8q1B+g== X-Google-Smtp-Source: AGHT+IFdirLhH1rf2KN9Z6cXSmPYez7eBizIfLnLpkArd/3BTOqG78JleSVofccn/f7CNMrTx8upqOvVZd6TNb3wd7Y= X-Received: by 2002:aca:1017:0:b0:3fe:aedb:19ea with SMTP id 5614622812f47-3feaedb1ad4mr4167914b6e.25.1742490705095; Thu, 20 Mar 2025 10:11:45 -0700 (PDT) MIME-Version: 1.0 References: <CAGiBfP0mDdeC=-ke_06kpvq5amod1urXK8n6LaawWVgppEWY_A@HIDDEN> <868qp5t1kj.fsf@HIDDEN> <CALDnm535E6xK9xen6VGkH51jwsRs06xgJNHFXQyLo5xBW+tGMw@HIDDEN> <CAGiBfP1s0exbPYvcVVysj5JwZGRU75PJ=fdWbzA6PbYwWTTfzg@HIDDEN> <861puropw5.fsf@HIDDEN> In-Reply-To: <861puropw5.fsf@HIDDEN> From: =?UTF-8?B?Sm/Do28gVMOhdm9yYQ==?= <joaotavora@HIDDEN> Date: Thu, 20 Mar 2025 17:11:36 +0000 X-Gm-Features: AQ5f1JoAsyL1sq_mxfV4diAjlsEesY0nDUopjJqQ87pL9mH1-qLN6dsm3LBEk7I Message-ID: <CALDnm50aE6xbioLANVSX=pKqn+6hiJe9KbQD7c_wvJPsvKvFyg@HIDDEN> Subject: Re: bug#77054: Completion highlighting applied outside completion-lazy-hilit-fn To: Eli Zaretskii <eliz@HIDDEN> Content-Type: multipart/alternative; boundary="0000000000008077040630c93b65" X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 77054 Cc: =?UTF-8?B?Sm/Do28gR3VlcnJh?= <joca.bt@HIDDEN>, 77054 <at> debbugs.gnu.org X-BeenThere: debbugs-submit <at> debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: <debbugs-submit.debbugs.gnu.org> List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe> List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/> List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org> List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help> List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe> Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org> X-Spam-Score: -1.0 (-) --0000000000008077040630c93b65 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Thu, Mar 20, 2025, 12:20 Eli Zaretskii <eliz@HIDDEN> wrote: > > > > If it helps, I can reframe this bug report as: if lazy highlighting is > > enabled, can Emacs perform additional fontification (outside the > > completion frontend and style)? > > I believe the answer is YES; if you would like to _replace_ the > fontifications of the candidate, your function should remove the face > text properties from all the characters of the string, before adding > your fontifications. > The function may do this and it's passed a fresh string to destroy at will I think, but it may not matter if later parts of the machinery add these properties. It could come from the table's sorting for example. There's little the style can do about that. Furthermore, as I've been trying to explain, lazy highlighting as I implemented is completely orthogonal. It's just a mechanism to allow front ends to delay fontification to the last possible moment when they actually display stuff to the user. Styles are not supposed to set it to anything that fontifies differently/specially because styles don't know in general what frontend is driving them. IOW, whatever problem the OP is experiencing would likely be there if lazy highlighting were turned off (by the frontend or the style, or both). Jo=C3=A3o --0000000000008077040630c93b65 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable <div dir=3D"auto"><div><div>On Thu, Mar 20, 2025, 12:20 Eli Zaretskii <<= a href=3D"mailto:eliz@HIDDEN">eliz@HIDDEN</a>> wrote:</div><div class= =3D"gmail_quote gmail_quote_container"><blockquote class=3D"gmail_quote" st= yle=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padd= ing-left:1ex">>=C2=A0<br> > If it helps, I can reframe this bug report as: if lazy highlighting is= <br> > enabled, can Emacs perform additional fontification (outside the<br> > completion frontend and style)?<br> <br> I believe the answer is YES; if you would like to _replace_ the<br> fontifications of the candidate, your function should remove the face<br> text properties from all the characters of the string, before adding<br> your fontifications.<br></blockquote></div></div><div dir=3D"auto"><br></di= v><div dir=3D"auto">The function may do this and it's passed a fresh st= ring to destroy at will I think, but it may not matter if later parts of th= e machinery add these properties. It could come from the table's sortin= g for example. There's little the style can do about that.=C2=A0</div><= div dir=3D"auto"><br></div><div dir=3D"auto">Furthermore, as I've been = trying to explain, lazy highlighting as I implemented is completely orthogo= nal. It's just a mechanism to allow front ends to delay fontification t= o the last possible moment when they actually display stuff to the user. St= yles are not supposed to set it to anything that fontifies differently/spec= ially because styles don't know in general what frontend is driving the= m. IOW, whatever problem the OP is experiencing would likely be there if la= zy highlighting were turned off (by the frontend or the style, or both).</d= iv><div dir=3D"auto"><br></div><div dir=3D"auto">Jo=C3=A3o</div></div> --0000000000008077040630c93b65--
bug-gnu-emacs@HIDDEN
:bug#77054
; Package emacs
.
Full text available.Received: (at 77054) by debbugs.gnu.org; 20 Mar 2025 12:20:12 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Thu Mar 20 08:20:11 2025 Received: from localhost ([127.0.0.1]:55964 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1tvEsc-0002ye-Om for submit <at> debbugs.gnu.org; Thu, 20 Mar 2025 08:20:11 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:55200) by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.84_2) (envelope-from <eliz@HIDDEN>) id 1tvEsW-0002xv-Ie for 77054 <at> debbugs.gnu.org; Thu, 20 Mar 2025 08:20:07 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from <eliz@HIDDEN>) id 1tvEsR-0005ec-2d; Thu, 20 Mar 2025 08:19:59 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=MIME-version:References:Subject:In-Reply-To:To:From: Date; bh=WBjvHEYKfVfDQmibnAsc/TBik8csDJz6tB0kZ8tElP4=; b=cLp1ph1i/bGt1rmoVnl3 fewzvFlwEV97MYAZOW1je6oBxT0SUGkzevgjOWe62ZlQvMzVWXPr8Sy0F5WlQvlo/fICbXr4Yf2FT kR+areTe5otIRLN8LuZBOHVIcqxkl84BsTUA9w4pyYCdLYoi3MyGxrT3xuokgCs4ZLhGZv5RpRzA0 C9MZVCIo3ER7EsxFjdXlXLDKEkPIov/tlhQWrRKuAQ1Z/F9VFsTQm8dv2T+nP1pzJ4nhEBdTaACau bqNEk4kSgmUSylJ2hvWL/Anxhd70sSfOLqduoHftMqDb8GUmrGYAhdBJSKM1fV00wxG6I6an82kca QvxktU5VgdE8oA==; Date: Thu, 20 Mar 2025 14:19:54 +0200 Message-Id: <861puropw5.fsf@HIDDEN> From: Eli Zaretskii <eliz@HIDDEN> To: =?utf-8?Q?Jo=C3=A3o?= Guerra <joca.bt@HIDDEN> In-Reply-To: <CAGiBfP1s0exbPYvcVVysj5JwZGRU75PJ=fdWbzA6PbYwWTTfzg@HIDDEN> (message from =?utf-8?Q?Jo=C3=A3o?= Guerra on Wed, 19 Mar 2025 16:12:02 +0100) Subject: Re: bug#77054: Completion highlighting applied outside completion-lazy-hilit-fn References: <CAGiBfP0mDdeC=-ke_06kpvq5amod1urXK8n6LaawWVgppEWY_A@HIDDEN> <868qp5t1kj.fsf@HIDDEN> <CALDnm535E6xK9xen6VGkH51jwsRs06xgJNHFXQyLo5xBW+tGMw@HIDDEN> <CAGiBfP1s0exbPYvcVVysj5JwZGRU75PJ=fdWbzA6PbYwWTTfzg@HIDDEN> MIME-version: 1.0 Content-type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 77054 Cc: joaotavora@HIDDEN, 77054 <at> debbugs.gnu.org X-BeenThere: debbugs-submit <at> debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: <debbugs-submit.debbugs.gnu.org> List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe> List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/> List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org> List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help> List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe> Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org> X-Spam-Score: -3.3 (---) > From: João Guerra <joca.bt@HIDDEN> > Date: Wed, 19 Mar 2025 16:12:02 +0100 > Cc: 77054 <at> debbugs.gnu.org > > ``` > (setopt completion-styles '(flex) > file-name-shadow-properties `(invisible t > ,@file-name-shadow-properties)) > (setq completion-lazy-hilit t) > (defun completion--hilit-from-re (string regexp &optional point-idx) > "Bogus fontification that only fontifies the last character of STRING." > (message "lazy %s" completion-lazy-hilit) > (let ((last (1- (length string)))) > (add-face-text-property last (1+ last) 'completions-common-part t string)) > string) > (icomplete-mode t) > ``` > > See the attached picture for the outcome (if that doesn't work here's > an alternative url > https://drive.proton.me/urls/ZMMW1D9S2R#EXEwlTnWeCHy). You'll notice > that my fontification function has run, fontifying the last character. > However, additional characters are fontified, meaning there's > fontification happening elsewhere (the culprit indicated in the > original bug report). It could be the case that the frontend decided > to do additional fontification, but that's not the case (except for > the first candidate). > > My expectation as a user or package maintainer is that no > fontification will be performed by Emacs if I am using lazy > highlighting. However, that's not the case in *specific* situations as > I am trying to show in this bug report. > > > At least according to the docstrings I wrote at the time, and which I suggest reading. > > Neither docstring directly discusses whether additional fontification > can be performed by Emacs when using lazy highlighting, so my > assumption would be no. The doc string says (in Emacs 30.1): completion-lazy-hilit-fn is a variable defined in ‘minibuffer.el’. Its value is nil Fontification function set by lazy-highlighting completions styles. When a given style wants to enable support for ‘completion-lazy-hilit’ (which see), that style should set this variable to a function of one argument. It will be called with each completion candidate, a string, to be displayed to the user, and should destructively propertize these strings with the ‘face’ property. The "should destructively propertize" part tells me that the function should take care of removing the face properties present in the input string where it doesn't want those fontifications. By contrast, your function calls add-text-properties, which only adds the face properties to a single character, but does nothing with the face properties of the rest of the string. > If it helps, I can reframe this bug report as: if lazy highlighting is > enabled, can Emacs perform additional fontification (outside the > completion frontend and style)? I believe the answer is YES; if you would like to _replace_ the fontifications of the candidate, your function should remove the face text properties from all the characters of the string, before adding your fontifications. > If the answer is yes, can we consider changing that behaviour? As I > believe it constraints what packages can do. Actually, I think the existing behavior leaves the packages more freedom, because they can retain any of the existing fontifications as they see fit. Don't you agree? Or what am I missing?
bug-gnu-emacs@HIDDEN
:bug#77054
; Package emacs
.
Full text available.Received: (at 77054) by debbugs.gnu.org; 19 Mar 2025 20:41:25 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Wed Mar 19 16:41:25 2025 Received: from localhost ([127.0.0.1]:53347 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1tv0E9-0002mJ-58 for submit <at> debbugs.gnu.org; Wed, 19 Mar 2025 16:41:25 -0400 Received: from mail-oo1-xc2f.google.com ([2607:f8b0:4864:20::c2f]:50665) by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.84_2) (envelope-from <joaotavora@HIDDEN>) id 1tv0E6-0002m3-PY for 77054 <at> debbugs.gnu.org; Wed, 19 Mar 2025 16:41:23 -0400 Received: by mail-oo1-xc2f.google.com with SMTP id 006d021491bc7-60009c5dd51so7252eaf.1 for <77054 <at> debbugs.gnu.org>; Wed, 19 Mar 2025 13:41:22 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1742416877; x=1743021677; darn=debbugs.gnu.org; h=content-transfer-encoding:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=Gb2rmMDf++zJdZwT6qrchR+eX1QwFWTJuY8JfYUfA3Q=; b=Z8dILVISGxrrlIJr2KppRLnjJ9VI4OooY8MNfSVZGqAFzugQH3wm2uMF8ugYINFsDM aMkzJzvDkeH+L7G4QlSNJISvtk7Ew2MQR8RjD5B9+JJK7rcp5dgPB9E7NUWrgEN6UQMy lldUfK4vHdYszt+cSEt+1+Z5ywZv8wj1HzN46tfugMoQ1+LZBBN2gZ46KNwbqcPXP75Q /w+vOVFCC+N9eVeLS+bHjnwH9JzJcOluq0TEM3pzkV6/LIqeOjx/8Fq+xiINRTtEUoZv TuIldvJHL46sNo053nKwAt5PKLIb1Y/Si5BGhel10WJvZwNiEYrYkYEMGEPRNAg7I83o dH2w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1742416877; x=1743021677; h=content-transfer-encoding:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=Gb2rmMDf++zJdZwT6qrchR+eX1QwFWTJuY8JfYUfA3Q=; b=HlAFvF5JsOOH4uww1thw7Fa+xvrTJEL7zqqrr3UOoXT0beNlxpdo3L1OKA+hHh/7yZ OvW3kuvmliAxmDLlJY6j7FheJBjwysygL7TzLq7SBkooCW8/FNaxAb54qyub4uJCP0KK SWgAOiE+7fyq02MsnES94oC1PdNQrjWZYJn+31OF7qOnh6/gokFjy7wJd1HrOMOgj+W0 tzHL7E3AQTeL9o4boPBRf0n7byIbAgFPsknJbQdHaS5S4ULBV513QcMwIPVGXBlzMFwY jvNtok8P0EotpspNrYfXNCQOFkkF1C+yHkTRzF6NAMRblrrZYQ3v8MD2nNpyygJ1hRt5 8OPg== X-Forwarded-Encrypted: i=1; AJvYcCU3c/R8FKkJuuOpmQm81p9X3lWwlpG/Xyp6d7XqxPQV6JGWuHEhxouw2/haZJfluEkDFRb2ag==@debbugs.gnu.org X-Gm-Message-State: AOJu0YzbYXQmcV1hZgWBaczRqQziNjmBVoVUTfl1pHif8F+4tLSoE+3H k8Vm9M0L9rviE0E+QCFp7JR4eB5CFn0fkOHCJc/x+DV9XX7T7HAt3Rstdqg9XMEwpNWNMclYXsU GI5NEu8L76o3YcjD2wrI6G2ccY0s= X-Gm-Gg: ASbGncuZSYUwJoIZ5inBXOGYfs01DdKzrtzPV+6BTqsq00Y9JgZTAJnqV4897P1DDJ/ xuXBY1rvS4oE7fkiWfsEDC/zt8EHuOsB9TXshEcMhdNWJYM3xCrCa8CTi0/1O3T0xK0hR9xcZOE vcSf09jntPgrxLuGsZvMMCW/mdfA== X-Google-Smtp-Source: AGHT+IE4pi38HVrE8+8unswaQKgij5jKUeIkIcCYx2G5JWHMV6HD+3wFgeX/K6HpPh/V+iGtVTruVV4AHdqTNFIYiHo= X-Received: by 2002:a05:6820:54e:b0:5fe:9edb:eafe with SMTP id 006d021491bc7-6021e3d993amr2838211eaf.5.1742416876698; Wed, 19 Mar 2025 13:41:16 -0700 (PDT) MIME-Version: 1.0 References: <CAGiBfP0mDdeC=-ke_06kpvq5amod1urXK8n6LaawWVgppEWY_A@HIDDEN> <868qp5t1kj.fsf@HIDDEN> <CALDnm535E6xK9xen6VGkH51jwsRs06xgJNHFXQyLo5xBW+tGMw@HIDDEN> <CAGiBfP1s0exbPYvcVVysj5JwZGRU75PJ=fdWbzA6PbYwWTTfzg@HIDDEN> <CALDnm52tW4Drnr_64DRTWzyqy2_NkZgf-i4SQ3KJa=5Mdi_-4w@HIDDEN> In-Reply-To: <CALDnm52tW4Drnr_64DRTWzyqy2_NkZgf-i4SQ3KJa=5Mdi_-4w@HIDDEN> From: =?UTF-8?B?Sm/Do28gVMOhdm9yYQ==?= <joaotavora@HIDDEN> Date: Wed, 19 Mar 2025 20:41:32 +0000 X-Gm-Features: AQ5f1JpRzNRlKdsizyr465RTopI-MZKMld-WO_Wy6OqCF8UmuKDEQiFb-IGopdA Message-ID: <CALDnm50f1MiXx_OZ8O7AqPDwsEzvSEZ9oRz9nre5P4udgV7WsQ@HIDDEN> Subject: Re: bug#77054: Completion highlighting applied outside completion-lazy-hilit-fn To: =?UTF-8?B?Sm/Do28gR3VlcnJh?= <joca.bt@HIDDEN>, Eli Zaretskii <eliz@HIDDEN>, 77054 <at> debbugs.gnu.org Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 77054 X-BeenThere: debbugs-submit <at> debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: <debbugs-submit.debbugs.gnu.org> List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe> List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/> List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org> List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help> List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe> Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org> X-Spam-Score: -1.0 (-) Forgot to CC the bug tracker. So just wanted to say again I'm sorry to disappoint, and to clarify a possible misunderstanding. "lazy" has nothing to do with "what" is highlighted but merely "when". As far as I can tell,that part is working fine,so whatever your problem is And again, lazy highlighting only concerns a collaboration between style and frontend. toodle-oo! Jo=C3=A3o On Wed, Mar 19, 2025 at 3:14=E2=80=AFPM Jo=C3=A3o T=C3=A1vora <joaotavora@g= mail.com> wrote: > > So, sorry to disappoint you Jo=C3=A3o, and best of luck! > > Jo=C3=A3o > > On Wed, Mar 19, 2025, 15:12 Jo=C3=A3o Guerra <joca.bt@HIDDEN> wrote: >> >> > AFAIK this feature has been in Emacs at least for a full major version= cycle (29) and had it failed in its basic mission we would have heard abou= t it. I also remember testing it thoroughly. >> >> It feels a bit disappointing when the answer to a possible bug report >> is something like "nobody has reported it so it must be working fine" >> or "it worked on my machine". >> >> Anyway, here's a way to reproduce it in a less "complex" setup, only >> using Emacs builtins. >> >> The flex style sets `completion-lazy-hilit-fn` in the middle of >> `completion-pcm--hilit-commonality` to `completion--hilit-from-re`. >> Let's override that just for demonstration purposes in a *hacky way*. >> >> ``` >> (setopt completion-styles '(flex) >> file-name-shadow-properties `(invisible t >> ,@file-name-shadow-properties)) >> (setq completion-lazy-hilit t) >> (defun completion--hilit-from-re (string regexp &optional point-idx) >> "Bogus fontification that only fontifies the last character of STRING.= " >> (message "lazy %s" completion-lazy-hilit) >> (let ((last (1- (length string)))) >> (add-face-text-property last (1+ last) 'completions-common-part t st= ring)) >> string) >> (icomplete-mode t) >> ``` >> >> See the attached picture for the outcome (if that doesn't work here's >> an alternative url >> https://drive.proton.me/urls/ZMMW1D9S2R#EXEwlTnWeCHy). You'll notice >> that my fontification function has run, fontifying the last character. >> However, additional characters are fontified, meaning there's >> fontification happening elsewhere (the culprit indicated in the >> original bug report). It could be the case that the frontend decided >> to do additional fontification, but that's not the case (except for >> the first candidate). >> >> My expectation as a user or package maintainer is that no >> fontification will be performed by Emacs if I am using lazy >> highlighting. However, that's not the case in *specific* situations as >> I am trying to show in this bug report. >> >> > At least according to the docstrings I wrote at the time, and which I = suggest reading. >> >> Neither docstring directly discusses whether additional fontification >> can be performed by Emacs when using lazy highlighting, so my >> assumption would be no. >> >> If it helps, I can reframe this bug report as: if lazy highlighting is >> enabled, can Emacs perform additional fontification (outside the >> completion frontend and style)? >> >> If the answer is yes, can we consider changing that behaviour? As I >> believe it constraints what packages can do. -- Jo=C3=A3o T=C3=A1vora
bug-gnu-emacs@HIDDEN
:bug#77054
; Package emacs
.
Full text available.Received: (at 77054) by debbugs.gnu.org; 19 Mar 2025 15:19:19 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Wed Mar 19 11:19:19 2025 Received: from localhost ([127.0.0.1]:52322 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1tuvCQ-0005ti-Kc for submit <at> debbugs.gnu.org; Wed, 19 Mar 2025 11:19:19 -0400 Received: from mail-io1-xd31.google.com ([2607:f8b0:4864:20::d31]:51490) by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.84_2) (envelope-from <joca.bt@HIDDEN>) id 1tuvCJ-0005rm-1D for 77054 <at> debbugs.gnu.org; Wed, 19 Mar 2025 11:19:13 -0400 Received: by mail-io1-xd31.google.com with SMTP id ca18e2360f4ac-85517db52a2so72724839f.3 for <77054 <at> debbugs.gnu.org>; Wed, 19 Mar 2025 08:19:11 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1742397544; x=1743002344; darn=debbugs.gnu.org; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=jw940Zur9UrLJFRJWtuwMT0avlJ87D28PRCPW+sToNg=; b=mU2RyTZJP6xrxPNR9RiHhs4O4FXV0jzfprJnGipHFfkfeWOYVuwu4CYyGLEfJURG+p htLxwvmVLl6MyKFOJWBVs4ylbK4hUJSSvJRz2Q3FdYIQtlxuapz01PlVhKJzrsZMd2bS G5WCdJzeBUxzkatwu+9Xhq3pzz02GctElE6LgtnBNq5dr1oVACFzv8+g6ZSbGZdnAqPL 2kW5NdP+i42FySLs/l85DoGePoGXil+aJmr3iZl4RdMXK9297x8jm/QNrujukeaGVUdn LQcNV7jkrpExw+Bwcw0y7MUl1iDuIqFNJMjqM/NVUWhLUXIgc6d+JJPVlTXzHM47nWeR 2HbA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1742397544; x=1743002344; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=jw940Zur9UrLJFRJWtuwMT0avlJ87D28PRCPW+sToNg=; b=bDAFO1z2RSIfIZyQZln6p6mHuDhWqhmAs37hk59/kuyBmuyBXwFUsb88KA+X2qxnru GuyUYyEtL+51M8VjtfAyZnHzpM0Hh1W2O4irAcvRfj0mvNujMRIwqJfexMwmLfqEbW0t 2kQneMUthAVrHiDg+P+7CrqhZNg+DXoSdToWWM/ULJciXityvXv3SKsw63cUFbNyyVM6 AUX4HcetEKc3b6JQ2AUWT0G0Kke2B7+vDBwqodqaRvCBlKKy6gqxSG/sNx8dNRLQbRLI 9XUWl8ONRYsDJuE3GjsXiVOnRAzv3egr82HKm2iiZvbQN3PImroh/mqFvAiYZ0LmPp+b CZ9Q== X-Gm-Message-State: AOJu0YyzacUHj70tGrtiHH/h4Gsk75Y6ZGbo7LN4Ge9hW94EFihdictC 4UxUL91b6bhRkl+mU+fpMY1Xv67rF/R1viCRmDURuLoQaq/jgoD8gbinMLb+9r7e6jPZuS7tfPC I3fB7XZWpdyfpHGABsp4v4RahXLk= X-Gm-Gg: ASbGncvP2UGmNDCsJzB4TY7wu+oEuuJqXiTy7dvbBXACdyph9dKPSXfvphvGNWY7hUk pbGUfEOWkPTS/iARE+KFoQIVLBwPiaQqAGbOnGJ4BrEOfqemTK1Tft+xaJojlsOj4msTFaXB1VF S9FUZwPmezxA8qpHsE1S2oAFqD X-Google-Smtp-Source: AGHT+IGMdg+V0zyKB95nhbj+fWNfIerzr50lrfJkbF5zZ7EEiQf+kHjXgO64fk1SiB5WJL3q8+8iI+YwLt0dqBv7GZs= X-Received: by 2002:a05:6e02:378a:b0:3d3:f27a:9101 with SMTP id e9e14a558f8ab-3d586b22049mr30334765ab.1.1742397544599; Wed, 19 Mar 2025 08:19:04 -0700 (PDT) MIME-Version: 1.0 References: <CAGiBfP0mDdeC=-ke_06kpvq5amod1urXK8n6LaawWVgppEWY_A@HIDDEN> <868qp5t1kj.fsf@HIDDEN> <CALDnm535E6xK9xen6VGkH51jwsRs06xgJNHFXQyLo5xBW+tGMw@HIDDEN> <CAGiBfP1s0exbPYvcVVysj5JwZGRU75PJ=fdWbzA6PbYwWTTfzg@HIDDEN> <CALDnm52tW4Drnr_64DRTWzyqy2_NkZgf-i4SQ3KJa=5Mdi_-4w@HIDDEN> In-Reply-To: <CALDnm52tW4Drnr_64DRTWzyqy2_NkZgf-i4SQ3KJa=5Mdi_-4w@HIDDEN> From: =?UTF-8?B?Sm/Do28gR3VlcnJh?= <joca.bt@HIDDEN> Date: Wed, 19 Mar 2025 16:18:18 +0100 X-Gm-Features: AQ5f1Jqg606jamCgUSB4ADhTjRsNLNoXXqkWoXeN35VYonqrqrBXuF69ktzIcuM Message-ID: <CAGiBfP1rfaB47jtPerLzx9SJp8k1v3yTvOOqqc9dagu1SYx8-Q@HIDDEN> Subject: Fwd: bug#77054: Completion highlighting applied outside completion-lazy-hilit-fn To: Eli Zaretskii <eliz@HIDDEN> Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 77054 Cc: 77054 <at> debbugs.gnu.org X-BeenThere: debbugs-submit <at> debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: <debbugs-submit.debbugs.gnu.org> List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe> List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/> List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org> List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help> List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe> Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org> X-Spam-Score: -1.0 (-) Eli, is this how we want Emacs maintainers to behave? ---------- Forwarded message --------- From: Jo=C3=A3o T=C3=A1vora <joaotavora@HIDDEN> Date: Wed, 19 Mar 2025 at 16:14 Subject: Re: bug#77054: Completion highlighting applied outside completion-lazy-hilit-fn To: Jo=C3=A3o Guerra <joca.bt@HIDDEN> So, sorry to disappoint you Jo=C3=A3o, and best of luck! Jo=C3=A3o On Wed, Mar 19, 2025, 15:12 Jo=C3=A3o Guerra <joca.bt@HIDDEN> wrote: > > > AFAIK this feature has been in Emacs at least for a full major version = cycle (29) and had it failed in its basic mission we would have heard about= it. I also remember testing it thoroughly. > > It feels a bit disappointing when the answer to a possible bug report > is something like "nobody has reported it so it must be working fine" > or "it worked on my machine". > > Anyway, here's a way to reproduce it in a less "complex" setup, only > using Emacs builtins. > > The flex style sets `completion-lazy-hilit-fn` in the middle of > `completion-pcm--hilit-commonality` to `completion--hilit-from-re`. > Let's override that just for demonstration purposes in a *hacky way*. > > ``` > (setopt completion-styles '(flex) > file-name-shadow-properties `(invisible t > ,@file-name-shadow-properties)) > (setq completion-lazy-hilit t) > (defun completion--hilit-from-re (string regexp &optional point-idx) > "Bogus fontification that only fontifies the last character of STRING." > (message "lazy %s" completion-lazy-hilit) > (let ((last (1- (length string)))) > (add-face-text-property last (1+ last) 'completions-common-part t str= ing)) > string) > (icomplete-mode t) > ``` > > See the attached picture for the outcome (if that doesn't work here's > an alternative url > https://drive.proton.me/urls/ZMMW1D9S2R#EXEwlTnWeCHy). You'll notice > that my fontification function has run, fontifying the last character. > However, additional characters are fontified, meaning there's > fontification happening elsewhere (the culprit indicated in the > original bug report). It could be the case that the frontend decided > to do additional fontification, but that's not the case (except for > the first candidate). > > My expectation as a user or package maintainer is that no > fontification will be performed by Emacs if I am using lazy > highlighting. However, that's not the case in *specific* situations as > I am trying to show in this bug report. > > > At least according to the docstrings I wrote at the time, and which I s= uggest reading. > > Neither docstring directly discusses whether additional fontification > can be performed by Emacs when using lazy highlighting, so my > assumption would be no. > > If it helps, I can reframe this bug report as: if lazy highlighting is > enabled, can Emacs perform additional fontification (outside the > completion frontend and style)? > > If the answer is yes, can we consider changing that behaviour? As I > believe it constraints what packages can do.
bug-gnu-emacs@HIDDEN
:bug#77054
; Package emacs
.
Full text available.Received: (at 77054) by debbugs.gnu.org; 19 Mar 2025 15:13:12 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Wed Mar 19 11:13:12 2025 Received: from localhost ([127.0.0.1]:52277 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1tuv6T-0004zD-LJ for submit <at> debbugs.gnu.org; Wed, 19 Mar 2025 11:13:12 -0400 Received: from mail-io1-xd35.google.com ([2607:f8b0:4864:20::d35]:50214) by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.84_2) (envelope-from <joca.bt@HIDDEN>) id 1tuv6G-0004vv-B2 for 77054 <at> debbugs.gnu.org; Wed, 19 Mar 2025 11:12:58 -0400 Received: by mail-io1-xd35.google.com with SMTP id ca18e2360f4ac-85e15dc8035so18135039f.0 for <77054 <at> debbugs.gnu.org>; Wed, 19 Mar 2025 08:12:56 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1742397170; x=1743001970; darn=debbugs.gnu.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=dIlsek0EUD+e8VzVFFCIpfGhxVe5gWVFwUtx5F+Q33k=; b=JQp6wwVtAV4AoLCuA20OTvq3puVYccyqrOzqwShhAAu7A1LdG9uB91PPyV6tbzybvK wxY34NBj37ZW/1V1q8MGSlW/JR2Vd9IYCGg6/pHUgIEm+4KsZguKw7ffYWap+9qhFQsd vPvy5M/TOycEpejFYbAJT03Je0D7h+4kqnHElaRpE5JygMjqLjlSZR/eW4W4/W574OfW hN+UFDnn8TAA3kWNqQ43Qsx3Mbi7/us/0txng6Y15rU/1Zp88Ikinh+q0puOPNv8EGie stFdpOwSeOIdofTUTwOxX0H2Nzr1IFyNqFGCaymz158lnGTluAemYTsIweVs3zgXXZVs W6JA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1742397170; x=1743001970; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=dIlsek0EUD+e8VzVFFCIpfGhxVe5gWVFwUtx5F+Q33k=; b=SvOXyknjhxdbykypLLKiVSbiTFNB/4A6i2yvBlvD0pKA9u/eOIauqCU86DVDg+RNi/ MvNXdza6hUybMOdklA4Q8GpnVM/XfY34sF8NIdlO/7Dy61NcZiJ33NS5tGGfV0qSZxHs 28C3cnJeoAYVkDP/sN1FmFdXLiNgHJEB6CH221H+lS/S+igu9hbszwvPC9lfNWi89U9l t65/3dZlsNNTorunCF5jELkoOvh6OIw2FZUzQp27kfSMFdQGlwV1kL+pr3/A0//Kiar7 HumpznF4sxbGmXjTBC0LaV+OAD6L+d5hqPxUVG0kkKVsgBbh4bA7iT91G7uQyrGObmoE yxAw== X-Gm-Message-State: AOJu0YxcFh3lLi6aLxnEP4GxJOxEnCEAWbR3ofzcWfmV85ZvTqiGqmr6 jksO2IL9SuUFH9+ypPhDqs8d/cCOinFabq4XI/qV/43fN6d/d0ovyQIqK3wceLEJbAoRlTduqvD es2J/lo1TyXUNHFN5d9+A1mAP+teMUk8N X-Gm-Gg: ASbGncvlxHlDX7yyOEnFh7rRYFxDhqdfouKJMdNgXxBUqk0O6KqLzKHw9mRFo8r0QOp k4qTbSPz67Qsn2Drb8DpXv9dd5+lbuMy2EayhFFRjYDI0gW4mVBe916zdvj3c22VECcwLaRtjnV 1qu/0s0BWq7b1b3E93CrvNVWJW X-Google-Smtp-Source: AGHT+IGlelkxGOEx3syKxqqew3UJgVTiUBVyKo8f4bJXTJL1FRRp8wz6AwzjqRGSX7DWfvoZ+r5VuWyGjSJQuZrpZGo= X-Received: by 2002:a5d:928f:0:b0:85e:181e:1bd3 with SMTP id ca18e2360f4ac-85e181e1d5cmr163705939f.1.1742397169193; Wed, 19 Mar 2025 08:12:49 -0700 (PDT) MIME-Version: 1.0 References: <CAGiBfP0mDdeC=-ke_06kpvq5amod1urXK8n6LaawWVgppEWY_A@HIDDEN> <868qp5t1kj.fsf@HIDDEN> <CALDnm535E6xK9xen6VGkH51jwsRs06xgJNHFXQyLo5xBW+tGMw@HIDDEN> In-Reply-To: <CALDnm535E6xK9xen6VGkH51jwsRs06xgJNHFXQyLo5xBW+tGMw@HIDDEN> From: =?UTF-8?B?Sm/Do28gR3VlcnJh?= <joca.bt@HIDDEN> Date: Wed, 19 Mar 2025 16:12:02 +0100 X-Gm-Features: AQ5f1JrKbiZgn3LX5GQ3nTtpnywLbmv6x1LgToFFVAEtgzhyJzKhtJCypTUOhGU Message-ID: <CAGiBfP1s0exbPYvcVVysj5JwZGRU75PJ=fdWbzA6PbYwWTTfzg@HIDDEN> Subject: Re: bug#77054: Completion highlighting applied outside completion-lazy-hilit-fn To: =?UTF-8?B?Sm/Do28gVMOhdm9yYQ==?= <joaotavora@HIDDEN>, Eli Zaretskii <eliz@HIDDEN> Content-Type: multipart/mixed; boundary="0000000000005404590630b3740f" X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 77054 Cc: 77054 <at> debbugs.gnu.org X-BeenThere: debbugs-submit <at> debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: <debbugs-submit.debbugs.gnu.org> List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe> List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/> List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org> List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help> List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe> Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org> X-Spam-Score: -1.0 (-) --0000000000005404590630b3740f Content-Type: text/plain; charset="UTF-8" > AFAIK this feature has been in Emacs at least for a full major version cycle (29) and had it failed in its basic mission we would have heard about it. I also remember testing it thoroughly. It feels a bit disappointing when the answer to a possible bug report is something like "nobody has reported it so it must be working fine" or "it worked on my machine". Anyway, here's a way to reproduce it in a less "complex" setup, only using Emacs builtins. The flex style sets `completion-lazy-hilit-fn` in the middle of `completion-pcm--hilit-commonality` to `completion--hilit-from-re`. Let's override that just for demonstration purposes in a *hacky way*. ``` (setopt completion-styles '(flex) file-name-shadow-properties `(invisible t ,@file-name-shadow-properties)) (setq completion-lazy-hilit t) (defun completion--hilit-from-re (string regexp &optional point-idx) "Bogus fontification that only fontifies the last character of STRING." (message "lazy %s" completion-lazy-hilit) (let ((last (1- (length string)))) (add-face-text-property last (1+ last) 'completions-common-part t string)) string) (icomplete-mode t) ``` See the attached picture for the outcome (if that doesn't work here's an alternative url https://drive.proton.me/urls/ZMMW1D9S2R#EXEwlTnWeCHy). You'll notice that my fontification function has run, fontifying the last character. However, additional characters are fontified, meaning there's fontification happening elsewhere (the culprit indicated in the original bug report). It could be the case that the frontend decided to do additional fontification, but that's not the case (except for the first candidate). My expectation as a user or package maintainer is that no fontification will be performed by Emacs if I am using lazy highlighting. However, that's not the case in *specific* situations as I am trying to show in this bug report. > At least according to the docstrings I wrote at the time, and which I suggest reading. Neither docstring directly discusses whether additional fontification can be performed by Emacs when using lazy highlighting, so my assumption would be no. If it helps, I can reframe this bug report as: if lazy highlighting is enabled, can Emacs perform additional fontification (outside the completion frontend and style)? If the answer is yes, can we consider changing that behaviour? As I believe it constraints what packages can do. --0000000000005404590630b3740f Content-Type: image/png; name="77054.png" Content-Disposition: attachment; filename="77054.png" Content-Transfer-Encoding: base64 Content-ID: <f_m8g1cu8s0> X-Attachment-Id: f_m8g1cu8s0 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 t1LcZWS5RobvRfd0YHFvVFd5fgHDXbhr/ezqERwZfoa3XXwaPX/LP4nN96fPUeJ+4In1DX/+jbwf Hf655fDPNz9zfs7mkov8Dwz3epDHNSJ8Lf43SE5Ox/+u8J/63wMuJ78faVPrd0eL+/TXiirb79sY yvLf/T/pP/zOv64sm1YLtYpuPd8DU9zffvst1QX+l37pHfTii7tpz55H6cSJ4/TEEw/S1NTn6Utf +gzdddeoyhlnnE5///ffplde/j795PUfqfzoH35Ae158gZ584nEa/fSNNd8PgiAIgiDIQk/d4h4n 6yzp+k8dfQ7dEqbXV+dK6NbtWn5J5mNY3HlZJQ6PYefZ5fkaPA631nDduCXf7CGQdTk5Le56jXYp 5FLO48L3xdHPSl6rUWmltHNs4i67v2cJn0eLe6d0lefwsxxdvUxFCruZPZ/7F0ret29ZqdKoz6DR 98PRz5Z/1vnZ85Jmt956a2W+iWa1tnP4vGlb3PmeebgMz2Cuw9813s7fF72N/85/8rZGiLtsadf5 X/+Xf0b/y//rnypx554hvNoFh4cNcbTQP/XUU5V9vI1fRPG2ThD3N9/4R/rFL35Ov/RLv0TPPjtJ 3/zmFH3ve9wF/l66777bVCv81772BRWW+507ZlRL+z/88DWV1159mV595fv03ef/nkY+dX3N94Mg CIIgCLLQU7e4S1FPCh+vhVhHL+GmW5Fr+SWZj2FxZ2HgXHPNNRWRqDX8izu3kPN4aR7rzmPiOTye Xl4/Llw3s2Vdt5rXEv0LPP/ibbZqNjJS2lsh7/yMeE4BTiO7yvO5OqGrvBn9PLW8y+esW+Vfmv5P 9O3pv1Jp1PNvxv3o8PNl4WJR53Xd9aR1tTz3tNHibo5xN8e5d0KL+47xLSqyxf2f/7P/J/2zf/r/ 6OoW93/8xVE68rOf0nvfezaNjd1MmzffTDt38tr0d9LWrSN0//330HPPfUvl3HP/kMa3P6TGtr98 6KAKSzv/eeilObpty6dqvh8EQRAEQZCFHoh7TCDuEPd6BMcViHvjAnGvTXTr+R5A3BEEQRAEQVqf jhJ3c6k4ec2kaHFnYeBwl3b+5Y9F0JRx/XctibboLtta2lk+eGIrHjfPueqqqyLXj4sWd91VvtaY 8t8scZcSKSPLNyr8jPRz5/vjMdP85WT5toVfzuguxXIfh6WNh0zwd4pfeNT6vapHcJKiJV0/V/M5 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 quXm5qZpzWAfeZP7Ip+xEvBenkVcz0w9R9Ob19BAL79kcAt9orgrEedZ5UdoP7/A0cXm5mjz4CAN jES7smcX9z7K8TJo+/nzrVxAvYywTlqXESXTffnwrPJzczSzhp9ZnlaPnwh1jfdnlR+h/aFZ7lna V9DASHRW+aaKu9rEs8qPhJdPm5ujLUF95POR19BErlULQVf4oVX8/Q/PdG+bVV6NoR8YoT3G95KX 2uMVA/p6xfj5ENnEfW7LWbSMZ6nfo1/QzNHMlrXqu8UvGeoVbj7/aXz+F/1Z08Pnr0Polbgvpd7l q+ihvebPNXeVP80+aR3vveUsOm3pED1k1ueWdWqcfD6yJBzTGeJez6zyWA4O4l4XFamSOxTVZc10 lJyVjfHRka7IceuyB9tCNpu1fBaMc9jiqHu2+9Xj4s1z+zIsl0XSRNYFD8pbfLhmlLhG7sN+gVT1 CVYgMJ+dv1us4+542ZKlPqkxxrCHzx8Veb94Pnbdbtd49sjzsazj7hesjmFXoi7q4/Jstfxb0vNX p2fBjNa7Un8psgZcHxZ1XZaff1huLahW9/jzZkKdL35cf1jG/bHp5j2rNdlnT1XXnM+PVn9B1i3u s1NiXHyehkbdLwgYXmIu/Hyk/DcGfknA0mlvZQ7WKrc8Fz9DzuOYJLHOjOr6nvB5hWScBZTvr3qM WpNdfV56LXFjsjzd4n4g+LyMdan9z8t9H7zEXGTtd5ZDWVBRVmusu6S+1aiXGaE16XnddCHnBlnW cff3j6jlv5S4q89vyG/FZ3EPJkNTS7HNVsewl1jU+SVKpT6WddzV8cbYXktWW5Z489dNF/e7mmXe PXRCvTio1CdYCz0kw34Lepr6SA/Juo67fy49s7zfMs/Lnul72aRb0XWL+75JWjPoL++ny6zelH5u gyRYFvmlR3X+AH6eQs5F+bTruPv7N9HeE/z94ZcEfA88q/s8nWQR1+tVm+Hyx+epzDJdKX8iVH71 eLUlPes67vr5b1czy/st80uMe9+4N50QRzDGsJdY1Jfotdld67j7y9YtNb5zvEY5L1M3tiJYg335 Rno7kDV/sjzL8wriFn1+cXAWrajUJ1gLfa/8jtaO/fzRl2iZ0C3uL07S2sra6v7zXLVx3NHzw2fm lrNoxdL4+viCH/M8H3qLQk6ulofri5QLH/NmcEx1HXd/n55Zfo5uOfs0Y715sS573DruEdHX+LPO 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 XrzfjfvcD17nkfh+ixH75u2vfw/z38d9sK7RleVziS3fb372q8CPJRfqpcnbXuTzX94s5sVzFqvL lJKnno+2JY+Qb25nObenz595pPEUkXnv456Xf+COfLeEzfXf/vlQ/sfybPrCoUPp6OnmafkiIrNm 24v79mRQ+uKUaxERkd3LbNPl90SmjPCLSAuZNIVeRGTO7NHiPpxmf+Rc5esiIiK7lWLUPU8zbxiB 2zNR3EX2XPJMgKXjX97a1ehFREL2bHEXERFpP4NR9xNTri7fehR3kb0Vo+0iss1R3EVERPZxiovV hfN744XcREREZH9HcRcRERERERHZw6kt7r/3e78nIiIiIiIiInskleL+f//3fxMDALDfHTp0qOYW Ys358MMP4yoAuAXEPhzzySefpP/93/9N//M//7OjeeGFFxR3AODWorgDMIvYh2MUdwCAHaK4AzCL 2IdjFHcAgB2iuAMwi9iHYw5wcX8v9RZ+mBZ678UHtl1/5UZayK+1cCOt9OOjW9dfezd1i/WOciN1 uz9P9S8x2/vd3NZhpix/UPVXummhuxK/zC7I+75T/IHaTSvvfBIfPpD6K8up011JnxzYt7uWTi12 Uufk1fTxAXiP/Ut3pcXli+njg/BmGhTvsdMZlsVj6eLbH6f4bseXWUgLJ6+kjw/uN/EWXEunlxaH v88G++ejmu+ZuuJ+7GtvlZZdT4/fvZQWh7fb23pxv5ZOH1pKi6PXeejl9GHN9pDS+uNn0t3lz27h WDp27GR6+a2PKr+nr585nA4tLqSFY4+lNz6s/pwMrKfH7zmclsZumfhQuvy7j9LHcdEDYT09ce9t 6dDY+30wvfS7D3fk/a4/cW+67dTL6bcf7sTaadf1dO4zt6WlB7+bfvPBwf181598M336cKl/ffFX 6de/q/42iX04Zk8X97VeubQ2p7cW33Y2W5HdPvn1trG493+eunl9a+/HRxrM/36LEj/H8gdHP610 Fxq+b9gda6nXuVWKez+tLHdS7+onDX/w7ay1U520vPJO5Y/RJvMuP3CQins/XbprMfWufjznPtge 104tpuWVt3d8PxalvJc/r9leaN7l96trp5fSXRffSh/N+Tb7j9+dlk7NWdyvnk6HlkoHRobZenHf tP743enQqStzFPd88OBQWuwcS19786Md//5rdO3xdM/SUjr58pvpox36Xlt//J7a/Z7z0OUPKp+9 4l5HcZ/F9XOvp3su/ib97qP4CJtujeJeVpT40wewuA9MLsQr3abivtsmb+e8dqNU78Zr7ElrvbSw 0GuYucDuuIWK+9qp1On00js79EfoNPMW8XmXP3CunUqLnV56u6Xmori361Yt7sXyyxfTmx81FdPd MSrVxx57c+Ztn8+1dObwobS4cCw9dvnDHfo5u57O3JZf4yAX97Lr6exth9OS4l6huFNHcVfct2Q3 XmPvGYy2d7frg2KLbpXiPhht7+YiHB/aJfMW8XmXP1gGo+3LF3e+ODdR3Nt1Sxf3vPy8b3yb7V5x fyhd/uCjHfq9rLhvN8Wdg2SW4v6Zz3xm7N+FX/7yl/u0uK+9mxa6Py89Pm72c7iHU8sXfpi6K++H 88lvpN5K0xT199Na78bYuefd3nupH7dzi/KBiHgqwGbeTfEYxezvt2q24v5+WumF1+i+m9amvM+d Ou//pm37aHs/rfS64394dXvj+6e/krrDx7q9ldTrjv73WurnAjv8/8XzSk8rnrrWS71ud+P5o3X0 J72Bfl5neZu6xWut9OoPWKyt9MbXn7djpVdcA6D6K2Ve/bTWi9s/fN83Vdzz8wd/8OZS/M5aLy1v TNnrpl5jUe6nlVPLlc/ratiOXLY3zn3sXkxxM8ceX+ilq01lZobR9rVLp0rbPtj/V1d6w3Pi4/P6 6dKp5dJr5+07Wdn+7NLYNlbTvThezuddPutfWk6d8lTJxqnyw6n0w/W8s5bf86iwdNPJmnUX+sP3 O3qNbjddvPpOeidfM6D4WjddfHv8FIRrxf7cLEPdvH8u9lJneWV66ZxhtL1p/Yt5/ZXnhe0v3sPJ dOWd6mkT+YDB2HIhx7b5YMK8RXyW5fvXTqdTy93U7Wx+Lx07eTG9XfP9meWSPDqvu5qT6crG6O/g gMrGsmPnko+fZ54L8Vb206XSOeZ1KYr2hPXeKsV9/dqZdPfY92o+N7ybOp2T6eUPYxFeT9fO3J3u Gv7sF8sfO5YeuvJWevuT8DNw7Uy6Z+yc85hj6bE3b2KEfP3xdM+hpQnrz9Pky9PzG6a+fzBLEZ+1 uK+n62fuSXfH/fPym+mtj6u/I4pnXD+b7rm7fv9fvunSvJ6un61uz4MTtmdg/xb360/8JN1z6Idp cfj37Z13vpsuf+3ddPiun6ffVkrV++mJs2+kQ0ulv4fvfDe99MYnle/LJ+57PR1ajH/Db+bOr25P mb/+xLl0z+HN61rceeeD6fJjvXTb3RfT+7+Lv0fW05Pn7k2HlxY3v6fvfDB9940PKts/cv3JCev/ bVz/5OV/E5Zff/Jz6VOHS9syw1T59VeeTPfdczgt5lNXiu2/M33l8o3we+uVYur9ofz6X/lRunH1 bLqv+HnMz7kzffErN9LvPmx4w3NZT08+fF86fKi8P7+YvnPjdxP/rci2Utxzcnk/cMW9bJZims+j 73bzRd82y2h/LZ9fXjeS/35aycuu5KK++bVc5Bfy17expM6y7dG8z5m+/ODgRnFgovS+mvfPpvIB iHxgZG/Y7tH2tdQbFdGx/TMo6nH/rPUGP3i94httsC35/3dXBgsWj8cn9fuVkr6WL6y3UC35heLA RDetjB85KMrz4LXGV1a8ZjccCCiK/+Dr1V8p88jvsVu8v83VD7elOBhxM8V9II8Od/O68sGG4bry /s9FuHpO+Vo61emkbu9qeid8XrmIxeWLdTceANgs5Y2lfYbR9vwanXxgoLwf+mvp1HKnOGAwXtxL 2/9OefFLtds/Mu8I+rzLjxQlvih28ZFNa3k0efh5jQ42bG5/nKKb98Ny6l0t7b9c5Jc7xToWakpk Hq3O+3OsKPavFfszfz0uP276aHvz+gdfHy/u19KpxcXUPXll7PPtX7uUlhc7qXel/hz6fT3iXvP7 6lpxgbteqYRvyuu8q/Jemz6Hpq8P5IMAyytbK+1lRtybl7925lBaGv3BXEku1qVz46cV5WOPpTfL 54vfasU9b8/hCduTz6cPMwKun71tcK59XLbIsfTYG9Xz82e2/kS69/ChCdvz1cr2bNqd4n7Pypvp gy2/warrZ19Ph5f/M91445PN38Xr76Wz976elrr/GYr7e+nsp15Pyw/+Kr3xVtpYfv36L9K9h19P J1/6JNUdU9jJEffr5z6dblv+avrxG6ULKq5fT+fuvS0tdb8Sivv1dO7Tt6XlB7+b3nhz89+e9etP pntvO5xOfvf9FDvzYP1fST9+48P69YciPm35WNzLihJ/6vLE4v7Kuc+le3qX042x78P19Mq5+9I9 F2+k34Yy/sq5z6R77rozdbsPpcs3Bj8bRfG/7XB66Ds3+5m8kh7+zKfSXV/8Trrx5ub+L9b/qbz+ X09c/yzFPWZU5H/961/vh+IejlZtc3FvHMkOz81fayqhgxHmg1XcJz5eXDzv3caR650acc8j0IPR 2zyqOueKt3m0vbgyfSzaI8Uo+/hr5ZJcLs6V5+ftm/FK9/UX18sHErqN+zu+/uhrte9hbTjiG78+ h/z+4uuNDK4svz3FvVMz4l1cxb23NlaM6r5WejAth5HxicuPHp90pfhZRtvz9veuVteRn7s8PuI+ KsaVZQcPVrZ/ZN4iPu/yI7MW9zwydDUsVPfcouTXbke/dCG88QeLYl1XLvNI+rQR91lG26etv/Tc iUW3fyndtdhL79S81r4u7g0u3bWUeldnueDZ5HKerp1OS4u99PZH4Y+7vD+XltPFt6oHB+aluDct fy2dKa5YHy5et36tuCL+Uueh0oh7Lr2H0lInjx6H0fX19XTt9N1pabF+OvzMU+VnKuJ1RXYrU+Wv jz2nuVqMTCvuo4MCx4qDBWOj2euDUfhDxf55o1RUczkenptfLujr19MTxb7Or7XV0pwvNHc4HZqw PYfzZ/LV8vaU7ePi3vtVqvTJ6z9Jn7pnfMR9/Yk30m2napYtHvxFuu+2d9Mbv60ePN/x4t77bno/ lt3r59Kn7xkfcV9/8r6iGFeWHTyY7vvUqfTG+x+MHyiatv664t6w/GfuqY64l00t7q9MWsd6evJz n06nLv8mfVDaz7m433boi+m7v/kglXd/fq1Pn76cfnMTH8pgHS/Vr2P9yfS5T59ON379u8r3w8gs xT0X9dH0+PLo+z4p7js84l5TxqvPfX/KVPjtmSo/Un396eZ9zrTlp10/YNrj2648mtwfjljn0eL8 XopR7ubSmm3vaHtTed4UH4/FeduL+xzPL6tOlY8j9lvRH06Fj18fqU6VL4pwzR9f5eRR5bG1NIyK 15Xu4srua9V/WEcqj+fy3F0ZTpMfjJ4Xo+PDBaaNpk97fKQ6Vb6bVsqjzEN5pLlpVD1renzeIj7v 8iN15TtqKuPV5+ap9acqBX9kc/nq49Wp7IPp9TWLjplYGEtmXf+0K9M3PX4rF/drp+9Ky/k1Ghes L/bFlPtefWme114p7rlI53IbHyvnoZebR6DnLe75ivLLF9+s3f6B0VXn82sfS8ceOplO9i6mq/nU lZpp72PTcZsSR92L7b4Fivv1M+m28vTapoyNug/K9WAGwOb+v3Ll7eIA4Gzvo8H1szNuT9Oo+/4s 7ll1qvyN9LXLv0nx2GCe+n7qcv2oetb0+KzFff2J+9KnpnwGD9aNilemyt+ZHrv8RuVn58n7crGt Pn+k6fHq1Pf69Y/Mu/zItOJejJ5f/FFlVH2kKNLF8zd3dNNztqO4P/m5z6TTLzV/rk9+7v+l0y81 j7rPWtzj90CO4j5zcZ9WzKc9Pp/q608373OmLT/5fPu9MQ1+NAW8GIGfVDaHo+2x696M0VT3SSkX 9a0U93xAYvx89cF5vnVT8Svr27Lheek39c08Kubx6yPV4r4V8xb3+PnEFOdxb64kLY+2sfjf+fnd dLHY5sG09bqiXJg6jX6Sflo7tVwpuNPOQd/Y/vCS8xbxeZcfqZbvqpmL+3AGwVaKe1U/XavZn2OG o+359ZoWaba5/vLmFues13xG5dSdt76fi3s+DSCf3tAp3/v92LF0LP+sXJlc3Gcu38NR97dGf1lv 42h7tleK+82aubivP57uPrSYOsceSi9/VFfKytbT42fuTos1BxSOPfRy+mi002Yt7gsPpZdDEZy5 uG/ZPiruxfPLRXg9PXH2ntoDOsceupw+iK1xVrMW98Zivn+Le9X76frZNyple9o560Xprzlvfdbi vn3W0/Vz96Z7Lr4xdh53LuaHG0+zGOTOr/x4hnO/N9cfC3G92ZafVtxzUY4j6mVtFPfp+7P62iNb Le6tneP+3HPPVYp6zKatF+JpxTSbvbgbcd/Ptnu0Pasd9Z5g7uI+nGGQD0iMb3nDfejj82/KtOI9 zfwj7lsxb3GfNOJeZ/Sctd5gSvvV4X9/Ui71NWYdbW+WDwwsF+sfraNpRH2aeYv4vMuPVMp3jZmL +02MuNfL55svp5VwIbuRulHc+YzWv1kem0bUp9m3xb0o1N10Mo8Aji0yGCWfNOJenOu+fHHiaQqb RqPug/PZZy78M7rlinthMJo+ecQ9WF9P6/1+upYP1tw1uLBfngFQ7LdRca8ZUZ/mliruE+8LP8XG /n88nR5eWPGhy7+rjPjOZFTcG0fUpzlIxT3L57O/kS7e+GTj90DTiPo0u1/cs3w++z3p4o9/l0a9 sWlEfWtG6//txvony/dpn7z8tOLeVMJH2ijuk0bcp9lKcd/tq8q/+OKL+724D75Wt2xWLL/F7axT 9/rTzPucqcvn2Q2THp9gsD/yUcjt2ydbtoXR9qJUFz8sE6bf5/VW2nOzeYt7XL6strhPOce9sh+G 5+FXVlOYXNwH56gP98+EZZq2fzvPca8ryHXFvRgFj1+bYrD+i8UV7IvSPBpJv9gtTaOvPGm20fbh efX1y1WL+1a2P5u3iM+7/Ei1fFfNXtyblx2U+ppz3PMo/WLTqPmE4j7raPvwvPT65arFvVjvqQlF t8F+Le6Di8PVb/ekqfLFemcu7UOjUfe3VrZ1tD27NYv7DOe4X3s83b20mLoPvZzeyj9HG4vlUfjB Rety2R68/9E57oPp3i/nz2e0fD7H/dLpdFe+EF1NsR8V94WHHtu8p3zpOSdfrpv+Po89UNzLF747 9li6/ObHmz8b+Zzyx88U+zrvn40iff2JdO+hpdR96HJ6s7w/i1H4w8P933AOenHhuXxaQdMF7Ebn uA+mw18eu4bBcHvyaQmNxX4fFvfheemXf/tJzfZWi3tx3vvp9+rPcZ9gx4r7+hPFeemX3/+gZvur xb04L/3My9Xzz5sMz3ufvP5SEc/ndU9a/iaL+1bPcd9KcS8eL652f2f6yo8atvmVh9NnzrzcuI5p tlLcR+VdcZ+juN96V5XP++dG6vZ+ntb64/uo338v9YoR+eq+y/bSVeUnFeAm5Wnwk55bTCnvraS1 cCnl/vDK7OXp+3E7phX34vGxK773h1PnB9tVLe6jAw7hHPX+6KryefR+bOHBue3F7evK25+X7xTb Vv2VMrDSLZ3j29Tcd+uq8rMW92L55ebPqxhdH19XsZ7inMLRhd/6xRT54r03XChuo/jGB6LR9Pvi CuvlfZinytdftK6YQt9bSVfLl8Ufbn++cvrYFdhHjxW3bCvf8q4/PK++Uzu1ft7lR+rKd9RUxuuf O+dV5Yvinvdnvj1eeT/kqewNF5WbpygXxb15/XnUN67/2ql8zvbFsHx+G4Mr0feuvl2zL4ZXYd84 yNDfOK++e1OzAsZNK+LRtOU3Cvjbo8f7w6nzneJn6GTNVPn+tdPpruWVmtLeT6eX7ho/EDImj7ov peXuseIATl1Z3qr+pXxu+cl0ZeNgQN7/p4vPvjvhlnAHv7ifSYcmTn+f86ryRapT5ac976EtFvd8 G7tDE6eDl69any/IdnjCFdyHeehyeqM4uDDv8sP3Oemq8kVKU+WnTmdvKuWD0psvLpeXm1zuJ1xV vsiomOfbxt2WDi/Fx0MefCnd2OqMgmBnivvrabG4ndtvSr+b8lT5+ovWFVPoe/+ZLr/1/tjvsvX1 99KZe19Pvcu/qYzI54vaferQu+mlH49uGff+8Lz611O3Zmr9zIrifjgtFrdze7P0ezlPTf9U7UXi ruerr/fygaL878jmG1hfv57O3ntb6l3+cfpg9MaK4j7H+oviPnn5xlJePH1Kcd+4qvxj6cab5avW r6cn77sv3f1Yw1Xlt1Dcy9PgJ013f+Xhz6V7e4+ll97M/y6U9+cr6ex9n0q9l36Uftfw/TpLcW/K ni7ugyu+V9NYBPMIcc3y5WwWl3i1+tGV5XM5L389lvFJ93Effm1KGW4Wtykknts/1/vdwvJDxe3f wj4ZlPm45KY9M+I+cVS52Uwj7kPFhfHGzncflfnRAsOCPMrognobrzHcvmJEfLDM4HPYvI3bKMVt z/qlAws1U+PL5b68PfE2TRv7pua+773hLeqazDLiPjDpPu7Dr+WCGp821eZ93Ef7cDByPbiIXPm9 xIMDxe3favZP7ffzsFyXz30vSnU8H35k4ih6MFr2nXzQoHxv+W7qXayW9pHi9mnhPXZP5jLf8IS8 zZeWwwXwBuWzyUzLr+WR6mrpKOfkxi3eNu/jPnhsdGX5QRHf/PrgGgIb72TSfdxjiRyNuL99dXCe dWmdJ4v9WbN/Jo6iB6Nl51l/flq+/Vvl88plvvk18y3U8vfd6DWOHYsHC27etCJezBioOZd27PMd K+P94uJy5e+JYrvf/jit3LU0+AyPXSwV21zOJ10H4Fj6WmNxH426d2oPCNysa5fG7z2e38eVt99u 3pb8bg58cR+MuFc/r3yhtK+lK/mzik8dXkF+7D7uxX3HT6avfe1q80XV1h9PZ4bTv4vn5Hubf+1r 6co7Na8xoz1X3IuXqbmP+8b+uVLcPWFj2eGIe9P+f/mtCT8HU0fch2benoNS3N9Nl2+8l07f+0Za 2jh//UZ68Ku/Sh/Wd7rB7d/ueT0tlpa/88Fc5qv3ch+5/sQb4QJ4/1+6PHawYAtGI+4/vpLO3Juv ezD63r4zPfjV5usdFLd/K98HfeHOdOeDucyHC12ORtx//HJ1/V+pWf9oxH3W5fOV5m9bqn7PlPLF 71bPaZ/3Pu6DdY2uLD8Ymd88N71+RH2mEfehYnvuDfvzi7nMD08bGnnlJ+n/fer1Sucq54vf+bg4 kBP7cMyeLu5wsxpvdwY7oGmknO01/znu9SaNxB90U4v7Hpe3f2m5fCCgXQe+uEOLtr24wx4V+3CM 4s7BVYwoTx8xh20x5YJ1bJ9tKe7FCPpyujhpVPcA29/FPY/WL029Uv1uOhDFffni5nnlsIco7twq Yh+OUdwB2Df6a/l87zClnrkNzqUflcZj++oAxmi0/a0ZS+nOuTY+3f/knMV9Y9l8VffNqeFbL+7X 0ulDm/dQXnjo5ZmL++jK8mNXhwdgV8U+HKO4A7BnXVoO59V2Tyrtt6B8MbqNc55L2Ylz3LdbXXGf lK0XdwD2s9iHYxR3AIAdorgDMIvYh2MUdwAAAGhR7MMxijsAAAC0KPbhGMUdAAAAWhT7cIziDgAA AC2KfThGcQcAAIAWxT4cc6CLe3+lmxZ6a/HL3KRivxZXv+2mlX58dGQt9fIyO7b/d3r9e0N/5UZa WPjhZnrvxUW2Tf5cO701t9naq/qX0vLwvtvdi++kT3xQN61/6UZa7JR+vk6+t2O3Fivum967mj72 wQEANWIfjlHc96C13g9Td+X9+OU9Jhfn7Snua72F1G1eUYPZ139QFCVeca9YOzX4edlv271Va6c6 aXlFcd9uRYnv3QLF/dqptLjYScdOXml/WwCADbEPxyjue9DBKO6z21pxv/Uo7vUUd7bDLVPcC9fS qcXF1Lvyse8jANgjYh+Oab24D6Zcb0ZxV9ypp7jXU9zZDrdWcc8D74tpeeXtHXu/AMB8YlGPabW4 x9K+X4r72sq7qVs677jbfbf42kL353HRlNL7aaUXzlPOy9f01JVuaZmabE+Z76eV3ugc9WG6vdrt GeintV43dUvLd3tr+au1xX3z/PdhJuz/lW718y+nrszPvv7hVPrhevprvdJ76KZezboL/bB/ut20 staf8bz+Wcy7/zft1+I+6eel2mHqf16u1uyfleXqz0j8eamsfka5HHeKz6eXrn7STyunlof/f/A9 kH8G3qlZeX/tVDq1HH9eLqZ33olLlvTX0qnl5dL3RF7/1bTS66RuTUGPxf3S8mhbB8+9+M4nG++7 dntO5u2p2fis30+X8nvtbH7/X7z6TuqvjL42vv78/Ty2fPGck+lq0/rz9l86tXGufrE9efmLvdRZ XtmGUtu8PdPWrLgDAG2KRT2mteI++qMqbtB2F/e68ncz8mh4Lhz98mr776VeLt2V4v5e6uUC0Xtv bPn+2s+LItPUOXduxH1QZoviPbY9K8Uf9tXt6aeVbt6Huahvfi0X+fwHfXdKiZ31wMlWR9xnWX+x 7rytpXLc/H7XUq/bTb1yi85FvjtYx7TXmm7e/T9uN4r7Vj6HSUY/L+80/LyMd5j3Uq/T8PPS+WHq XS0vu2nHRtz7K2m5k7938md2dayor60sp253pVre+/3x3w3DZTudfAAgLlxsfOp0BuW4XIbXhgcK 6i5CF4t7LufLy3lbatZftz2XmrZncAChV96WXOSXO2m5+P6/GrZlLZ1a7KTuyatjByb6a4OL6PWu flz5TNZOLaZONxw4KA5cdIqv31ypzdO/R9tT2pvXStszYfW7Udzz57ZT65+X4g4Ae0vswzGtFPdv f/vbpdGlzfJe/t/bYceKSF15WquOuE8sWv1c3t8tFeJNO1XcJxbdfi6PvbHtmbT/BiPQ+6O451HT uFTdc5u3o78tF8Kre80NNfs/mvj9tA0mfd5bNfp5qXSDtXdTJxT3/P46dctm/Z+n5c67qV/z4M4W 986gPMfHioeXBwU6PlBjZTkXxzjqu5ZOdZbTSsNocCzodV/vX1pOy+GgwixyGY/b0/R6+fv/VKeT OifHi3t+7U4xglxeduPBtNzppXfCg0Vxr3vO2qm0eJMj7nl7Gke08/YsVrenTHEHANoUi3pMK8W9 POIes9eLe1ad+nsjraxVi3ae+t7U07Kmx2ct7pvTt5tTXn8eOa57vZHxx3NZnVTM66fKl00sqiXN hXmyWdbftO7qc/P7qRb8kery85tv/1ftx+Kezfzzslz/8zDS9Pisxb2Y7l3zMzL281Ius8MR91ys a+XHl1dqim5VbXHPo+3F82dYQcmgYF9NK93lYibAnE8vVIt7PojQS2sNKxuV9PLDg3VUR9VHLi0v 1j5enSofZxxszcbrNaxo2uO3YnFf7LmyPADsFbGox+x6cX/hhReK4v5f//VflT+ac/ZDca96P631 blTK9rRz1kfn4UazFvd5TTunvPgjemN/TSvm0x6fvew2letpZll/07orzx2OeDetrbL8Fsy3/6v2 a3Gv2vx5KVeGaeesj35eYs2YtbjPrSjuzWV29Hh5ynk+7SGfUz72uRanlYSDAsXTq2V4FoPz7/MU /m5lnVGetp63Z+yARd32DEfIq9PnB5qK+7QDIXVT/asGpwbUj/bPLhfz6WQFT5cAAAbPSURBVNvz duNr3GrFPfWvpbsW8z47ma58PPn7CADYebGox+xGcf/lL39ZFPfc2RdeeumlosGvr68XGxD/sNqf xT3L57PfGCuyTSPq0+xkcZ99e4y4l1WXn998+7/q4BT3LJ/PfiOtlM6NbhpRn2Zni/scI+7D89Xz OeLj16Lr78CIey65o3PSG0rXcHtO1mzPboy4zyefL9982sAspo2oT3OrFXcj7gCwt8SiHrMbxb3f 7xfFPXf2hStXrhTF/Yc/zCNo1RGRPV3ch+el13eLanEvznvfQtHaqeKe1npzlc9J+68osgequDcv u3GF+gmvNdgf+Xt4wj6Zc/9H+66455+XzrtprbYXVIt7cd570znuE+xscZ/9HPeNQh2Wy2qL+5Rz 3AfFuzoKPnYuejFSPji4ENfRfM563VT5Scvn7aye416cl36q5nz1JqNR/donTC7uxYGD2qval1wb bU/to1PdisXdOe4AsHfEoh6zG8U9d/Q82n716tW08IMf/KAo7vm/48aUsx12pIjkKbvF7dzKxTpP /a2/aF0xJbj387B8vljz4MravZpzfYuClg8QbGz6+xvnCd9soS9u7dZbSWvhUtP9fr6ieh4RLn99 d64qPyi95Vui9dPayuD2bZM+v1nW31TG65+79avKl6fB173eyHz7f9z+LO6Tf15iZ9jqz0tn4d10 deMgwPjPS3yNmQ2nwveKz2z89m91V5Uvpr7nr21sR74NYZ46PzifOxblYomikIZzvPujq8rXT4Wv FOxciJd7lVuwFesutmdjwY3tyVPKT1bWPe9V5fO25IvjXUxXx24bMPh+zq8zvq7B1d0Ht2crH7HJ 77dTf9G6ofI0+EnT769tbM/4AZR+/9pwew7KVPl8Bf3yNPd+unTXYup0jqWLbw9mQVw7dVda7HTS ySv1sxAUdwDYW2IfjtmN4v6Xf/mXRXHPXX3hH//xH4vins9z/+lPf1rZoL1f3HMJySWifK/pG6m3 0lyoittZjZ3vPioncclNays3qve+DmVmq4rbj42dbz0qk3HJbNJ93IdfGxXaPKJcM4uinKbuu5Y/ q/JrFLdvCxs01/pL21dkNA1+UMQ3vx4OPky6j3vTxg+/12rXV2Pm/Z9nbNSc513OhE2a2478vOQR 93da+nl55yZ/XkrnuBdFfePe4NUiP3zCxm3cRp9t/j7OhTqPuBdf716slKjBeeibF2sbfT9U7rU+ Kr6hvBalt7RtmyPSw+0p3dO8uGd6ZXtKrzPpPu41xb14Sr79W9z+k7k8121/3h9XiwME5XvPn7xY v+6RmUbch4rbvzVsz9jzrr2bFvOBpZqfq1FOXk0Tt2seijsAMEnswzE7Xdx/8pOfbFyY7h/+4R/S wr/8y7+kV155pfjCtWvXKhu0p4s7t6xpxf0g8PMSTLs43S2k7hx35rO9xf3mKe4AsLfEPhyz08V9 1NGvX7+ecmdf+Nd//deiwY9G3f/pn/6pslGKO3uN4n4LUtw3KO43b08V93zqwOJi6jWMxgMAuy/2 4ZidLO7//M//XPTznL//+79PubMXxT03+L/+678uivu3v/3tlKfPxw2DvaK/ls+3nz4FngNGcS/0 1/J916dPUWefyBfxW+ykYyddUR4A9pLYh2N2qrjngfTcy3P+6q/+Kr3++uvp3/7t39JC/o9c3HNe ffXVorjn5GnzeV694k7bKvdb7/aU9lvM4F7p498HTVeXP2gq92fvnlTaAQB2WCzqMdtd3PP15vK0 +NFg+ve+972itOeevlHc86h7/mJObvV5wT//8z8v8tprrxVD9T/72c/Sr3/96/h+AAAA4ECJRT3m Zov7L37xi/T2228XXTt37lH/zl08X00+3wou9/Pc1f/93/89LeT/GE2Xzw/kBf7u7/4ura2tFU/8 1re+lf7sz/4sPfvssxt55plnJubpp5/e9Tz11FNbzje/+c19lW984xu7nj/90z/d9fzJn/zJvsrX v/71fZU//uM/3vX80R/90S2RP/zDPxQRkS0k/j7d64n/zu1G4r/nez3x76W9nvj36G4k/t29G4n9 Yq8n9rd5EnvjbiT245hyt85dO3fu3L3z/dr/9m//dqO0544+VtzL0+XzQrn157n1+Ul5iP673/1u cWL8aOWrq6uVF9+uxDc9a+IHtFuJ31R7OfEHdrcSfznNmviLdK8n/kMl1cQ/PuZJ/GNJqol/AIuI 3Ezi75iDmvjvzTyJ/85JNfHvpb2e+PforIl//+5W4t/7ezmxR+1WYm+cNbGnbldylx716tyxv/Od 7xSd+2/+5m+KDp67eO7ko36eu/qPfvSj9P8DQaQvgDYsUqMAAAAASUVORK5CYII= --0000000000005404590630b3740f--
bug-gnu-emacs@HIDDEN
:bug#77054
; Package emacs
.
Full text available.Received: (at 77054) by debbugs.gnu.org; 18 Mar 2025 22:32:42 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Tue Mar 18 18:32:41 2025 Received: from localhost ([127.0.0.1]:43698 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1tufUH-0007zf-GV for submit <at> debbugs.gnu.org; Tue, 18 Mar 2025 18:32:41 -0400 Received: from mail-oo1-xc31.google.com ([2607:f8b0:4864:20::c31]:50347) by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.84_2) (envelope-from <joaotavora@HIDDEN>) id 1tufUC-0007y7-Qh for 77054 <at> debbugs.gnu.org; Tue, 18 Mar 2025 18:32:38 -0400 Received: by mail-oo1-xc31.google.com with SMTP id 006d021491bc7-5fe944a4243so1432592eaf.0 for <77054 <at> debbugs.gnu.org>; Tue, 18 Mar 2025 15:32:36 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1742337151; x=1742941951; darn=debbugs.gnu.org; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=gXmmKS5g0tB3iBKOlGSVVoE4QcUtF273WtL3vpxxGKo=; b=QxGgN/9Bo/us0y02v5bx+DM8oW1+H3Ica491FaMK9ZxEhO1QpvG16sSXb5jI7k8jM3 N11nIs9UHC+SOO7T3XiFu4NB6BJ69whOxvA0FK5VArc8tmk39JlngS37PsQG6giBxIx/ +iFRzipqbGpS5R9myuSZs6WUCxkVTI7zzQNcoswEHBGTvckQCyVkx54yRGPLg3vQH5Pl vwfD6mnLRhbZHj/4dBMYgQ/Af/xE6e4y9bH5Ia8qOXeKrt8Aiw/yvgELAmpS6fLYz6gk RHdd+FAWF6UrvBH3AOX5mNWYud4Bm9Jn9/RFW9r78Fx3fBoXFNISHDY5IMzeyp7f+ITO KEDQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1742337151; x=1742941951; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=gXmmKS5g0tB3iBKOlGSVVoE4QcUtF273WtL3vpxxGKo=; b=PtLbMlKXJf5uRWuIMrzAejdAqVj1LmljEEvkVS+wAAcWo1wqfruv/Vfb48y1TTAKe2 d9DrZdj5lltKioiuGZpyYe1UmsClpdmLmuZKkXX89c+hL3gpYDYxvWHwsu1A3RhqPIP/ apkmJAVL5rMLhSjM4FOJni8An4z3iU4jBXzqh/xtKy8FDn3axIaYRUtD18Sqpkd2hahI PrcyOZagm1HLGuu8RQdm8cdjBkxVIH0T2IpDOYK+Nffz9fU/aK6FP4Lt02EyMsX3xeRz Q3r7YU4agtK9/6a6NsyahD832cJQPZ5GUWQ63JqWHn/h64KESFMw+j7KtUq3vItj1Ws2 IbOQ== X-Forwarded-Encrypted: i=1; AJvYcCWIXx+RXSCESyf+162WLY69bSUMjodQf3tFwC/23nsovWLZn6S156n1TifMhNpxCaOweeXeAg==@debbugs.gnu.org X-Gm-Message-State: AOJu0Yye5W3csUcWJy+50cAECf9jrPrZGbhI3pRyJioC3XXcik1dkuQg 8aTTwDQT5RYAcpJlJXZa17eAOouIm4iHKblBwKcjTkwKUYE4aWVRNNGwkv6tbQt/2swyxkYCRa+ g5/9nXRSivLjss/qjsFgUx9OhXRY= X-Gm-Gg: ASbGnctX0jBxlo1sjpmQe3Kp9UeKCJ3RzWnH09QS54D4gxLdXZDFGYQtuMWGDrkfDXY k58UkyaFqpNj4Mjr6e3c7WHEfhgz96sd03OyvfA4Wo17z2l32o9/3fJpCIvimqhFkp4XOVJN/GP iD7Maf6ixAVscyDhgTt1DrQUtE X-Google-Smtp-Source: AGHT+IGcJkIgITDtxHKSDMKev3sKm1Z2dEzoY0ToM0Paow0UnasIDOkm1Mh+JGiER+rcqmuqEmJ6h1mqM4OamsdUnuQ= X-Received: by 2002:a05:6820:1ad4:b0:602:1c33:176b with SMTP id 006d021491bc7-6021e3bace8mr277442eaf.3.1742337150776; Tue, 18 Mar 2025 15:32:30 -0700 (PDT) MIME-Version: 1.0 References: <CAGiBfP0mDdeC=-ke_06kpvq5amod1urXK8n6LaawWVgppEWY_A@HIDDEN> <868qp5t1kj.fsf@HIDDEN> In-Reply-To: <868qp5t1kj.fsf@HIDDEN> From: =?UTF-8?B?Sm/Do28gVMOhdm9yYQ==?= <joaotavora@HIDDEN> Date: Tue, 18 Mar 2025 22:32:47 +0000 X-Gm-Features: AQ5f1JrLxktE_gfLcD1Aj01rKreNn2jcoHzjatjo21dOgzSgpHgcSYapCACbCxw Message-ID: <CALDnm535E6xK9xen6VGkH51jwsRs06xgJNHFXQyLo5xBW+tGMw@HIDDEN> Subject: Re: bug#77054: Completion highlighting applied outside completion-lazy-hilit-fn To: Eli Zaretskii <eliz@HIDDEN> Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 77054 Cc: =?UTF-8?B?Sm/Do28gR3VlcnJh?= <joca.bt@HIDDEN>, 77054 <at> debbugs.gnu.org X-BeenThere: debbugs-submit <at> debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: <debbugs-submit.debbugs.gnu.org> List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe> List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/> List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org> List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help> List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe> Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org> X-Spam-Score: -1.0 (-) On Sun, Mar 16, 2025 at 3:52=E2=80=AFPM Eli Zaretskii <eliz@HIDDEN> wrote: > > Steps to reproduce (Emacs 30.1): > > - emacs -Q > > - Load: > > - https://github.com/minad/vertico/ > > - https://github.com/lewang/flx/ > > - https://gist.github.com/joca-bt/356ba1201c4fe842144e19ee1c723c28/ > > - Eval: > > - (vertico-mode t) > > - (setopt completion-styles '(flx)) > > Thank you for your report. > > Adding Jo=C3=A3o T=C3=A1vora, the original author of this feature, to the > discussion. Hi (and hi Jo=C3=A3o! nice to hear from you and know you're still an Emacs user) Anyway, this was about 1,5 years agora and I'm afraid I don't have the details in my mental cache nor do I have the time to test this complex setup. AFAIK this feature has been in Emacs at least for a full major version cycle (29) and had it failed in its basic mission we would have heard about it. I also remember testing it thoroughly. It's important to note that completion-lazy-highlight-fn is not the only variable involved in this scheme. There is another: completion-lazy-hilit. I don't see it mentioned in this report. Both need to be set for lazy highlighting to take place and actually save work. completion-lazy-hilit is to be set by the frontend: (that would be vertico?= ) while c-lazy-hilit-fn is set by the style. At least according to the docstrings I wrote at the time, and which I suggest reading. HTH, Jo=C3=A3o
bug-gnu-emacs@HIDDEN
:bug#77054
; Package emacs
.
Full text available.Received: (at 77054) by debbugs.gnu.org; 16 Mar 2025 15:53:00 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Sun Mar 16 11:52:59 2025 Received: from localhost ([127.0.0.1]:50427 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1ttqIL-0004LR-7l for submit <at> debbugs.gnu.org; Sun, 16 Mar 2025 11:52:59 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:43620) by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.84_2) (envelope-from <eliz@HIDDEN>) id 1ttqIH-0004Je-95 for 77054 <at> debbugs.gnu.org; Sun, 16 Mar 2025 11:52:54 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from <eliz@HIDDEN>) id 1ttqIB-0006md-VA; Sun, 16 Mar 2025 11:52:47 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=MIME-version:References:Subject:In-Reply-To:To:From: Date; bh=7DCNKFIVHBPWEzJCsRn6kO3bmHZTMtfacZbFhwn6MCA=; b=savaosPPaUw14paKiyqc /vGfaBsole0yLiQpQoi1bCeZhlbDeqUQ+Fo45WhrOSh3vpOR+ASp5VIZQQJdvLZ/tiFhBpyyrf1Jw 7Py+vy/XP80FJGXuBMpw0F3Ak1Xe3gadbFbdypcWAmRykZLdUKfJQyld4ypD7JxIQDmK0DmawAzHe 1kCv9LQaU5rjaELYfEZTIdreDrJ3udZPhztYNT5yIpMjtQ2FGN3usSLbmkC6RZHgM+wVu6mOUBDaj aHcfbRKM0A9Y5re97y43sTZNdfI9ERMdRSKb9nH4chqsZpM6lOLIGCRTjBlsziGZvFpgPOnUlyOG6 VKwBBtszd99g7Q==; Date: Sun, 16 Mar 2025 17:52:44 +0200 Message-Id: <868qp5t1kj.fsf@HIDDEN> From: Eli Zaretskii <eliz@HIDDEN> To: =?utf-8?Q?Jo=C3=A3o?= Guerra <joca.bt@HIDDEN>, =?utf-8?B?Sm/Do28g?= =?utf-8?B?VMOhdm9yYQ==?= <joaotavora@HIDDEN> In-Reply-To: <CAGiBfP0mDdeC=-ke_06kpvq5amod1urXK8n6LaawWVgppEWY_A@HIDDEN> (message from =?utf-8?Q?Jo=C3=A3o?= Guerra on Sun, 16 Mar 2025 16:27:00 +0100) Subject: Re: bug#77054: Completion highlighting applied outside completion-lazy-hilit-fn References: <CAGiBfP0mDdeC=-ke_06kpvq5amod1urXK8n6LaawWVgppEWY_A@HIDDEN> MIME-version: 1.0 Content-type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 77054 Cc: 77054 <at> debbugs.gnu.org X-BeenThere: debbugs-submit <at> debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: <debbugs-submit.debbugs.gnu.org> List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe> List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/> List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org> List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help> List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe> Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org> X-Spam-Score: -3.3 (---) > From: João Guerra <joca.bt@HIDDEN> > Date: Sun, 16 Mar 2025 16:27:00 +0100 > > TL;DR: Emacs applies additional completion highlighting even when > completion-lazy-hilit-fn is set, leading to incorrect behaviour with > alternative completion styles and frontends. > > I'm implementing a custom fuzzy completion style and encountering an > issue where Emacs highlights parts of completions that it shouldn't. > > For example, given the following directory structure: > > ``` > <dir>/ > ... > set-editing.el > ... > ``` > > and the input pattern `set`, my completion style produces three > possible matches for `set-editing.el`: > > ``` > 1 set-editing.el > ^^^ > 2 set-editing.el > ^^ ^ > 3 set-editing.el > ^ ^ ^ > ``` > > Each match has a different score. In this case, match #3 has the > highest score and should be the one being highlighted. > > Completion styles can bind completion-lazy-hilit-fn to control > highlighting. However, Emacs is still applying additional highlighting > outside completion-lazy-hilit-fn, resulting in the following > highlights: > > ``` > set-editing.el > ^^^ ^ ^ > ``` > > When completing files and buffers, but not commands, Emacs is > highlighting prefixes in > [completion--twq-all](https://github.com/emacs-mirror/emacs/blob/8ac894e2246f25d2a2a97d866b10e6e0b0fede5a/lisp/minibuffer.el#L677). > This becomes more evident if I make my completion-lazy-hilit-fn not do > any highlighting: completions are still highlighted when they > shouldn't at all. > > Expected behavior: when lazy highlighting is enabled, Emacs shouldn't > apply any additional highlighting. While the current behavior works > for the default completion style (i.e. completions buffer), it easily > break as soon as users employ alternative styles or frontends. > > Steps to reproduce (Emacs 30.1): > - emacs -Q > - Load: > - https://github.com/minad/vertico/ > - https://github.com/lewang/flx/ > - https://gist.github.com/joca-bt/356ba1201c4fe842144e19ee1c723c28/ > - Eval: > - (vertico-mode t) > - (setopt completion-styles '(flx)) Thank you for your report. Adding João Távora, the original author of this feature, to the discussion.
bug-gnu-emacs@HIDDEN
:bug#77054
; Package emacs
.
Full text available.Received: (at submit) by debbugs.gnu.org; 16 Mar 2025 15:27:58 +0000 From debbugs-submit-bounces <at> debbugs.gnu.org Sun Mar 16 11:27:58 2025 Received: from localhost ([127.0.0.1]:50385 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>) id 1ttpu9-0000h4-Va for submit <at> debbugs.gnu.org; Sun, 16 Mar 2025 11:27:58 -0400 Received: from lists.gnu.org ([2001:470:142::17]:52738) by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.84_2) (envelope-from <joca.bt@HIDDEN>) id 1ttpu7-0000g0-0V for submit <at> debbugs.gnu.org; Sun, 16 Mar 2025 11:27:55 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from <joca.bt@HIDDEN>) id 1ttpu0-00053b-LR for bug-gnu-emacs@HIDDEN; Sun, 16 Mar 2025 11:27:48 -0400 Received: from mail-io1-xd33.google.com ([2607:f8b0:4864:20::d33]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from <joca.bt@HIDDEN>) id 1ttpty-0003Wu-R0 for bug-gnu-emacs@HIDDEN; Sun, 16 Mar 2025 11:27:48 -0400 Received: by mail-io1-xd33.google.com with SMTP id ca18e2360f4ac-85b3f92c8f8so286920139f.1 for <bug-gnu-emacs@HIDDEN>; Sun, 16 Mar 2025 08:27:45 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1742138864; x=1742743664; darn=gnu.org; h=to:subject:message-id:date:from:mime-version:from:to:cc:subject :date:message-id:reply-to; bh=Q15QewKGPnh0puN7QAyyiRN84JTJiAvIdm6dW27UaaM=; b=buImDz61HOD68fexOH3mCCGVsUNWgtTdbSPbb/US/7iHttgLIYwpUjf5STP6z25OIq EJ8rcxXGtC2qz9KZvuyd6u2IkUWzERKwyJSDIx8WQQ5VP9SfIcjPg8rCtx+VEwPC2j24 H8Y3IutR5NH97OGIO1goZoK+SH2krN2UWlypNN8xiNrv75XqKj+qU9y+tGHtszkYs6KO yghbasifqm0z5liOxNNSjMN+rl9sRHvG+HIJZMw7/NF8IR1En/rGEhC1wkgOn9NaGPnu /Y6nkgK9eCK42YhRrzfYjMIOnFrBQc51k4uuMF+3a+ji/csiMfkHrCs4zVdUZ0C0fvuM KL1w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1742138864; x=1742743664; h=to:subject:message-id:date:from:mime-version:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=Q15QewKGPnh0puN7QAyyiRN84JTJiAvIdm6dW27UaaM=; b=Pmb1BE7OwHkstc61rlr7BIhEIV2lYtbl/0CUfrS+XD7K6CZ/6nXrr1ZvqdR4Wu9FC/ grAuqCdjqodRaSZl9htg7JV55+lfZEjYT9T7zdTcp0lCYyQZ+NvF+EBdpYU+tqfLhSMH iqx1SZNQLfIVdf00jEq+JU3PL33gxzu/7+b155v96tZvhWJxHEh//T+9xPMSrTlatMKy DWO9kHWmHN2avZMNvOfcvBxdy4QYPQu4XFlBm9wBFqVuJv0md5avZRN7Cfzku+M8jC/D WNlakV6I8IPcEiyW9gciO/kHrpsbk7fn0rL2BwuIXd1Is/qEnzcAJ7Gw2XFnhgxoG/6Y k8sQ== X-Gm-Message-State: AOJu0YzXFgIL5n0uKbZiv6MQchxBd7Uv9QsOqzFLE8Puk96lFTLYu4xs gr74ST+XpKpf/0qhXXSYhD04uBWpSaGWQ+S/JyO0TOyGq2bD/IdWEtuKstdpLdR1Jfqp5zlhwi3 BB68YS7OaElm2/QtfmZDDvhLO+PbbxW7f X-Gm-Gg: ASbGncvMSOGa+HgytxR602LmPDC1qiAg8A1fRXfa+VUh8hC7RKyxPTGtpxrlx7AAm0o L2BLcnP/Zcf6vI5Vbgh7fpZWiqzkhufKaiHpiLsLIiZOLPU1r4H35m8ohCEk8DBLFjRLU+19T2T B2vgxVsRS5lkSU8JPVkU0Imb+p X-Google-Smtp-Source: AGHT+IEHmxVfrOHs6K+UvCuZqOffMJk21X3KTbClAvUbRLBFhnevhc6q756qUY6sWKFH7MisrbTLuHjYovUJ9h/b9Qc= X-Received: by 2002:a05:6e02:1848:b0:3d0:4c9c:965f with SMTP id e9e14a558f8ab-3d483a774d1mr124993405ab.20.1742138864035; Sun, 16 Mar 2025 08:27:44 -0700 (PDT) MIME-Version: 1.0 From: =?UTF-8?B?Sm/Do28gR3VlcnJh?= <joca.bt@HIDDEN> Date: Sun, 16 Mar 2025 16:27:00 +0100 X-Gm-Features: AQ5f1JoWkgMqtduytOg_hXx5bXxuOuWiSSVm2EScsOV699VPOw8jyV0hWdbFejk Message-ID: <CAGiBfP0mDdeC=-ke_06kpvq5amod1urXK8n6LaawWVgppEWY_A@HIDDEN> Subject: Completion highlighting applied outside completion-lazy-hilit-fn To: bug-gnu-emacs@HIDDEN Content-Type: text/plain; charset="UTF-8" Received-SPF: pass client-ip=2607:f8b0:4864:20::d33; envelope-from=joca.bt@HIDDEN; helo=mail-io1-xd33.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-Spam-Score: 1.0 (+) X-Debbugs-Envelope-To: submit X-BeenThere: debbugs-submit <at> debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: <debbugs-submit.debbugs.gnu.org> List-Unsubscribe: <https://debbugs.gnu.org/cgi-bin/mailman/options/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=unsubscribe> List-Archive: <https://debbugs.gnu.org/cgi-bin/mailman/private/debbugs-submit/> List-Post: <mailto:debbugs-submit <at> debbugs.gnu.org> List-Help: <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=help> List-Subscribe: <https://debbugs.gnu.org/cgi-bin/mailman/listinfo/debbugs-submit>, <mailto:debbugs-submit-request <at> debbugs.gnu.org?subject=subscribe> Errors-To: debbugs-submit-bounces <at> debbugs.gnu.org Sender: "Debbugs-submit" <debbugs-submit-bounces <at> debbugs.gnu.org> X-Spam-Score: -0.0 (/) TL;DR: Emacs applies additional completion highlighting even when completion-lazy-hilit-fn is set, leading to incorrect behaviour with alternative completion styles and frontends. I'm implementing a custom fuzzy completion style and encountering an issue where Emacs highlights parts of completions that it shouldn't. For example, given the following directory structure: ``` <dir>/ ... set-editing.el ... ``` and the input pattern `set`, my completion style produces three possible matches for `set-editing.el`: ``` 1 set-editing.el ^^^ 2 set-editing.el ^^ ^ 3 set-editing.el ^ ^ ^ ``` Each match has a different score. In this case, match #3 has the highest score and should be the one being highlighted. Completion styles can bind completion-lazy-hilit-fn to control highlighting. However, Emacs is still applying additional highlighting outside completion-lazy-hilit-fn, resulting in the following highlights: ``` set-editing.el ^^^ ^ ^ ``` When completing files and buffers, but not commands, Emacs is highlighting prefixes in [completion--twq-all](https://github.com/emacs-mirror/emacs/blob/8ac894e2246f25d2a2a97d866b10e6e0b0fede5a/lisp/minibuffer.el#L677). This becomes more evident if I make my completion-lazy-hilit-fn not do any highlighting: completions are still highlighted when they shouldn't at all. Expected behavior: when lazy highlighting is enabled, Emacs shouldn't apply any additional highlighting. While the current behavior works for the default completion style (i.e. completions buffer), it easily break as soon as users employ alternative styles or frontends. Steps to reproduce (Emacs 30.1): - emacs -Q - Load: - https://github.com/minad/vertico/ - https://github.com/lewang/flx/ - https://gist.github.com/joca-bt/356ba1201c4fe842144e19ee1c723c28/ - Eval: - (vertico-mode t) - (setopt completion-styles '(flx))
João Guerra <joca.bt@HIDDEN>
:bug-gnu-emacs@HIDDEN
.
Full text available.bug-gnu-emacs@HIDDEN
:bug#77054
; Package emacs
.
Full text available.
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997 nCipher Corporation Ltd,
1994-97 Ian Jackson.