GNU bug report logs - #78621
Pixelwise display specified spaces less precise than min-width

Please note: This is a static page, with minimal formatting, updated once a day.
Click here to see this page with the latest information and nicer formatting.

Package: emacs; Reported by: Ship Mints <shipmints@HIDDEN>; Keywords: notabug; Done: Ship Mints <shipmints@HIDDEN>; Maintainer for emacs is bug-gnu-emacs@HIDDEN.

Message received at 78621 <at> debbugs.gnu.org:


Received: (at 78621) by debbugs.gnu.org; 30 May 2025 20:16:28 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Fri May 30 16:16:27 2025
Received: from localhost ([127.0.0.1]:51092 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1uL69T-0001BB-GK
	for submit <at> debbugs.gnu.org; Fri, 30 May 2025 16:16:27 -0400
Received: from mail-vk1-xa35.google.com ([2607:f8b0:4864:20::a35]:45178)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
 (Exim 4.84_2) (envelope-from <shipmints@HIDDEN>)
 id 1uL69Q-0001An-Fn
 for 78621 <at> debbugs.gnu.org; Fri, 30 May 2025 16:16:24 -0400
Received: by mail-vk1-xa35.google.com with SMTP id
 71dfb90a1353d-5240764f7c1so742701e0c.2
 for <78621 <at> debbugs.gnu.org>; Fri, 30 May 2025 13:16:24 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=gmail.com; s=20230601; t=1748636178; x=1749240978; 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=qno/NcbQE2WUCK0f4cChFrwfoZGIusekF44BxcDqQXM=;
 b=krd2Gq3LHz4ADBUj3gfmvJw5IdUIXD+XGkcUyAE0SzUDukwkbnOLT7CESHTnZDcmrX
 uK80KYT2RRX6MrzOFbVRWj/7C0v0HErTIcxw5N/0yJsw59GQfhArXtXd3fKygT1+BUYt
 3wWED9SZV7723s288euTTqR5q5jx4OWfqTYhGUsEYAj+q5Lk4qIoBH/vcY9q/VWfvvg6
 H+osch669a5CTFIUmGLbMjyFEjSez8nKLsFbvoqLFClPxBN3VyOOthuHXYtSvoL9YPIM
 0vWZdyKuE7XdicvB78YQ1q1krA15WiklJBhB25igWiyWwZm5XOk3KVzQdYUhyZVvhodE
 9KLg==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20230601; t=1748636178; x=1749240978;
 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=qno/NcbQE2WUCK0f4cChFrwfoZGIusekF44BxcDqQXM=;
 b=MN+SaNIP1reC0XRUGmK/EBNrfg90uqshbiJKqzEtmNqXXsTgHhDzanj1f7awoAemIO
 Ak1fOJFNn7AFviy5bkRj7pgt3Ni9rq0Xfv2do7hv5AC7SVvfRbZJwgZfEERUeVXp50Lz
 cWWV0smg7O+AiloQPbT7qUtcYj6V2L4/cUusaha/HfIYiYIrDJJRFG2MbeiEXwEetty8
 J1Wc63TDnuKu+NJxifrEwSWWJZa8Ar+ZyOx4WBEnaVFcOpuvsnqmMU1HkxtjHlRJQ9iz
 H0RUZ0ujRpigGUugbvNXCwP2kHE/9O7b+6vsbgiybAkwVO+u9tNSvNsf6tEkhO9hLpxA
 ux0g==
X-Forwarded-Encrypted: i=1;
 AJvYcCV3qhobE08PfrTvW30TY7DCtVdVhmj3h/tVheoAQNU7IwjHpjDO1jmmUfY8HWpmx/54MqwGfA==@debbugs.gnu.org
X-Gm-Message-State: AOJu0YyWG8wci5AylFBzp+9DnvWlb0zGblXniUtX7OLAbtfGNZIHnPi9
 /egKRfMEQVyaORgmytFHBX4VuaxQ4xkbP7KQkxVD+muhmcM7x2A7rOEStIAb6ztYZwpJURSWPzJ
 DFhABI5hle197LbsYYAbfSWlF3famNNQ=
X-Gm-Gg: ASbGncugG7YZA03eW7AwXuh9i8v5IueuXtqltW/PLVVxS7QZypscKW9Yhx10avN+HRH
 iUu2KQY3+sRDFLFG5Jo4mEuK7kdXa3vR0IRNjmUdL7A5EI0eVKdQrGrEWmA0KX9nBOlefB6xthE
 4Ino1q7A5dpDeGtksSx7UT33S5aME4I944mdKFq06j3ii54w==
X-Google-Smtp-Source: AGHT+IE56+RLPSfML+Xd0OaWFjUO9QjXgrL84sBVogETXzi9i5s0kx465Pjhs3KgfqHNk0vWoOfpmdrTi6t6K1DU6Q4=
X-Received: by 2002:a05:6122:1d94:b0:52f:2a3:4bd6 with SMTP id
 71dfb90a1353d-53080f8b443mr4860758e0c.3.1748636178553; Fri, 30 May 2025
 13:16:18 -0700 (PDT)
MIME-Version: 1.0
References: <CAN+1HbqjV7tVbyz0rRMBvXHC+u1nL59X--m8KxuKwvvKhuXY7A@HIDDEN>
 <7733aaf3-920b-8fe2-d02a-ab1a213f0cb6@HIDDEN>
 <CAN+1HbqHU-3P_QpQ6gxWQRx4_q6QE_ZVhZTyhhAD1e13R5hxUQ@HIDDEN>
 <6bd9d4d1-a24c-80f2-1d9a-a7b6dbc8e559@HIDDEN>
 <CAN+1HbpUZy5yeK0Ce1KJ0zvaEZMCSQEutDy1rJ_dvSVOnqUPOw@HIDDEN>
 <CAN+1HboiHSNVQ4tOG_-6acxtm1gswqMm0B=fYXTySUeBA9Oi=w@HIDDEN>
 <CAN+1Hbp52otHmBv9CJkaT-4XLHUOQOZb3JO+Ae5u3fNgwHTzRA@HIDDEN>
 <31ab34c5-4c3b-4167-4a81-e336978a198b@HIDDEN> <86wma0uegn.fsf@HIDDEN>
 <1d0749c2-873e-a502-f1c9-033ee9ba4ff3@HIDDEN> <8634cmvhil.fsf@HIDDEN>
 <7489261d-c328-29dd-d611-42c7bf27b60a@HIDDEN>
In-Reply-To: <7489261d-c328-29dd-d611-42c7bf27b60a@HIDDEN>
From: Ship Mints <shipmints@HIDDEN>
Date: Fri, 30 May 2025 16:16:07 -0400
X-Gm-Features: AX0GCFs90R-wrMSy_sz3hwWkuc8a0dYsWrMibBV3iWiqr0B1oqolqe6n5XsXg1I
Message-ID: <CAN+1HboFq=Kciky+sGXsOCMy-p6xgfj3KScMS_4jhmMAKPdFkw@HIDDEN>
Subject: Re: bug#78621: Pixelwise display specified spaces less precise than
 min-width
To: Jim Porter <jporterbugs@HIDDEN>
Content-Type: multipart/alternative; boundary="00000000000043a0b50636601662"
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 78621
Cc: Eli Zaretskii <eliz@HIDDEN>, 78621 <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 (-)

--00000000000043a0b50636601662
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

On Fri, May 30, 2025 at 4:01=E2=80=AFPM Jim Porter <jporterbugs@HIDDEN> =
wrote:

> On 5/29/2025 9:39 PM, Eli Zaretskii wrote:
> > If the string's text is already in a buffer, we have
> > buffer-text-pixel-size and window-text-pixel-size for that purpose.
> > If the text is not in any buffer, then string-pixel-width should do
> > the job, and do it well.  In particular, it strives to turn on/off all
> > the features that affect display as they are in the original buffer
> > (which can be passed to it as an optional argument), and applies all
> > the buffer-local settings that could matter.  This includes face
> > remapping (which is how text-scaling is implemented).
> >
> > So I still don't understand the nature of the problem.
>
> The problem was simply that the original script to reproduce the issue
> didn't pass the optional buffer argument to 'string-pixel-width', so the
> relevant buffer-local settings (face remapping) weren't used. Instead,
> the original script tried to approximate the remapping using its own
> calculations which weren't quite the same as the display engine.
>

Indeed.  To be fair, I was trying to make this work for Emacs < 31 but I
won't bother anymore.  The new features and all the bug fixes in vtable (a
lot of them), will be Emacs 31, IMO.

--00000000000043a0b50636601662
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr"><div dir=3D"ltr"><div class=3D"gmail_default" style=3D"fon=
t-family:monospace"><span style=3D"font-family:Arial,Helvetica,sans-serif">=
On Fri, May 30, 2025 at 4:01=E2=80=AFPM Jim Porter &lt;<a href=3D"mailto:jp=
orterbugs@HIDDEN">jporterbugs@HIDDEN</a>&gt; wrote:</span></div></div=
><div class=3D"gmail_quote gmail_quote_container"><blockquote class=3D"gmai=
l_quote" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,20=
4,204);padding-left:1ex">On 5/29/2025 9:39 PM, Eli Zaretskii wrote:<br>
&gt; If the string&#39;s text is already in a buffer, we have<br>
&gt; buffer-text-pixel-size and window-text-pixel-size for that purpose.<br=
>
&gt; If the text is not in any buffer, then string-pixel-width should do<br=
>
&gt; the job, and do it well.=C2=A0 In particular, it strives to turn on/of=
f all<br>
&gt; the features that affect display as they are in the original buffer<br=
>
&gt; (which can be passed to it as an optional argument), and applies all<b=
r>
&gt; the buffer-local settings that could matter.=C2=A0 This includes face<=
br>
&gt; remapping (which is how text-scaling is implemented).<br>
&gt; <br>
&gt; So I still don&#39;t understand the nature of the problem.<br>
<br>
The problem was simply that the original script to reproduce the issue <br>
didn&#39;t pass the optional buffer argument to &#39;string-pixel-width&#39=
;, so the <br>
relevant buffer-local settings (face remapping) weren&#39;t used. Instead, =
<br>
the original script tried to approximate the remapping using its own <br>
calculations which weren&#39;t quite the same as the display engine.<br></b=
lockquote><div><br></div><div class=3D"gmail_default" style=3D"font-family:=
monospace">Indeed.=C2=A0 To be fair, I was trying to make this work for Ema=
cs &lt; 31 but I won&#39;t bother anymore.=C2=A0 The new features and all t=
he bug fixes in vtable (a lot of them), will be Emacs 31, IMO.</div></div><=
/div>

--00000000000043a0b50636601662--




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#78621; Package emacs. Full text available.

Message received at 78621 <at> debbugs.gnu.org:


Received: (at 78621) by debbugs.gnu.org; 30 May 2025 20:01:40 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Fri May 30 16:01:40 2025
Received: from localhost ([127.0.0.1]:51020 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1uL5vA-00007l-19
	for submit <at> debbugs.gnu.org; Fri, 30 May 2025 16:01:40 -0400
Received: from mail-pj1-x102d.google.com ([2607:f8b0:4864:20::102d]:45536)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
 (Exim 4.84_2) (envelope-from <jporterbugs@HIDDEN>)
 id 1uL5v8-00007H-0j
 for 78621 <at> debbugs.gnu.org; Fri, 30 May 2025 16:01:38 -0400
Received: by mail-pj1-x102d.google.com with SMTP id
 98e67ed59e1d1-312116d75a6so2159262a91.3
 for <78621 <at> debbugs.gnu.org>; Fri, 30 May 2025 13:01:37 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=gmail.com; s=20230601; t=1748635292; x=1749240092; darn=debbugs.gnu.org;
 h=content-transfer-encoding:in-reply-to:from:references:cc:to
 :content-language:subject:mime-version:date:message-id:from:to:cc
 :subject:date:message-id:reply-to;
 bh=RhF6IPaWXHvm323YvW/FBO7dbFCLhQGwBqqpqmL4u1I=;
 b=ixHYKirz78Nsv3EyBFFnwyaLzgnBkP92HuyTUiia955UHvrHu+2PmnobS2JrVNpI8q
 TEofLN9rVx9K8qQ4xvbRmLoqpAXD01MYnBsCUWZzWlbiCLDhyS4r7R0GsktZgdqUE657
 9omELGHpxPCacZOz7R+04bTfR3y+tfOtnmDN09yicLQwp6gTmRc8Z/ptVI00ZuZYApGv
 24pZOmZcJWu1kqdFNOfHx1CNupD7A8onaN903OA8TWRC4g/azyr1kX9d0cUokTFQeWTU
 6ofR6ibHFEWPzFaa7leD7iSey4NydtXwRE8IIvkd54+b0QKDyefwnK2Dl8EiW24AlOCP
 5AYg==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20230601; t=1748635292; x=1749240092;
 h=content-transfer-encoding:in-reply-to:from:references:cc:to
 :content-language:subject:mime-version:date:message-id
 :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to;
 bh=RhF6IPaWXHvm323YvW/FBO7dbFCLhQGwBqqpqmL4u1I=;
 b=kpNF6OVF5C8DKeO4lmhtoiAqSQPMQoD87uhAG8GLqGg34TgyG8PotHHX9LwYt+2G3M
 GVeHfvsDNpITjFhZyKuSljyKfRtjnW/TLTbKkHhdNzVF1S+fEp2BLI1iPBRZE0Ac/75T
 kyiOpMqsqHQQsnjknBBV5Xu2PYzpeE5/6GLw5urTa5uuhtjunUcBRWKUP2Pc+t3VppvW
 Ykl16G12k3P3ZcAa5NH1ogS0CyoE9ipMubhirKWzMxFf5h49PKk9CbokFbmK4T2WGxg0
 a0yoB6Kmf3TxhsFGu6AqWyQbAMYhf/0j1rNaUNvbpGSt+BZHBS2/RUgQ38kGWF+2rkop
 HiyA==
X-Forwarded-Encrypted: i=1;
 AJvYcCWZm053gg3fZSIS3nYKoOlbVAUUruMY4VAhiwuPBHVwsQawRNnGoIUk3q+NrRWGb1bQiOlJ1A==@debbugs.gnu.org
X-Gm-Message-State: AOJu0Yx6pURpngTCA14xEp31yRu2UBOh1nQhpvVTVixI8zJt2/7Xjrxr
 gbDAjRwgLR/pJRmuyoF8fWspv3vOFlbf/DGbjRsWSdH5qaHXDENv3M53
X-Gm-Gg: ASbGncv2vTMDiWAGXi6LQfT5MemLsFCEBNWIMhWEs0F+jLECqxxAX88Qpq/ycQzdaqU
 dR9+RsGvJLbCFsVRP40NuQYCs/POeRPrvEED/eVli+obKG8reLPVJaoJd2QLKxZjsK5exPxyHqD
 v4Jex0a5E/aGLVApG2cNtn8PB2HlKZesC7NTG7j4c9lofUwNrDoYUKzfr+jb86qKHQ0Sz7eahoQ
 CfuTqytz+laIDLTI2/Au5kTR6XyBGsqg8YXo9JfwlVm5aeTtLF2GbZBUqhYpi+k1XTi64ARdyrj
 cXgG7Mvj92ZxEjb/aruJBiRN5uPEj7+iwxyupevv/Q+VTUG2Tvdwd+6SkC9BOp62KqNmcX85aQF
 iMuIEIeNqItigfjevLkfhY1SlHmLzTuo=
X-Google-Smtp-Source: AGHT+IFaXycUfGE4P2dxjCKgLJYKTQUr5R6Ys5rCbPWj4CHxlmRzolIo5JdC75fcktmpfOayLcmrsQ==
X-Received: by 2002:a17:90b:558c:b0:311:c93b:3ca2 with SMTP id
 98e67ed59e1d1-3124150cd9bmr6274351a91.6.1748635291671; 
 Fri, 30 May 2025 13:01:31 -0700 (PDT)
Received: from [192.168.1.2] (syn-076-168-144-128.res.spectrum.com.
 [76.168.144.128]) by smtp.googlemail.com with ESMTPSA id
 98e67ed59e1d1-3124e29f8aasm1737706a91.8.2025.05.30.13.01.30
 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128);
 Fri, 30 May 2025 13:01:31 -0700 (PDT)
Message-ID: <7489261d-c328-29dd-d611-42c7bf27b60a@HIDDEN>
Date: Fri, 30 May 2025 13:01:30 -0700
MIME-Version: 1.0
Subject: Re: bug#78621: Pixelwise display specified spaces less precise than
 min-width
Content-Language: en-US
To: Eli Zaretskii <eliz@HIDDEN>
References: <CAN+1HbqjV7tVbyz0rRMBvXHC+u1nL59X--m8KxuKwvvKhuXY7A@HIDDEN>
 <7733aaf3-920b-8fe2-d02a-ab1a213f0cb6@HIDDEN>
 <CAN+1HbqHU-3P_QpQ6gxWQRx4_q6QE_ZVhZTyhhAD1e13R5hxUQ@HIDDEN>
 <6bd9d4d1-a24c-80f2-1d9a-a7b6dbc8e559@HIDDEN>
 <CAN+1HbpUZy5yeK0Ce1KJ0zvaEZMCSQEutDy1rJ_dvSVOnqUPOw@HIDDEN>
 <CAN+1HboiHSNVQ4tOG_-6acxtm1gswqMm0B=fYXTySUeBA9Oi=w@HIDDEN>
 <CAN+1Hbp52otHmBv9CJkaT-4XLHUOQOZb3JO+Ae5u3fNgwHTzRA@HIDDEN>
 <31ab34c5-4c3b-4167-4a81-e336978a198b@HIDDEN> <86wma0uegn.fsf@HIDDEN>
 <1d0749c2-873e-a502-f1c9-033ee9ba4ff3@HIDDEN> <8634cmvhil.fsf@HIDDEN>
From: Jim Porter <jporterbugs@HIDDEN>
In-Reply-To: <8634cmvhil.fsf@HIDDEN>
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 7bit
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 78621
Cc: shipmints@HIDDEN, 78621 <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 5/29/2025 9:39 PM, Eli Zaretskii wrote:
> If the string's text is already in a buffer, we have
> buffer-text-pixel-size and window-text-pixel-size for that purpose.
> If the text is not in any buffer, then string-pixel-width should do
> the job, and do it well.  In particular, it strives to turn on/off all
> the features that affect display as they are in the original buffer
> (which can be passed to it as an optional argument), and applies all
> the buffer-local settings that could matter.  This includes face
> remapping (which is how text-scaling is implemented).
> 
> So I still don't understand the nature of the problem.

The problem was simply that the original script to reproduce the issue 
didn't pass the optional buffer argument to 'string-pixel-width', so the 
relevant buffer-local settings (face remapping) weren't used. Instead, 
the original script tried to approximate the remapping using its own 
calculations which weren't quite the same as the display engine.




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#78621; Package emacs. Full text available.

Message received at 78621 <at> debbugs.gnu.org:


Received: (at 78621) by debbugs.gnu.org; 30 May 2025 04:39:57 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Fri May 30 00:39:57 2025
Received: from localhost ([127.0.0.1]:43184 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1uKrXA-0003eD-MQ
	for submit <at> debbugs.gnu.org; Fri, 30 May 2025 00:39:57 -0400
Received: from eggs.gnu.org ([2001:470:142:3::10]:45112)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.84_2) (envelope-from <eliz@HIDDEN>) id 1uKrX7-0003dj-Vm
 for 78621 <at> debbugs.gnu.org; Fri, 30 May 2025 00:39: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 1uKrX2-0006tC-La; Fri, 30 May 2025 00:39:48 -0400
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org;
 s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date:
 mime-version; bh=RYWpIRCNlMFZzjmFOR1x0QKu+hyLWUWG29reZMRqJHI=; b=eu5YvSqySJAP
 6ZyPiGJaZsfbLCnUasXNFySHYQz8kyvf9JeCNG6KrQAlJCPG6BIcvNbk+mlEaDisznYTHOsrD4SBX
 geY3xko5U7kTk83LlQpesuuyqUGq0AYNdrgUNLLpRJzrY/n12BozTanPCCQ+RI95yKwKJmz72afRp
 vjdn4lpgIGjvCcS0IlMbC5hRLxaJjc+hTJUgP3GNLHDPKGKL/4GrvM2HYoGwxc8VF5E76C9Tg6o8g
 0S3tYvewBpBDm2c/IKv1B/glOHSxTd8csFfG/7l4qqqptE2hJSGRi8zdVx/QPWAoHQ/k83LpoXFrz
 100F7WM+sopFydou04dHHg==;
Date: Fri, 30 May 2025 07:39:46 +0300
Message-Id: <8634cmvhil.fsf@HIDDEN>
From: Eli Zaretskii <eliz@HIDDEN>
To: Jim Porter <jporterbugs@HIDDEN>
In-Reply-To: <1d0749c2-873e-a502-f1c9-033ee9ba4ff3@HIDDEN> (message from
 Jim Porter on Thu, 29 May 2025 09:38:15 -0700)
Subject: Re: bug#78621: Pixelwise display specified spaces less precise than
 min-width
References: <CAN+1HbqjV7tVbyz0rRMBvXHC+u1nL59X--m8KxuKwvvKhuXY7A@HIDDEN>
 <7733aaf3-920b-8fe2-d02a-ab1a213f0cb6@HIDDEN>
 <CAN+1HbqHU-3P_QpQ6gxWQRx4_q6QE_ZVhZTyhhAD1e13R5hxUQ@HIDDEN>
 <6bd9d4d1-a24c-80f2-1d9a-a7b6dbc8e559@HIDDEN>
 <CAN+1HbpUZy5yeK0Ce1KJ0zvaEZMCSQEutDy1rJ_dvSVOnqUPOw@HIDDEN>
 <CAN+1HboiHSNVQ4tOG_-6acxtm1gswqMm0B=fYXTySUeBA9Oi=w@HIDDEN>
 <CAN+1Hbp52otHmBv9CJkaT-4XLHUOQOZb3JO+Ae5u3fNgwHTzRA@HIDDEN>
 <31ab34c5-4c3b-4167-4a81-e336978a198b@HIDDEN> <86wma0uegn.fsf@HIDDEN>
 <1d0749c2-873e-a502-f1c9-033ee9ba4ff3@HIDDEN>
X-Spam-Score: -2.3 (--)
X-Debbugs-Envelope-To: 78621
Cc: shipmints@HIDDEN, 78621 <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 (---)

> Date: Thu, 29 May 2025 09:38:15 -0700
> Cc: shipmints@HIDDEN, 78621 <at> debbugs.gnu.org
> From: Jim Porter <jporterbugs@HIDDEN>
> 
> On 5/28/2025 11:18 PM, Eli Zaretskii wrote:
> > I don't follow this argument.  string-pixel-width uses the display
> > code, so it should return the exact same value in pixels as what the
> > actual display produces when the same characters are shown on the
> > screen.  So whatever rounding happens (which I don't think it does,
> > since font glyphs have integer advance width), it happens the same in
> > both cases and should yield the same values.  Or what am I missing?
> 
> The short version is that we should pass the current buffer to 
> 'string-pixel-width' so that we can just use the display code to compute 
> the string's width with all the remappings applied, rather than having 
> the display code compute it without remappings and then trying to guess 
> what the remapping would do to the width.

If the string's text is already in a buffer, we have
buffer-text-pixel-size and window-text-pixel-size for that purpose.
If the text is not in any buffer, then string-pixel-width should do
the job, and do it well.  In particular, it strives to turn on/off all
the features that affect display as they are in the original buffer
(which can be passed to it as an optional argument), and applies all
the buffer-local settings that could matter.  This includes face
remapping (which is how text-scaling is implemented).

So I still don't understand the nature of the problem.  It is possible
that string-pixel-width should take some additional settings into
consideration, but in that case, we need to identify which settings it
currently ignores, and add that to the function to fix it.  However,
your argument is not specific to some setting that isn't taken into
consideration, it is a general one, and that I don't understand, for
the simple reason that string-pixel-width uses the exact code used for
displaying text.

> The problem is that 'text-scale-increase' modifies the text size by a 
> particular ratio; when zooming out by one step, that defaults to 1 / 
> text-scale-mode-step, or 5/6.

text-scale-increase does that by using face-remapping-alist, which
string-pixel-width accounts for (at least is supposed to).

> My fixed-pitch font is 8 pixels wide at the default size, so zooming out 
> one step means the pixel width per char is 8 * 5/6 = 6.666.

I don't think this is true.  What face-remapping-alist does is it asks
Emacs to find a variant of the font with smaller or larger size.
Emacs then asks the font back-end to find a font that best fits that
size, and uses that.  The size of the font is not necessarily what you
compute above, it is the best fit for that number.

But this is a tangent, see below.

> Since the advance width is an integer, we round up to 7 pixels. The
> original code works for fixed-pitch fonts since
> '(default-font-width)' returns 7 in this case, so the original
> expression:
> 
>    (ceiling (* (string-pixel-width str)
>                (/ (float (default-font-width)) (frame-char-width))))
> 
> is equivalent (only in this simple case) to:
> 
>    (* (string-width str) (default-font-width))
> 
> Hopefully that all makes sense.
> 
> For variable-pitch fonts, this is more complex. Our zoom ratio is still 
> 5/6, but we apply that ratio per-character, rounding each time. For the 
> string "hi there", the pixel widths of each character are:
> 
>    Scale   h  i  _  t  h  e  r  e   Total
>        0   8  4  4  5  8  8  5  8      50
>       -1   7  3  4  4  7  7  5  7      44
> 
> Since the error introduced by rounding each character is a bit 
> different, we get a different result between the width from the display 
> engine compared to the approximation in the first expression above where 
> we round only once at the very end.

Why do you say that the result is different from the actual display?
Do you perhaps assume that string-pixel-width adds the character
widths "by hand", and thus accrues those round-off errors?  If so,
that's not what string-pixel-width does.  It actually computes the
layout of the string's text as it would be shown on display, using the
exact same code from the display engine used for actual display.  IOW,
the pixel-width of the text is measured by the display layout code,
including asking the (scaled-up or scaled-down) font for the metrics
of the glyph of each character in the string, and computing the sum of
those metrics exactly like we do for displaying them.  So any
round-off, such as it is, should be identical both on display and in
the results of string-pixel-width.  Take a look at
window-text-pixel-size (the primitive which string-pixel-width calls)
to see how it does its job by calling the display-engine functions.

The only way I can understand your argument is that the original
recipe didn't pass the buffer to string-pixel-width (that additional
argument is new in Emacs 31), which might be the reason why it
attempted to account for text-scaling "by hand".  But that's not how
this issue should be solved, which is why we added that argument in
Emacs 31.

If I'm missing something in the above reasoning, please point that
out, because I still think string-pixel-width should do its job in
this situation (barring any bugs in it that we should identify and
fix).




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#78621; Package emacs. Full text available.
bug closed, send any further explanations to 78621 <at> debbugs.gnu.org and Ship Mints <shipmints@HIDDEN> Request was from Ship Mints <shipmints@HIDDEN> to control <at> debbugs.gnu.org. Full text available.
Added tag(s) notabug. Request was from Ship Mints <shipmints@HIDDEN> to control <at> debbugs.gnu.org. Full text available.

Message received at 78621 <at> debbugs.gnu.org:


Received: (at 78621) by debbugs.gnu.org; 29 May 2025 17:23:27 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Thu May 29 13:23:27 2025
Received: from localhost ([127.0.0.1]:38371 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1uKgyV-0003sr-5m
	for submit <at> debbugs.gnu.org; Thu, 29 May 2025 13:23:27 -0400
Received: from mail-ua1-x92c.google.com ([2607:f8b0:4864:20::92c]:56686)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
 (Exim 4.84_2) (envelope-from <shipmints@HIDDEN>)
 id 1uKgyQ-0003sD-3o
 for 78621 <at> debbugs.gnu.org; Thu, 29 May 2025 13:23:23 -0400
Received: by mail-ua1-x92c.google.com with SMTP id
 a1e0cc1a2514c-87dfd390745so574168241.1
 for <78621 <at> debbugs.gnu.org>; Thu, 29 May 2025 10:23:22 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=gmail.com; s=20230601; t=1748539396; x=1749144196; darn=debbugs.gnu.org;
 h=cc:subject:message-id:date:from:in-reply-to:references:mime-version
 :from:to:cc:subject:date:message-id:reply-to;
 bh=IL7h9pqcTvxt0rbrc83IS8W80hbsRv1ZL+9V4nFWbs4=;
 b=XffMXUhPkdyWandAOoVBhfqtwwZzibrZZUG+CSzHzNNeDGQfeQJuAciPllBLDLO7SH
 jFc1+fzVmAYXmgicTFthrWN+uGAKlbCUD8kXABKT6Iqyl9bO+6fJXW19GWB1r0r6zY6J
 p3j+djOI7S7JSBlYh7pK3X7BO6AvhL4Nga0kREy7KkoHni/0qmnMLtztwxRAVi4DW1ft
 DiUtHOdzlVwNUt0ZhJqKOGnRCJdoyuBrxcQB1cDV1ziEES1dn5Opl6rThfsGopOir3Fw
 uJqgT0IBQu95KWy8BUbL8P9lVXzfECe7z1F6ACWsO7WaqoWE0Ch6+59EEa9s6i5/mukY
 wc1w==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20230601; t=1748539396; x=1749144196;
 h=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=IL7h9pqcTvxt0rbrc83IS8W80hbsRv1ZL+9V4nFWbs4=;
 b=BOvrmpBhtUh4Z/hu32wwafrk4ZSeanmVYMC1aJD7MFXAN2eurB9DNb8d/57UCVdkJv
 fzl3u6usu6qygZMVH95yE/wc7+28fV+zBQzsEA5mRFsf+5GYm09hjjTvJ/zOSMhOeIvw
 d5HSVOzcKQEcdsuRd5xGkglQE3wny5XqWSb8JZTb0aDw6bJ20ZYVcO4d8JVxoid4HLn6
 QxJVvE7ex4DoSL6gUMuy+gGuEg3G8nZisbbtHea7EzvT+VwfbUt7HeE+CDKD4lrguzMw
 wjlvCsMcq1q2B2cayy+4ALmEwdKtkjFxb33Lf0PkRqIVKCAeqAKRgmX9jC69wFI54mg/
 CaRQ==
X-Gm-Message-State: AOJu0YyWZMxdcWwjmm9c5b8a47EyWeUYRjq6L6MtCDzmNIYnRVVfDqQK
 V9OU+daJtbaHnDy9qRNFt4Y1YVyuQ1IpHmmz+qvhwblwFqWELF00vQIP+V3/13LTCyADQHC+YKB
 EZl4qI6irlDCVebvT1MyTAcKi4LMxXTm1vrc5
X-Gm-Gg: ASbGnctqX73YN4YPrKgnHNR5RHX98+2JHVwlqjSGNyoX7czWPkgSchsnYhOW+lS1il4
 ukS2eljEJqnwxZvId0ATE0bD0aobr2g3k0zg7BSSH6taAdawOHCDw/Y/Hr1WfgiPhtlTucGbcEQ
 zhADKOG6tDLEiuRw+PG71wEoWhddfpCwYUvcc=
X-Received: by 2002:a05:6102:8028:b0:4db:154e:ad1d with SMTP id
 ada2fe7eead31-4e6e40d5e5amt769721137.2.1748539396134; Thu, 29 May 2025
 10:23:16 -0700 (PDT)
MIME-Version: 1.0
References: <CAN+1HbqjV7tVbyz0rRMBvXHC+u1nL59X--m8KxuKwvvKhuXY7A@HIDDEN>
 <7733aaf3-920b-8fe2-d02a-ab1a213f0cb6@HIDDEN>
 <CAN+1HbqHU-3P_QpQ6gxWQRx4_q6QE_ZVhZTyhhAD1e13R5hxUQ@HIDDEN>
 <6bd9d4d1-a24c-80f2-1d9a-a7b6dbc8e559@HIDDEN>
 <CAN+1HbpUZy5yeK0Ce1KJ0zvaEZMCSQEutDy1rJ_dvSVOnqUPOw@HIDDEN>
 <CAN+1HboiHSNVQ4tOG_-6acxtm1gswqMm0B=fYXTySUeBA9Oi=w@HIDDEN>
 <CAN+1Hbp52otHmBv9CJkaT-4XLHUOQOZb3JO+Ae5u3fNgwHTzRA@HIDDEN>
 <31ab34c5-4c3b-4167-4a81-e336978a198b@HIDDEN> <86wma0uegn.fsf@HIDDEN>
 <1d0749c2-873e-a502-f1c9-033ee9ba4ff3@HIDDEN>
 <CAN+1Hbrpc3+829M9exGWDvOPZ-LCD+o9BL2k22aHhwwxcHUrgA@HIDDEN>
 <CAN+1HbpzhGjSe9k2R9DA=ZyupBPL+ZrYYoQDyZq1AJQE=L8YaA@HIDDEN>
In-Reply-To: <CAN+1HbpzhGjSe9k2R9DA=ZyupBPL+ZrYYoQDyZq1AJQE=L8YaA@HIDDEN>
From: Ship Mints <shipmints@HIDDEN>
Date: Thu, 29 May 2025 13:23:04 -0400
X-Gm-Features: AX0GCFuWBBnPWVBnueQk32hBqnaEDJbEd45a_mm2bF2iFCuHG_19LG_9JI9W9ds
Message-ID: <CAN+1HbqQaCU3TqdTGMDzLyB7A944BhU39ak6Ha12XHchLhk3sA@HIDDEN>
Subject: Re: bug#78621: Pixelwise display specified spaces less precise than
 min-width
Content-Type: multipart/alternative; boundary="0000000000009675890636498d6b"
X-Spam-Score: 2.2 (++)
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:  tags 78621 notabug close 78621 On Thu, May 29, 2025 at 12:50 PM
    Ship Mints wrote: > tags 78621 notabug > close 78621 > > On Thu, May 29,
   2025 at 12:41 PM Ship Mints wrote: > >> On Thu, May 29, 2025 at 12:38 PM
    Jim Porter >> wrote: >> >>> On 5/28/2025 11:18 PM, Eli Zaretskii [...] 
 
 Content analysis details:   (2.2 points, 10.0 required)
 
  pts rule name              description
 ---- ---------------------- --------------------------------------------------
  1.0 FORGED_GMAIL_RCVD      'From' gmail.com does not match 'Received'
                             headers
  0.0 SPF_HELO_NONE          SPF: HELO does not publish an SPF Record
 -0.0 SPF_PASS               SPF: sender matches SPF record
  0.0 FREEMAIL_FROM          Sender email is commonly abused enduser mail
                             provider (shipmints[at]gmail.com)
  1.2 MISSING_HEADERS        Missing To: header
  0.0 HTML_MESSAGE           BODY: HTML included in message
 -0.0 RCVD_IN_DNSWL_NONE     RBL: Sender listed at https://www.dnswl.org/,
                              no trust
                             [2607:f8b0:4864:20:0:0:0:92c listed in]
                             [list.dnswl.org]
X-Debbugs-Envelope-To: 78621
Cc: 78621 <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.2 (+)
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:  tags 78621 notabug close 78621 On Thu, May 29, 2025 at 12:50 PM
    Ship Mints wrote: > tags 78621 notabug > close 78621 > > On Thu, May 29,
   2025 at 12:41 PM Ship Mints wrote: > >> On Thu, May 29, 2025 at 12:38 PM
    Jim Porter >> wrote: >> >>> On 5/28/2025 11:18 PM, Eli Zaretskii [...] 
 
 Content analysis details:   (1.2 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:92c listed in]
                             [list.dnswl.org]
  1.0 FORGED_GMAIL_RCVD      'From' gmail.com does not match 'Received'
                             headers
  0.0 SPF_HELO_NONE          SPF: HELO does not publish an SPF Record
 -0.0 SPF_PASS               SPF: sender matches SPF record
  0.0 FREEMAIL_FROM          Sender email is commonly abused enduser mail
                             provider (shipmints[at]gmail.com)
  1.2 MISSING_HEADERS        Missing To: header
  0.0 HTML_MESSAGE           BODY: HTML included in message
 -1.0 MAILING_LIST_MULTI     Multiple indicators imply a widely-seen list
                             manager

--0000000000009675890636498d6b
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

tags 78621 notabug
close 78621

On Thu, May 29, 2025 at 12:50=E2=80=AFPM Ship Mints <shipmints@HIDDEN> w=
rote:

> tags 78621 notabug
> close 78621
>
> On Thu, May 29, 2025 at 12:41=E2=80=AFPM Ship Mints <shipmints@HIDDEN>=
 wrote:
>
>> On Thu, May 29, 2025 at 12:38=E2=80=AFPM Jim Porter <jporterbugs@HIDDEN=
om>
>> wrote:
>>
>>> On 5/28/2025 11:18 PM, Eli Zaretskii wrote:
>>> > I don't follow this argument.  string-pixel-width uses the display
>>> > code, so it should return the exact same value in pixels as what the
>>> > actual display produces when the same characters are shown on the
>>> > screen.  So whatever rounding happens (which I don't think it does,
>>> > since font glyphs have integer advance width), it happens the same in
>>> > both cases and should yield the same values.  Or what am I missing?
>>>
>>> The short version is that we should pass the current buffer to
>>> 'string-pixel-width' so that we can just use the display code to comput=
e
>>> the string's width with all the remappings applied, rather than having
>>> the display code compute it without remappings and then trying to guess
>>> what the remapping would do to the width.
>>>
>>> Here's a longer version if it helps:
>>>
>>> The problem is that 'text-scale-increase' modifies the text size by a
>>> particular ratio; when zooming out by one step, that defaults to 1 /
>>> text-scale-mode-step, or 5/6.
>>>
>>> My fixed-pitch font is 8 pixels wide at the default size, so zooming ou=
t
>>> one step means the pixel width per char is 8 * 5/6 =3D 6.666. Since the
>>> advance width is an integer, we round up to 7 pixels. The original code
>>> works for fixed-pitch fonts since '(default-font-width)' returns 7 in
>>> this case, so the original expression:
>>>
>>>    (ceiling (* (string-pixel-width str)
>>>                (/ (float (default-font-width)) (frame-char-width))))
>>>
>>> is equivalent (only in this simple case) to:
>>>
>>>    (* (string-width str) (default-font-width))
>>>
>>> Hopefully that all makes sense.
>>>
>>> For variable-pitch fonts, this is more complex. Our zoom ratio is still
>>> 5/6, but we apply that ratio per-character, rounding each time. For the
>>> string "hi there", the pixel widths of each character are:
>>>
>>>    Scale   h  i  _  t  h  e  r  e   Total
>>>        0   8  4  4  5  8  8  5  8      50
>>>       -1   7  3  4  4  7  7  5  7      44
>>>
>>> Since the error introduced by rounding each character is a bit
>>> different, we get a different result between the width from the display
>>> engine compared to the approximation in the first expression above wher=
e
>>> we round only once at the very end.
>>>
>>
>> Yes, indeed.  No more estimation.  Just use the display engine directly.
>>
>

--0000000000009675890636498d6b
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr"><div dir=3D"ltr"><div class=3D"gmail_default" style=3D"fon=
t-family:monospace">tags 78621 notabug<br>close 78621<br></div></div><br><d=
iv class=3D"gmail_quote gmail_quote_container"><div dir=3D"ltr" class=3D"gm=
ail_attr">On Thu, May 29, 2025 at 12:50=E2=80=AFPM Ship Mints &lt;<a href=
=3D"mailto:shipmints@HIDDEN">shipmints@HIDDEN</a>&gt; wrote:<br></div=
><blockquote class=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8ex;border=
-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir=3D"ltr"><div st=
yle=3D"font-family:monospace">tags=C2=A078621 notabug</div><div style=3D"fo=
nt-family:monospace">close 78621</div></div><br><div class=3D"gmail_quote">=
<div dir=3D"ltr" class=3D"gmail_attr">On Thu, May 29, 2025 at 12:41=E2=80=
=AFPM Ship Mints &lt;<a href=3D"mailto:shipmints@HIDDEN" target=3D"_blan=
k">shipmints@HIDDEN</a>&gt; wrote:<br></div><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"><div dir=3D"ltr"><div dir=3D"ltr"><div style=3D"font-=
family:monospace"><span style=3D"font-family:Arial,Helvetica,sans-serif">On=
 Thu, May 29, 2025 at 12:38=E2=80=AFPM Jim Porter &lt;<a href=3D"mailto:jpo=
rterbugs@HIDDEN" target=3D"_blank">jporterbugs@HIDDEN</a>&gt; wrote:<=
/span></div></div><div class=3D"gmail_quote"><blockquote class=3D"gmail_quo=
te" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204=
);padding-left:1ex">On 5/28/2025 11:18 PM, Eli Zaretskii wrote:<br>
&gt; I don&#39;t follow this argument.=C2=A0 string-pixel-width uses the di=
splay<br>
&gt; code, so it should return the exact same value in pixels as what the<b=
r>
&gt; actual display produces when the same characters are shown on the<br>
&gt; screen.=C2=A0 So whatever rounding happens (which I don&#39;t think it=
 does,<br>
&gt; since font glyphs have integer advance width), it happens the same in<=
br>
&gt; both cases and should yield the same values.=C2=A0 Or what am I missin=
g?<br>
<br>
The short version is that we should pass the current buffer to <br>
&#39;string-pixel-width&#39; so that we can just use the display code to co=
mpute <br>
the string&#39;s width with all the remappings applied, rather than having =
<br>
the display code compute it without remappings and then trying to guess <br=
>
what the remapping would do to the width.<br>
<br>
Here&#39;s a longer version if it helps:<br>
<br>
The problem is that &#39;text-scale-increase&#39; modifies the text size by=
 a <br>
particular ratio; when zooming out by one step, that defaults to 1 / <br>
text-scale-mode-step, or 5/6.<br>
<br>
My fixed-pitch font is 8 pixels wide at the default size, so zooming out <b=
r>
one step means the pixel width per char is 8 * 5/6 =3D 6.666. Since the <br=
>
advance width is an integer, we round up to 7 pixels. The original code <br=
>
works for fixed-pitch fonts since &#39;(default-font-width)&#39; returns 7 =
in <br>
this case, so the original expression:<br>
<br>
=C2=A0 =C2=A0(ceiling (* (string-pixel-width str)<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(/ (float (default-f=
ont-width)) (frame-char-width))))<br>
<br>
is equivalent (only in this simple case) to:<br>
<br>
=C2=A0 =C2=A0(* (string-width str) (default-font-width))<br>
<br>
Hopefully that all makes sense.<br>
<br>
For variable-pitch fonts, this is more complex. Our zoom ratio is still <br=
>
5/6, but we apply that ratio per-character, rounding each time. For the <br=
>
string &quot;hi there&quot;, the pixel widths of each character are:<br>
<br>
=C2=A0 =C2=A0Scale=C2=A0 =C2=A0h=C2=A0 i=C2=A0 _=C2=A0 t=C2=A0 h=C2=A0 e=C2=
=A0 r=C2=A0 e=C2=A0 =C2=A0Total<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A00=C2=A0 =C2=A08=C2=A0 4=C2=A0 4=C2=A0 5=C2=A0 8=
=C2=A0 8=C2=A0 5=C2=A0 8=C2=A0 =C2=A0 =C2=A0 50<br>
=C2=A0 =C2=A0 =C2=A0 -1=C2=A0 =C2=A07=C2=A0 3=C2=A0 4=C2=A0 4=C2=A0 7=C2=A0=
 7=C2=A0 5=C2=A0 7=C2=A0 =C2=A0 =C2=A0 44<br>
<br>
Since the error introduced by rounding each character is a bit <br>
different, we get a different result between the width from the display <br=
>
engine compared to the approximation in the first expression above where <b=
r>
we round only once at the very end.<br></blockquote><div><br></div><div sty=
le=3D"font-family:monospace">Yes, indeed.=C2=A0 No more estimation.=C2=A0 J=
ust use the display engine directly.</div></div></div>
</blockquote></div>
</blockquote></div></div>

--0000000000009675890636498d6b--




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#78621; Package emacs. Full text available.

Message received at 78621 <at> debbugs.gnu.org:


Received: (at 78621) by debbugs.gnu.org; 29 May 2025 17:14:47 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Thu May 29 13:14:47 2025
Received: from localhost ([127.0.0.1]:38304 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1uKgq6-0003CE-O4
	for submit <at> debbugs.gnu.org; Thu, 29 May 2025 13:14:46 -0400
Received: from relay4-d.mail.gandi.net ([2001:4b98:dc4:8::224]:34667)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.84_2) (envelope-from <juri@HIDDEN>) id 1uKgq3-0003Bk-Ks
 for 78621 <at> debbugs.gnu.org; Thu, 29 May 2025 13:14:44 -0400
Received: by mail.gandi.net (Postfix) with ESMTPSA id 0169041DF1;
 Thu, 29 May 2025 17:14:34 +0000 (UTC)
From: Juri Linkov <juri@HIDDEN>
To: Ship Mints <shipmints@HIDDEN>
Subject: Re: bug#78621: Pixelwise display specified spaces less precise than
 min-width
In-Reply-To: <CAN+1HbpzhGjSe9k2R9DA=ZyupBPL+ZrYYoQDyZq1AJQE=L8YaA@HIDDEN>
Organization: LINKOV.NET
References: <CAN+1HbqjV7tVbyz0rRMBvXHC+u1nL59X--m8KxuKwvvKhuXY7A@HIDDEN>
 <7733aaf3-920b-8fe2-d02a-ab1a213f0cb6@HIDDEN>
 <CAN+1HbqHU-3P_QpQ6gxWQRx4_q6QE_ZVhZTyhhAD1e13R5hxUQ@HIDDEN>
 <6bd9d4d1-a24c-80f2-1d9a-a7b6dbc8e559@HIDDEN>
 <CAN+1HbpUZy5yeK0Ce1KJ0zvaEZMCSQEutDy1rJ_dvSVOnqUPOw@HIDDEN>
 <CAN+1HboiHSNVQ4tOG_-6acxtm1gswqMm0B=fYXTySUeBA9Oi=w@HIDDEN>
 <CAN+1Hbp52otHmBv9CJkaT-4XLHUOQOZb3JO+Ae5u3fNgwHTzRA@HIDDEN>
 <31ab34c5-4c3b-4167-4a81-e336978a198b@HIDDEN>
 <86wma0uegn.fsf@HIDDEN>
 <1d0749c2-873e-a502-f1c9-033ee9ba4ff3@HIDDEN>
 <CAN+1Hbrpc3+829M9exGWDvOPZ-LCD+o9BL2k22aHhwwxcHUrgA@HIDDEN>
 <CAN+1HbpzhGjSe9k2R9DA=ZyupBPL+ZrYYoQDyZq1AJQE=L8YaA@HIDDEN>
Date: Thu, 29 May 2025 20:13:40 +0300
Message-ID: <87frgn9w6k.fsf@HIDDEN>
User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/31.0.50 (x86_64-pc-linux-gnu)
MIME-Version: 1.0
Content-Type: text/plain
X-GND-State: clean
X-GND-Score: -100
X-GND-Cause: gggruggvucftvghtrhhoucdtuddrgeeffedrtddtgddvieejtdculddtuddrgeefvddrtddtmdcutefuodetggdotefrodftvfcurfhrohhfihhlvgemucfitefpfffkpdcuggftfghnshhusghstghrihgsvgenuceurghilhhouhhtmecufedtudenucesvcftvggtihhpihgvnhhtshculddquddttddmnecujfgurhephffvvefujghofhffkfgfgggtsehttdertddtredtnecuhfhrohhmpefluhhrihcunfhinhhkohhvuceojhhurhhisehlihhnkhhovhdrnhgvtheqnecuggftrfgrthhtvghrnhepffegteefveelhfeljeefueehieduiedtfffhuddtkeeffffghfevheetgeeukeehnecukfhppeeluddruddvledruddtfedrvdejnecuvehluhhsthgvrhfuihiivgeptdenucfrrghrrghmpehinhgvthepledurdduvdelrddutdefrddvjedphhgvlhhopehmrghilhdrghgrnhguihdrnhgvthdpmhgrihhlfhhrohhmpehjuhhriheslhhinhhkohhvrdhnvghtpdhnsggprhgtphhtthhopedvpdhrtghpthhtohepjeekiedvudesuggvsggsuhhgshdrghhnuhdrohhrghdprhgtphhtthhopehshhhiphhmihhnthhssehgmhgrihhlrdgtohhm
X-GND-Sasl: juri@HIDDEN
X-Spam-Score: -0.7 (/)
X-Debbugs-Envelope-To: 78621
Cc: 78621 <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.7 (-)

> tags 78621 notabug
> close 78621

This works only when you add
Bcc: control <at> debbugs.gnu.org




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#78621; Package emacs. Full text available.

Message received at 78621 <at> debbugs.gnu.org:


Received: (at 78621) by debbugs.gnu.org; 29 May 2025 16:50:43 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Thu May 29 12:50:43 2025
Received: from localhost ([127.0.0.1]:38157 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1uKgSo-0001UD-PL
	for submit <at> debbugs.gnu.org; Thu, 29 May 2025 12:50:43 -0400
Received: from mail-vk1-xa2a.google.com ([2607:f8b0:4864:20::a2a]:59648)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
 (Exim 4.84_2) (envelope-from <shipmints@HIDDEN>)
 id 1uKgSm-0001Ta-Nz
 for 78621 <at> debbugs.gnu.org; Thu, 29 May 2025 12:50:41 -0400
Received: by mail-vk1-xa2a.google.com with SMTP id
 71dfb90a1353d-527b70bd90dso376812e0c.3
 for <78621 <at> debbugs.gnu.org>; Thu, 29 May 2025 09:50:40 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=gmail.com; s=20230601; t=1748537435; x=1749142235; 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=Jm0v9Gi4FG896CHXG7b4Wk0+3rY2qnj+kgRAKl9nYJA=;
 b=ag3In9sJm2w7OKEFVpQzP1QCukCOpqOMuprlB8niDVcnxeX2oCgUPWYsDD3TUuxUeI
 u4GkQcCKM3nXpBna2Yt9h1OHQ9oNactdxtPPLiFPJ/IR9RamOCkJyMRxnOOT48tY9aBT
 EkCsxsJFVE4qrpYNVDHJf/JjaB2IpzAmLGJvQpk2Zw2I2v7OOaGLLR2TAZJcTfbfhvJ0
 A3RUc1/6RANs4VVn61qGEN3/nG44jTX1ceUQ/9bleNxaElsEuvdJDs6G25Gu9Y9hIOOk
 P3J0bpQQHT7a74j2ITe4I8meCTcxXRKxd5v9OuvQ0vDYvctk+WSY31POGhwm32cji+nq
 q7tQ==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20230601; t=1748537435; x=1749142235;
 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=Jm0v9Gi4FG896CHXG7b4Wk0+3rY2qnj+kgRAKl9nYJA=;
 b=Dz8fL8gfTkszeOW6onY8dfElk9qfhoXD6uvaOO1mVKpU+43nck9XJsnAjPJBcRsDzL
 Dqt7rAo6D9bHy/Tb/qAfEc+pMXhAgev7CXdSaztUxY9JgT8ELpqUTCy8I3GB56dvXO2H
 d4vgO0mgUn2nRBEdlPNB1Pe8M9s+k/Mbp4e4AUusRITfGaSvidF82vL8pC90sosWn9tp
 k+Il5NVlsHXrhZTLUGY0bKbFEhXCzO21IRPz05Qs1sx3AjP5DpdfBx6Y6kEmaUim2h70
 iBy438KxYIT4ecROdYu809K7jOvztJHGtCP2+vW77H+3qncSMC3izZVEcZ7XHZgrTSXC
 aqRQ==
X-Forwarded-Encrypted: i=1;
 AJvYcCVfL4Y5ZJxsnxZZX8Uqoc3U4OpYW6cuGJgm6m3eQUP7Nyoi+etudiNV5YwYkS9pqztr3i8RJg==@debbugs.gnu.org
X-Gm-Message-State: AOJu0Yx6hbnNNBx3n1Q796EBA2Is/V/2kbWhiZiMtKkQmp6Mht+tJPCP
 +xctICnoDjNO88KQgvOqtuEvNA4azS8/FnSGbc6Q7pJbxPzTJg1YHAVeq/48+DAdWeqoEK42Qfz
 kvKR6CgKC/tdxl+K/4Oajc0B1W4tRPrI=
X-Gm-Gg: ASbGncvIGDBTltkVoVXHnGWW4lh0iuoor8O106o5DMbvkFrm9wQKhf4RyhgAIRH49xZ
 2OJowbdbXx+0S141z4hygecAa4LrMmmKesy/6tehiEa1hbcVesl3VMyjudVqkEJvuLBm/OA0eVR
 PcaN6PswklNrCVGWlCMKJJ8sjJfmKGYfSgFvE=
X-Google-Smtp-Source: AGHT+IF2cTg/M3COo7h3U70iH5Ld1f9uhlWMtXrLf9Q5mLQETe14WDXLSLdUBYj/j0v/gZrFm1PS95ZoWF9Hje5uGH0=
X-Received: by 2002:a05:6122:2a50:b0:518:6286:87a4 with SMTP id
 71dfb90a1353d-53080f9ff0amr192591e0c.4.1748537434826; Thu, 29 May 2025
 09:50:34 -0700 (PDT)
MIME-Version: 1.0
References: <CAN+1HbqjV7tVbyz0rRMBvXHC+u1nL59X--m8KxuKwvvKhuXY7A@HIDDEN>
 <7733aaf3-920b-8fe2-d02a-ab1a213f0cb6@HIDDEN>
 <CAN+1HbqHU-3P_QpQ6gxWQRx4_q6QE_ZVhZTyhhAD1e13R5hxUQ@HIDDEN>
 <6bd9d4d1-a24c-80f2-1d9a-a7b6dbc8e559@HIDDEN>
 <CAN+1HbpUZy5yeK0Ce1KJ0zvaEZMCSQEutDy1rJ_dvSVOnqUPOw@HIDDEN>
 <CAN+1HboiHSNVQ4tOG_-6acxtm1gswqMm0B=fYXTySUeBA9Oi=w@HIDDEN>
 <CAN+1Hbp52otHmBv9CJkaT-4XLHUOQOZb3JO+Ae5u3fNgwHTzRA@HIDDEN>
 <31ab34c5-4c3b-4167-4a81-e336978a198b@HIDDEN> <86wma0uegn.fsf@HIDDEN>
 <1d0749c2-873e-a502-f1c9-033ee9ba4ff3@HIDDEN>
 <CAN+1Hbrpc3+829M9exGWDvOPZ-LCD+o9BL2k22aHhwwxcHUrgA@HIDDEN>
In-Reply-To: <CAN+1Hbrpc3+829M9exGWDvOPZ-LCD+o9BL2k22aHhwwxcHUrgA@HIDDEN>
From: Ship Mints <shipmints@HIDDEN>
Date: Thu, 29 May 2025 12:50:22 -0400
X-Gm-Features: AX0GCFsEbEQAWc5BqsaUXxn5xsF4kxLKCFHapmtahSsuI5-SkfTzci43t0rCPnM
Message-ID: <CAN+1HbpzhGjSe9k2R9DA=ZyupBPL+ZrYYoQDyZq1AJQE=L8YaA@HIDDEN>
Subject: Re: bug#78621: Pixelwise display specified spaces less precise than
 min-width
To: Jim Porter <jporterbugs@HIDDEN>
Content-Type: multipart/alternative; boundary="000000000000adee3e0636491869"
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 78621
Cc: Eli Zaretskii <eliz@HIDDEN>, 78621 <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 (-)

--000000000000adee3e0636491869
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

tags 78621 notabug
close 78621

On Thu, May 29, 2025 at 12:41=E2=80=AFPM Ship Mints <shipmints@HIDDEN> w=
rote:

> On Thu, May 29, 2025 at 12:38=E2=80=AFPM Jim Porter <jporterbugs@HIDDEN=
m> wrote:
>
>> On 5/28/2025 11:18 PM, Eli Zaretskii wrote:
>> > I don't follow this argument.  string-pixel-width uses the display
>> > code, so it should return the exact same value in pixels as what the
>> > actual display produces when the same characters are shown on the
>> > screen.  So whatever rounding happens (which I don't think it does,
>> > since font glyphs have integer advance width), it happens the same in
>> > both cases and should yield the same values.  Or what am I missing?
>>
>> The short version is that we should pass the current buffer to
>> 'string-pixel-width' so that we can just use the display code to compute
>> the string's width with all the remappings applied, rather than having
>> the display code compute it without remappings and then trying to guess
>> what the remapping would do to the width.
>>
>> Here's a longer version if it helps:
>>
>> The problem is that 'text-scale-increase' modifies the text size by a
>> particular ratio; when zooming out by one step, that defaults to 1 /
>> text-scale-mode-step, or 5/6.
>>
>> My fixed-pitch font is 8 pixels wide at the default size, so zooming out
>> one step means the pixel width per char is 8 * 5/6 =3D 6.666. Since the
>> advance width is an integer, we round up to 7 pixels. The original code
>> works for fixed-pitch fonts since '(default-font-width)' returns 7 in
>> this case, so the original expression:
>>
>>    (ceiling (* (string-pixel-width str)
>>                (/ (float (default-font-width)) (frame-char-width))))
>>
>> is equivalent (only in this simple case) to:
>>
>>    (* (string-width str) (default-font-width))
>>
>> Hopefully that all makes sense.
>>
>> For variable-pitch fonts, this is more complex. Our zoom ratio is still
>> 5/6, but we apply that ratio per-character, rounding each time. For the
>> string "hi there", the pixel widths of each character are:
>>
>>    Scale   h  i  _  t  h  e  r  e   Total
>>        0   8  4  4  5  8  8  5  8      50
>>       -1   7  3  4  4  7  7  5  7      44
>>
>> Since the error introduced by rounding each character is a bit
>> different, we get a different result between the width from the display
>> engine compared to the approximation in the first expression above where
>> we round only once at the very end.
>>
>
> Yes, indeed.  No more estimation.  Just use the display engine directly.
>

--000000000000adee3e0636491869
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr"><div class=3D"gmail_default" style=3D"font-family:monospac=
e">tags=C2=A078621 notabug</div><div class=3D"gmail_default" style=3D"font-=
family:monospace">close 78621</div></div><br><div class=3D"gmail_quote gmai=
l_quote_container"><div dir=3D"ltr" class=3D"gmail_attr">On Thu, May 29, 20=
25 at 12:41=E2=80=AFPM Ship Mints &lt;<a href=3D"mailto:shipmints@HIDDEN=
">shipmints@HIDDEN</a>&gt; wrote:<br></div><blockquote class=3D"gmail_qu=
ote" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,20=
4);padding-left:1ex"><div dir=3D"ltr"><div dir=3D"ltr"><div class=3D"gmail_=
default" style=3D"font-family:monospace"><span style=3D"font-family:Arial,H=
elvetica,sans-serif">On Thu, May 29, 2025 at 12:38=E2=80=AFPM Jim Porter &l=
t;<a href=3D"mailto:jporterbugs@HIDDEN" target=3D"_blank">jporterbugs@gm=
ail.com</a>&gt; wrote:</span></div></div><div class=3D"gmail_quote"><blockq=
uote class=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8ex;border-left:1p=
x solid rgb(204,204,204);padding-left:1ex">On 5/28/2025 11:18 PM, Eli Zaret=
skii wrote:<br>
&gt; I don&#39;t follow this argument.=C2=A0 string-pixel-width uses the di=
splay<br>
&gt; code, so it should return the exact same value in pixels as what the<b=
r>
&gt; actual display produces when the same characters are shown on the<br>
&gt; screen.=C2=A0 So whatever rounding happens (which I don&#39;t think it=
 does,<br>
&gt; since font glyphs have integer advance width), it happens the same in<=
br>
&gt; both cases and should yield the same values.=C2=A0 Or what am I missin=
g?<br>
<br>
The short version is that we should pass the current buffer to <br>
&#39;string-pixel-width&#39; so that we can just use the display code to co=
mpute <br>
the string&#39;s width with all the remappings applied, rather than having =
<br>
the display code compute it without remappings and then trying to guess <br=
>
what the remapping would do to the width.<br>
<br>
Here&#39;s a longer version if it helps:<br>
<br>
The problem is that &#39;text-scale-increase&#39; modifies the text size by=
 a <br>
particular ratio; when zooming out by one step, that defaults to 1 / <br>
text-scale-mode-step, or 5/6.<br>
<br>
My fixed-pitch font is 8 pixels wide at the default size, so zooming out <b=
r>
one step means the pixel width per char is 8 * 5/6 =3D 6.666. Since the <br=
>
advance width is an integer, we round up to 7 pixels. The original code <br=
>
works for fixed-pitch fonts since &#39;(default-font-width)&#39; returns 7 =
in <br>
this case, so the original expression:<br>
<br>
=C2=A0 =C2=A0(ceiling (* (string-pixel-width str)<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(/ (float (default-f=
ont-width)) (frame-char-width))))<br>
<br>
is equivalent (only in this simple case) to:<br>
<br>
=C2=A0 =C2=A0(* (string-width str) (default-font-width))<br>
<br>
Hopefully that all makes sense.<br>
<br>
For variable-pitch fonts, this is more complex. Our zoom ratio is still <br=
>
5/6, but we apply that ratio per-character, rounding each time. For the <br=
>
string &quot;hi there&quot;, the pixel widths of each character are:<br>
<br>
=C2=A0 =C2=A0Scale=C2=A0 =C2=A0h=C2=A0 i=C2=A0 _=C2=A0 t=C2=A0 h=C2=A0 e=C2=
=A0 r=C2=A0 e=C2=A0 =C2=A0Total<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A00=C2=A0 =C2=A08=C2=A0 4=C2=A0 4=C2=A0 5=C2=A0 8=
=C2=A0 8=C2=A0 5=C2=A0 8=C2=A0 =C2=A0 =C2=A0 50<br>
=C2=A0 =C2=A0 =C2=A0 -1=C2=A0 =C2=A07=C2=A0 3=C2=A0 4=C2=A0 4=C2=A0 7=C2=A0=
 7=C2=A0 5=C2=A0 7=C2=A0 =C2=A0 =C2=A0 44<br>
<br>
Since the error introduced by rounding each character is a bit <br>
different, we get a different result between the width from the display <br=
>
engine compared to the approximation in the first expression above where <b=
r>
we round only once at the very end.<br></blockquote><div><br></div><div cla=
ss=3D"gmail_default" style=3D"font-family:monospace">Yes, indeed.=C2=A0 No =
more estimation.=C2=A0 Just use the display engine directly.</div></div></d=
iv>
</blockquote></div>

--000000000000adee3e0636491869--




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#78621; Package emacs. Full text available.

Message received at 78621 <at> debbugs.gnu.org:


Received: (at 78621) by debbugs.gnu.org; 29 May 2025 16:42:04 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Thu May 29 12:42:04 2025
Received: from localhost ([127.0.0.1]:38080 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1uKgKS-0006J5-5M
	for submit <at> debbugs.gnu.org; Thu, 29 May 2025 12:42:04 -0400
Received: from mail-vk1-xa2f.google.com ([2607:f8b0:4864:20::a2f]:47423)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
 (Exim 4.84_2) (envelope-from <shipmints@HIDDEN>)
 id 1uKgKP-0006IF-T4
 for 78621 <at> debbugs.gnu.org; Thu, 29 May 2025 12:42:02 -0400
Received: by mail-vk1-xa2f.google.com with SMTP id
 71dfb90a1353d-51eb1a714bfso695737e0c.3
 for <78621 <at> debbugs.gnu.org>; Thu, 29 May 2025 09:42:01 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=gmail.com; s=20230601; t=1748536916; x=1749141716; 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=ng+rLGgv0qIQLPZuDPaOUBow0EEny9qbEjBYQiDmHC0=;
 b=eWdhT4dQQmbQmnUCPSHlkeJ4LwiyeZOujJW6KF0xz0fqqFibd52XIQykzL+fvgyI2a
 5hmt1pohT/R8kl8UTr0l7wo/0WblD3MqYRQlnSrzvPQnb5NiBKF7EzgLD0CDsWqPPlSX
 tFCNDhDD/KlQbohT8fqCJ8lMMT5WL15ZtUFThgIAIRRo3RdWJUJwvJMMmh1lHDkPPtIs
 9wrt46xbAFon3eY3UwbwHG0QFzldJdRs/LBB1E13pN6WD6fZp6IKJtwSyGzZf/VVb1n5
 wPEMMTEJ3t+KZ8MK76EvhJtKwIMYgN8ClUsVL01O3STQGhsG0I1Md+6K+VMn79RiJx7p
 c2wA==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20230601; t=1748536916; x=1749141716;
 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=ng+rLGgv0qIQLPZuDPaOUBow0EEny9qbEjBYQiDmHC0=;
 b=WuGYSYjF0uqNQ5A/Bs8N9GxUhyhi9tbTQJkXrmv/BEwYeghNPHihUWSQyTNi0814hg
 DWtXndmIlDVJKC9yRvTBPJCZf2eke2qb8oA5EbnrBGFYwfFeoqppKGMivTFavbcwdVv+
 nHiZiI9t5hpQ1nPosi7mYgCQLYZ4bUcK4rc2GpUfDXJLkQiCSlrqhpuTZ0OCXse/jz2j
 uIbxiyZXrgDzvI7pFzCTXUhonsmCU6Idl1QpbSrBjwhxltUatlMYshhhJnqGXHEe6uWx
 dem4PRnTkBfTqBuT3/YCPgNzj37YzvE/lCsq2CljHsL8/5a2Iizb+ZCx6AX4Hq49WGtj
 e3XA==
X-Forwarded-Encrypted: i=1;
 AJvYcCV7mMOHARcH+yJvdhYo7mnKBMmTZYBmMlybicAqlmciqBD7KuCH6FUFkgxvedrmWG1g+ZhWIA==@debbugs.gnu.org
X-Gm-Message-State: AOJu0YznHYMhlGInT65PGXN75nOUQU42g1OcY7LvMTybc3F2tNybTw99
 uY7SNPadXmv7uKFbd49ztSekSXDADxqzTFsQhJJVQf5YvV5yhp/Pj1UW8EtHK0Y1VQ3GKgIPDqY
 Q3AztqFc9MyaB+Ek+YsCtYp3fsyTiXNJxtw==
X-Gm-Gg: ASbGnct65xB4vwQepoxyqVt8b/mpTlbI6jG20yrDF3nc3W3g12aWTGh0oehqDI4fIgV
 BMbny11yRWLQpbtwGdrWWpBAWIyAvC2e0MgneE3MC1d+9oBLcXuKmId8aeQMeeLprVJ15bLKlie
 JEJ+DvBaZ8JYNkEw7ok7V+PVrDhVvDfIIPF6U=
X-Google-Smtp-Source: AGHT+IFcfW+tOwv6VT3Xi3+A8ej2IxSM4SHgIMjt2X1hvMV/xAABSfclB/zBd4yQZmyFqDgAfx7jy7XAAjqRl1z8HfA=
X-Received: by 2002:a05:6122:17a1:b0:530:65f0:7fd4 with SMTP id
 71dfb90a1353d-53080f57ffamr192637e0c.2.1748536916158; Thu, 29 May 2025
 09:41:56 -0700 (PDT)
MIME-Version: 1.0
References: <CAN+1HbqjV7tVbyz0rRMBvXHC+u1nL59X--m8KxuKwvvKhuXY7A@HIDDEN>
 <7733aaf3-920b-8fe2-d02a-ab1a213f0cb6@HIDDEN>
 <CAN+1HbqHU-3P_QpQ6gxWQRx4_q6QE_ZVhZTyhhAD1e13R5hxUQ@HIDDEN>
 <6bd9d4d1-a24c-80f2-1d9a-a7b6dbc8e559@HIDDEN>
 <CAN+1HbpUZy5yeK0Ce1KJ0zvaEZMCSQEutDy1rJ_dvSVOnqUPOw@HIDDEN>
 <CAN+1HboiHSNVQ4tOG_-6acxtm1gswqMm0B=fYXTySUeBA9Oi=w@HIDDEN>
 <CAN+1Hbp52otHmBv9CJkaT-4XLHUOQOZb3JO+Ae5u3fNgwHTzRA@HIDDEN>
 <31ab34c5-4c3b-4167-4a81-e336978a198b@HIDDEN> <86wma0uegn.fsf@HIDDEN>
 <1d0749c2-873e-a502-f1c9-033ee9ba4ff3@HIDDEN>
In-Reply-To: <1d0749c2-873e-a502-f1c9-033ee9ba4ff3@HIDDEN>
From: Ship Mints <shipmints@HIDDEN>
Date: Thu, 29 May 2025 12:41:45 -0400
X-Gm-Features: AX0GCFsv8XrkjyjxhCa2p167SWyGPUhjzMKOagGBKLMcNvjTTjJOtfyPQhkepWo
Message-ID: <CAN+1Hbrpc3+829M9exGWDvOPZ-LCD+o9BL2k22aHhwwxcHUrgA@HIDDEN>
Subject: Re: bug#78621: Pixelwise display specified spaces less precise than
 min-width
To: Jim Porter <jporterbugs@HIDDEN>
Content-Type: multipart/alternative; boundary="000000000000c3acbb063648f9dc"
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 78621
Cc: Eli Zaretskii <eliz@HIDDEN>, 78621 <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 (-)

--000000000000c3acbb063648f9dc
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

On Thu, May 29, 2025 at 12:38=E2=80=AFPM Jim Porter <jporterbugs@HIDDEN>=
 wrote:

> On 5/28/2025 11:18 PM, Eli Zaretskii wrote:
> > I don't follow this argument.  string-pixel-width uses the display
> > code, so it should return the exact same value in pixels as what the
> > actual display produces when the same characters are shown on the
> > screen.  So whatever rounding happens (which I don't think it does,
> > since font glyphs have integer advance width), it happens the same in
> > both cases and should yield the same values.  Or what am I missing?
>
> The short version is that we should pass the current buffer to
> 'string-pixel-width' so that we can just use the display code to compute
> the string's width with all the remappings applied, rather than having
> the display code compute it without remappings and then trying to guess
> what the remapping would do to the width.
>
> Here's a longer version if it helps:
>
> The problem is that 'text-scale-increase' modifies the text size by a
> particular ratio; when zooming out by one step, that defaults to 1 /
> text-scale-mode-step, or 5/6.
>
> My fixed-pitch font is 8 pixels wide at the default size, so zooming out
> one step means the pixel width per char is 8 * 5/6 =3D 6.666. Since the
> advance width is an integer, we round up to 7 pixels. The original code
> works for fixed-pitch fonts since '(default-font-width)' returns 7 in
> this case, so the original expression:
>
>    (ceiling (* (string-pixel-width str)
>                (/ (float (default-font-width)) (frame-char-width))))
>
> is equivalent (only in this simple case) to:
>
>    (* (string-width str) (default-font-width))
>
> Hopefully that all makes sense.
>
> For variable-pitch fonts, this is more complex. Our zoom ratio is still
> 5/6, but we apply that ratio per-character, rounding each time. For the
> string "hi there", the pixel widths of each character are:
>
>    Scale   h  i  _  t  h  e  r  e   Total
>        0   8  4  4  5  8  8  5  8      50
>       -1   7  3  4  4  7  7  5  7      44
>
> Since the error introduced by rounding each character is a bit
> different, we get a different result between the width from the display
> engine compared to the approximation in the first expression above where
> we round only once at the very end.
>

Yes, indeed.  No more estimation.  Just use the display engine directly.

--000000000000c3acbb063648f9dc
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr"><div dir=3D"ltr"><div class=3D"gmail_default" style=3D"fon=
t-family:monospace"><span style=3D"font-family:Arial,Helvetica,sans-serif">=
On Thu, May 29, 2025 at 12:38=E2=80=AFPM Jim Porter &lt;<a href=3D"mailto:j=
porterbugs@HIDDEN">jporterbugs@HIDDEN</a>&gt; wrote:</span></div></di=
v><div class=3D"gmail_quote gmail_quote_container"><blockquote class=3D"gma=
il_quote" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,2=
04,204);padding-left:1ex">On 5/28/2025 11:18 PM, Eli Zaretskii wrote:<br>
&gt; I don&#39;t follow this argument.=C2=A0 string-pixel-width uses the di=
splay<br>
&gt; code, so it should return the exact same value in pixels as what the<b=
r>
&gt; actual display produces when the same characters are shown on the<br>
&gt; screen.=C2=A0 So whatever rounding happens (which I don&#39;t think it=
 does,<br>
&gt; since font glyphs have integer advance width), it happens the same in<=
br>
&gt; both cases and should yield the same values.=C2=A0 Or what am I missin=
g?<br>
<br>
The short version is that we should pass the current buffer to <br>
&#39;string-pixel-width&#39; so that we can just use the display code to co=
mpute <br>
the string&#39;s width with all the remappings applied, rather than having =
<br>
the display code compute it without remappings and then trying to guess <br=
>
what the remapping would do to the width.<br>
<br>
Here&#39;s a longer version if it helps:<br>
<br>
The problem is that &#39;text-scale-increase&#39; modifies the text size by=
 a <br>
particular ratio; when zooming out by one step, that defaults to 1 / <br>
text-scale-mode-step, or 5/6.<br>
<br>
My fixed-pitch font is 8 pixels wide at the default size, so zooming out <b=
r>
one step means the pixel width per char is 8 * 5/6 =3D 6.666. Since the <br=
>
advance width is an integer, we round up to 7 pixels. The original code <br=
>
works for fixed-pitch fonts since &#39;(default-font-width)&#39; returns 7 =
in <br>
this case, so the original expression:<br>
<br>
=C2=A0 =C2=A0(ceiling (* (string-pixel-width str)<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(/ (float (default-f=
ont-width)) (frame-char-width))))<br>
<br>
is equivalent (only in this simple case) to:<br>
<br>
=C2=A0 =C2=A0(* (string-width str) (default-font-width))<br>
<br>
Hopefully that all makes sense.<br>
<br>
For variable-pitch fonts, this is more complex. Our zoom ratio is still <br=
>
5/6, but we apply that ratio per-character, rounding each time. For the <br=
>
string &quot;hi there&quot;, the pixel widths of each character are:<br>
<br>
=C2=A0 =C2=A0Scale=C2=A0 =C2=A0h=C2=A0 i=C2=A0 _=C2=A0 t=C2=A0 h=C2=A0 e=C2=
=A0 r=C2=A0 e=C2=A0 =C2=A0Total<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A00=C2=A0 =C2=A08=C2=A0 4=C2=A0 4=C2=A0 5=C2=A0 8=
=C2=A0 8=C2=A0 5=C2=A0 8=C2=A0 =C2=A0 =C2=A0 50<br>
=C2=A0 =C2=A0 =C2=A0 -1=C2=A0 =C2=A07=C2=A0 3=C2=A0 4=C2=A0 4=C2=A0 7=C2=A0=
 7=C2=A0 5=C2=A0 7=C2=A0 =C2=A0 =C2=A0 44<br>
<br>
Since the error introduced by rounding each character is a bit <br>
different, we get a different result between the width from the display <br=
>
engine compared to the approximation in the first expression above where <b=
r>
we round only once at the very end.<br></blockquote><div><br></div><div cla=
ss=3D"gmail_default" style=3D"font-family:monospace">Yes, indeed.=C2=A0 No =
more estimation.=C2=A0 Just use the display engine directly.</div></div></d=
iv>

--000000000000c3acbb063648f9dc--




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#78621; Package emacs. Full text available.

Message received at 78621 <at> debbugs.gnu.org:


Received: (at 78621) by debbugs.gnu.org; 29 May 2025 16:41:32 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Thu May 29 12:41:32 2025
Received: from localhost ([127.0.0.1]:38074 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1uKgJv-0006HM-8g
	for submit <at> debbugs.gnu.org; Thu, 29 May 2025 12:41:31 -0400
Received: from mail-ua1-x930.google.com ([2607:f8b0:4864:20::930]:58767)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
 (Exim 4.84_2) (envelope-from <shipmints@HIDDEN>)
 id 1uKgJt-0006Gy-2i
 for 78621 <at> debbugs.gnu.org; Thu, 29 May 2025 12:41:29 -0400
Received: by mail-ua1-x930.google.com with SMTP id
 a1e0cc1a2514c-87de8a14cd7so335437241.1
 for <78621 <at> debbugs.gnu.org>; Thu, 29 May 2025 09:41:29 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=gmail.com; s=20230601; t=1748536883; x=1749141683; 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=GUejABqQd6/OQYLBXK6lMbjpXT8IrqDt3GQ1PXt0Rg8=;
 b=TxYcesxT9Ck1CpZK92k6CWvhCQqN4Y154nhO0edTvFnBGJJlp9RuFFtgEcxVAgDIDz
 /Fcc6LH1JOPGFDOowKcS6fIfy9m0gsczKpBo7EYC3b9pwpl6bOLTRISfQnHdp9XMxA7/
 rWn76X5Iqwwf6L9PV0R3UHGyWGBjMyrhsRZOuqSsOYbuCnELWW03SI8vNLx0wpTrVQpu
 tyw+udZ7eZj1nyRsRdkHNRSeoS2NCJdXH3i7cP/zv4a/MsbzWhBjrbxBwDrgLvzifI9a
 oqhMEjOE/bjHZDjLgyzVM8c9acEN5J2jErusERdleXgQWSatbi7rvYPI9J0AtrcOBlVD
 SVLw==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20230601; t=1748536883; x=1749141683;
 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=GUejABqQd6/OQYLBXK6lMbjpXT8IrqDt3GQ1PXt0Rg8=;
 b=SRBETF7AsXZ1GA15zgTluT4jwBrDTuJuEkhdwLTmqwbvf/psPMPiANnq1Uyauzv4Cu
 DNu/4ornTSJgdwc7wTAZfkYbfF/VmdlxuhbmwFpWu/dSX2krbb6/A9bUjAlf85F6KFB0
 k555lvXBdtUsdtqGM2u9JOR6YPWPWLBE7FaLy17PZCOyIsoLvDgNfSoNagV8O7CEhS82
 eiRK87Hqw14X4uNDChm7w0vPMsyHZEk+E2aNQevPjvMUxoDQXGV9UuU5NJLNs/ToKvBs
 nk6AxIxSgpyxcnrq5f2RXDr3fooYIF3q+fhlpuQAyCC1Oi0ABz92zoW0luXVkdFk1tYW
 gpZA==
X-Forwarded-Encrypted: i=1;
 AJvYcCX1Bp90UB//rhz9izhUZMkXkVHcfZlhUYTO91v9vS2d0yj61KkmEJO4pwLsdW/P6mkXy/F5Bw==@debbugs.gnu.org
X-Gm-Message-State: AOJu0YzhtfpXrur/1GHO7LEwyfG5v9k0P/aW4uQqw+VvbV6/ObwBRnFp
 OlFCJ3Bh7V0RWX/nnWkJc1m4qg6sne3mXn/LKDNSaL79kz++43CYt0cZZ3G7m3yU++XxqDW1d6A
 1hhmzO2esbOcHw0cvY8iVaRqdwq9e8oc=
X-Gm-Gg: ASbGncuUDli5pJZX7aYeVf5pH8V84P8+zsOBpYdIzOlkBrfT/hDN/lBcRsSalrRMMJ1
 Mv33dPxlJXnspP5vvI54tUWtQDKbmknBkJ7NeyopwNDy3lndU7SnHpHYOK4S6Sl1Jn72a6nti9T
 hKRsF+0SBHRDVMAUCYudTb0K/w9Un+yY/h43U=
X-Google-Smtp-Source: AGHT+IHnu0UufZ1bT7kcLdQQ5p6/vSaZLfReXH51XvxuOe+oJE3HsVsaYG6HHfBVP9YkklktM02C0ZPFzupliWfdn0I=
X-Received: by 2002:a05:6122:2a50:b0:518:6286:87a4 with SMTP id
 71dfb90a1353d-53080f9ff0amr154331e0c.4.1748536883241; Thu, 29 May 2025
 09:41:23 -0700 (PDT)
MIME-Version: 1.0
References: <CAN+1HbqjV7tVbyz0rRMBvXHC+u1nL59X--m8KxuKwvvKhuXY7A@HIDDEN>
 <7733aaf3-920b-8fe2-d02a-ab1a213f0cb6@HIDDEN>
 <CAN+1HbqHU-3P_QpQ6gxWQRx4_q6QE_ZVhZTyhhAD1e13R5hxUQ@HIDDEN>
 <861ps8vtk4.fsf@HIDDEN>
In-Reply-To: <861ps8vtk4.fsf@HIDDEN>
From: Ship Mints <shipmints@HIDDEN>
Date: Thu, 29 May 2025 12:41:11 -0400
X-Gm-Features: AX0GCFurYGJSv1mdn0bjXNu9yPutXL40VNPqkrmUh-BxkkRxIFML42FfVDQuZck
Message-ID: <CAN+1HboELLQROFQetHav-Y2WYjKS=t=M-94H9YRv+On=SakS7g@HIDDEN>
Subject: Re: bug#78621: Pixelwise display specified spaces less precise than
 min-width
To: Eli Zaretskii <eliz@HIDDEN>
Content-Type: multipart/alternative; boundary="000000000000cd66e4063648f7ea"
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 78621
Cc: jporterbugs@HIDDEN, 78621 <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 (-)

--000000000000cd66e4063648f7ea
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

On Thu, May 29, 2025 at 2:07=E2=80=AFAM Eli Zaretskii <eliz@HIDDEN> wrote:

> > Cc: 78621 <at> debbugs.gnu.org
> > From: Ship Mints <shipmints@HIDDEN>
> > Date: Wed, 28 May 2025 16:40:26 -0400
> >
> > On Wed, May 28, 2025 at 4:14=E2=80=AFPM Jim Porter <jporterbugs@HIDDEN=
om>
> wrote:
> >
> >  On 5/28/2025 12:44 PM, Ship Mints wrote:
> >  > You can see this in text-scaled buffers when attempting to pad a
> string
> >  > to a specific pixel boundary.  If a pixelwise specified-width space
> is
> >  > inserted after a string with variable-pitch glyphs, it doesn't honor
> the
> >  > net pixel width.  That same string padded using min-width with the
> same
> >  > number of pixels works fine.
> >
> >  Are you sure that your implementation of 'string-pixel-width-scaled' i=
s
> >  correct? From a brief look, I'd expect that you get some jitter when
> >  dividing '(default-font-width)' by '(frame-char-width)', since both ar=
e
> >  rounded to the nearest whole number.
> >
> >  If I instead replace that call with:
> >
> >     (string-pixel-width str (current-buffer))
> >
> >  then everything looks ok to me. As of Emacs 31, passing a buffer does
> this:
> >
> >     If BUFFER is non-nil, use the face remappings, alternative and
> default
> >     properties from that buffer when determining the width.
> >
> >  That should handle all the necessary work to get the string width afte=
r
> >  applying text-scale remappings. I added that argument so I could use i=
t
> >  in 'visual-wrap-prefix-mode' for a very similar issue you're seeing.
> See
> >  commit f70a6ea0ea86ef461e40d20664a75a92d02679ea.
> >
> > Thanks for that.  I think I'm using that in other places.
> >
> > But... Did you run the repro in question and it worked for you, or are
> you saying that this worked for your
> > case?
> >
> > AFAICT, the repro demonstrates a different issue.  With the identical
> string-pixel-width, padding using
> > specified-width spaces vs. min-width behave differently, so this isn't
> due to jitter as the widths used are the
> > same for both cases.
>
> I tried your recipe in Emacs 31.  The variable-pitch text indeed
> doesn't align, but the reason seems to be that the WIDTH value of
> '(space :width WIDTH)' display property is miscalculated.  In my case
> the :min-width spec has the value (150), i.e. 150 pixels, as expected,
> whereas in the '(space :width WIDTH)' spec WIDTH is (66) while the
> width of the text "f:0123456789" on display is 72 pixels (measured
> with posn-at-point).  So the sum is 72 + 66 =3D 138 pixels, not 150.
>
> The question is why is the value miscalculated.  Perhaps
> string-pixel-width-scaled doesn't do its job reliably with
> variable-pitch fonts?  I didn't have time to explore deeper, since you
> guys seem to be looking into that already.  Let me know if you find
> something unexpected or need my further help.
>

Indeed the two methods used in core Emacs to adjust widths in text-scaled
buffers do not work reliably with variable-pitch fonts.

  (/ (float (default-font-width)) (frame-char-width))
  (expt text-scale-mode-step text-scale-mode-amount)

I will now rely solely on 'string-pixel-width' specifying the reference
buffer from which the display engine can derive the text scale.

In the end, this was an experiment gone wonky, a nonbug, and now solved.

Thanks, all,

-Stephane

--000000000000cd66e4063648f7ea
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr"><div dir=3D"ltr"><div class=3D"gmail_default" style=3D"fon=
t-family:monospace"><span style=3D"font-family:Arial,Helvetica,sans-serif">=
On Thu, May 29, 2025 at 2:07=E2=80=AFAM Eli Zaretskii &lt;<a href=3D"mailto=
:eliz@HIDDEN">eliz@HIDDEN</a>&gt; wrote:</span></div></div><div class=3D"=
gmail_quote gmail_quote_container"><blockquote class=3D"gmail_quote" style=
=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding=
-left:1ex">&gt; Cc: <a href=3D"mailto:78621 <at> debbugs.gnu.org" target=3D"_bla=
nk">78621 <at> debbugs.gnu.org</a><br>
&gt; From: Ship Mints &lt;<a href=3D"mailto:shipmints@HIDDEN" target=3D"=
_blank">shipmints@HIDDEN</a>&gt;<br>
&gt; Date: Wed, 28 May 2025 16:40:26 -0400<br>
&gt; <br>
&gt; On Wed, May 28, 2025 at 4:14=E2=80=AFPM Jim Porter &lt;<a href=3D"mail=
to:jporterbugs@HIDDEN" target=3D"_blank">jporterbugs@HIDDEN</a>&gt; w=
rote:<br>
&gt; <br>
&gt;=C2=A0 On 5/28/2025 12:44 PM, Ship Mints wrote:<br>
&gt;=C2=A0 &gt; You can see this in text-scaled buffers when attempting to =
pad a string <br>
&gt;=C2=A0 &gt; to a specific pixel boundary.=C2=A0 If a pixelwise specifie=
d-width space is <br>
&gt;=C2=A0 &gt; inserted after a string with variable-pitch glyphs, it does=
n&#39;t honor the <br>
&gt;=C2=A0 &gt; net pixel width.=C2=A0 That same string padded using min-wi=
dth with the same <br>
&gt;=C2=A0 &gt; number of pixels works fine.<br>
&gt; <br>
&gt;=C2=A0 Are you sure that your implementation of &#39;string-pixel-width=
-scaled&#39; is <br>
&gt;=C2=A0 correct? From a brief look, I&#39;d expect that you get some jit=
ter when <br>
&gt;=C2=A0 dividing &#39;(default-font-width)&#39; by &#39;(frame-char-widt=
h)&#39;, since both are <br>
&gt;=C2=A0 rounded to the nearest whole number.<br>
&gt; <br>
&gt;=C2=A0 If I instead replace that call with:<br>
&gt; <br>
&gt;=C2=A0 =C2=A0 =C2=A0(string-pixel-width str (current-buffer))<br>
&gt; <br>
&gt;=C2=A0 then everything looks ok to me. As of Emacs 31, passing a buffer=
 does this:<br>
&gt; <br>
&gt;=C2=A0 =C2=A0 =C2=A0If BUFFER is non-nil, use the face remappings, alte=
rnative and default<br>
&gt;=C2=A0 =C2=A0 =C2=A0properties from that buffer when determining the wi=
dth.<br>
&gt; <br>
&gt;=C2=A0 That should handle all the necessary work to get the string widt=
h after <br>
&gt;=C2=A0 applying text-scale remappings. I added that argument so I could=
 use it <br>
&gt;=C2=A0 in &#39;visual-wrap-prefix-mode&#39; for a very similar issue yo=
u&#39;re seeing. See <br>
&gt;=C2=A0 commit f70a6ea0ea86ef461e40d20664a75a92d02679ea.<br>
&gt; <br>
&gt; Thanks for that.=C2=A0 I think I&#39;m using that in other places.<br>
&gt; <br>
&gt; But... Did you run the repro in question and it worked for you, or are=
 you saying that this worked for your<br>
&gt; case?<br>
&gt; <br>
&gt; AFAICT, the repro demonstrates a different issue.=C2=A0 With the ident=
ical string-pixel-width, padding using<br>
&gt; specified-width spaces vs. min-width behave differently, so this isn&#=
39;t due to jitter as the widths used are the<br>
&gt; same for both cases.<br>
<br>
I tried your recipe in Emacs 31.=C2=A0 The variable-pitch text indeed<br>
doesn&#39;t align, but the reason seems to be that the WIDTH value of<br>
&#39;(space :width WIDTH)&#39; display property is miscalculated.=C2=A0 In =
my case<br>
the :min-width spec has the value (150), i.e. 150 pixels, as expected,<br>
whereas in the &#39;(space :width WIDTH)&#39; spec WIDTH is (66) while the<=
br>
width of the text &quot;f:0123456789&quot; on display is 72 pixels (measure=
d<br>
with posn-at-point).=C2=A0 So the sum is 72 + 66 =3D 138 pixels, not 150.<b=
r>
<br>
The question is why is the value miscalculated.=C2=A0 Perhaps<br>
string-pixel-width-scaled doesn&#39;t do its job reliably with<br>
variable-pitch fonts?=C2=A0 I didn&#39;t have time to explore deeper, since=
 you<br>
guys seem to be looking into that already.=C2=A0 Let me know if you find<br=
>
something unexpected or need my further help.<br></blockquote><div><br></di=
v><div class=3D"gmail_default" style=3D"font-family:monospace">Indeed the t=
wo methods used in core Emacs to adjust widths in text-scaled buffers do no=
t work reliably with variable-pitch fonts.</div><div class=3D"gmail_default=
" style=3D"font-family:monospace"><br></div><div class=3D"gmail_default" st=
yle=3D"font-family:monospace">=C2=A0 (/ (float (default-font-width)) (frame=
-char-width))<br>=C2=A0 (expt text-scale-mode-step text-scale-mode-amount)<=
br></div><div class=3D"gmail_default" style=3D"font-family:monospace"><br><=
/div><div class=3D"gmail_default" style=3D"font-family:monospace">I will no=
w rely solely on &#39;string-pixel-width&#39; specifying the reference buff=
er from which the display engine can derive the text scale.</div><div class=
=3D"gmail_default" style=3D"font-family:monospace"><br></div><div class=3D"=
gmail_default" style=3D""><font face=3D"monospace">In the end, this was an =
experiment gone wonky, a nonbug, and now solved.</font></div><div class=3D"=
gmail_default" style=3D""><font face=3D"monospace"><br></font></div><div cl=
ass=3D"gmail_default" style=3D""><font face=3D"monospace">Thanks, all,</fon=
t></div><div class=3D"gmail_default" style=3D""><font face=3D"monospace"><b=
r></font></div><div class=3D"gmail_default" style=3D""><font face=3D"monosp=
ace">-Stephane</font></div></div></div>

--000000000000cd66e4063648f7ea--




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#78621; Package emacs. Full text available.

Message received at 78621 <at> debbugs.gnu.org:


Received: (at 78621) by debbugs.gnu.org; 29 May 2025 16:38:23 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Thu May 29 12:38:23 2025
Received: from localhost ([127.0.0.1]:38049 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1uKgGt-00061M-2f
	for submit <at> debbugs.gnu.org; Thu, 29 May 2025 12:38:23 -0400
Received: from mail-pf1-x431.google.com ([2607:f8b0:4864:20::431]:42255)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
 (Exim 4.84_2) (envelope-from <jporterbugs@HIDDEN>)
 id 1uKgGq-000610-8Y
 for 78621 <at> debbugs.gnu.org; Thu, 29 May 2025 12:38:20 -0400
Received: by mail-pf1-x431.google.com with SMTP id
 d2e1a72fcca58-7398d65476eso850483b3a.1
 for <78621 <at> debbugs.gnu.org>; Thu, 29 May 2025 09:38:20 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=gmail.com; s=20230601; t=1748536694; x=1749141494; darn=debbugs.gnu.org;
 h=content-transfer-encoding:in-reply-to:from:references:cc:to
 :content-language:subject:mime-version:date:message-id:from:to:cc
 :subject:date:message-id:reply-to;
 bh=k972F9Ij0xkB+WyrG0kch7H6Of+mCH74jfXkLZW2/s4=;
 b=lKxF6Ff/WpcfEsOEaOKTybT1uvY5qgYA1wASc80Aqdl8MngciopTkp0B8dtI5YhIqp
 Q4vB1PV12DvJfNmvrcPV2fiTs4f3W4LDWssQ8o1sR6mFZ/VXBObRsYL1E0n7XbDZYdcw
 I33NOuKKDTxCe/pIVNAcUTh+V2JFh0BvhpDJzkS+Ua4DUAuy4WdbB09fLxl1lAhW6iUn
 wWdSpSon56Dh6TJZr4sAUeouNIkJt+5kp8+mhH0S1kAmfSB7W+XYHiFw71V3O908TWJZ
 Qf2sH6e0JFGuoLyD80U3RNQI+cFix6iv2nvagqYyrvwV/lg+sClkonzqz40nthEQv2id
 WG8Q==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20230601; t=1748536694; x=1749141494;
 h=content-transfer-encoding:in-reply-to:from:references:cc:to
 :content-language:subject:mime-version:date:message-id
 :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to;
 bh=k972F9Ij0xkB+WyrG0kch7H6Of+mCH74jfXkLZW2/s4=;
 b=nNkCXbt2WuTEtFXcEpw2Av6C9VAy1PFNSP/6Uc96dXSOt0wOmpaf/jW9W3P3i8Wdf9
 veXhB+wT/tIbfA3SaBli6Y7isnIxfNVI/gpLA5hEO3nATI61tHkTyT80yEuPk2Nwqh2y
 rncQTCzvgPRCt5uuKkddqcDaB76okHGw3+lLb/L9UPYs9hRvButD5yQsMLYyvdnInZEU
 IATnDcJ+xdTP6nTdiOLMgQgNhh5+0ouozQwLZtIGng7x4o+d48dcBSEJuEI57CXtQTUd
 VfIuUiOzYNinK6CsRvaEZoCP9784Tcj74lCT8NxzT5k01JI5zUyrFvaDRlAaUjgWxCxg
 8IZA==
X-Forwarded-Encrypted: i=1;
 AJvYcCXExRi739UOEbFcVPMAPu5qB/XBCJeWp+6ega0i/8eI23AqtVRsWTwkq0kzJG7Qm54ioepzbw==@debbugs.gnu.org
X-Gm-Message-State: AOJu0YykT4cVizWMDo8ow9rKMlcq25VPK7SNnmqRSydv6NNloGvLJta3
 Elvayvw19wsV4xIgnCoc2XshwrWkNdw6UqLknEO95/WLwMw976VFlFK/
X-Gm-Gg: ASbGncu80hO5IHjwrGp+qGSLvS21m6iCFdqH9GD5iJef49KPeF9amxq6oaGSGsYoJD6
 EzlHSNJj5/YNmy81gxv9g7/y7dRFiMeTmeJE0LSnSFz3h9U6FmLxcshDk7w/j1MiMU57wPe0Ez5
 0SGOaZxJFmdneiTKk0suiXDpNc4pZXKBOhrQxLb7F9ZfAW9pFSrg0WTqHjoWdBq/JpBRMSotXzf
 60oXOZy8qrSnhFk/gLs+j1pFUm33LLdodwpRfGupfKQG0qX3GlC3leoEDZe4JshM4YS33CSbDak
 XAenH9lTmZh6Z9K0vL0qOXLMY400xFdhdYuxC3vwH4/dONC0jlHAFNmOBCf3YdhoESlRXVbcuuV
 J2bkYyyY4uz5N+ZzmY7+yEQFQLh5aj7s=
X-Google-Smtp-Source: AGHT+IFo4l13PizInIPI+icBSli+/2SmnX9JzpAsVOOBEuGC7iXJQZNdr6KQUGI3TWwzJkA16Z6BOQ==
X-Received: by 2002:a05:6a00:3d14:b0:742:b9d2:dc8f with SMTP id
 d2e1a72fcca58-747ad443aaemr5283875b3a.1.1748536694075; 
 Thu, 29 May 2025 09:38:14 -0700 (PDT)
Received: from [192.168.1.2] (syn-076-168-144-128.res.spectrum.com.
 [76.168.144.128]) by smtp.googlemail.com with ESMTPSA id
 d2e1a72fcca58-747affafb5dsm1588951b3a.94.2025.05.29.09.38.13
 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128);
 Thu, 29 May 2025 09:38:13 -0700 (PDT)
Message-ID: <1d0749c2-873e-a502-f1c9-033ee9ba4ff3@HIDDEN>
Date: Thu, 29 May 2025 09:38:15 -0700
MIME-Version: 1.0
Subject: Re: bug#78621: Pixelwise display specified spaces less precise than
 min-width
Content-Language: en-US
To: Eli Zaretskii <eliz@HIDDEN>
References: <CAN+1HbqjV7tVbyz0rRMBvXHC+u1nL59X--m8KxuKwvvKhuXY7A@HIDDEN>
 <7733aaf3-920b-8fe2-d02a-ab1a213f0cb6@HIDDEN>
 <CAN+1HbqHU-3P_QpQ6gxWQRx4_q6QE_ZVhZTyhhAD1e13R5hxUQ@HIDDEN>
 <6bd9d4d1-a24c-80f2-1d9a-a7b6dbc8e559@HIDDEN>
 <CAN+1HbpUZy5yeK0Ce1KJ0zvaEZMCSQEutDy1rJ_dvSVOnqUPOw@HIDDEN>
 <CAN+1HboiHSNVQ4tOG_-6acxtm1gswqMm0B=fYXTySUeBA9Oi=w@HIDDEN>
 <CAN+1Hbp52otHmBv9CJkaT-4XLHUOQOZb3JO+Ae5u3fNgwHTzRA@HIDDEN>
 <31ab34c5-4c3b-4167-4a81-e336978a198b@HIDDEN> <86wma0uegn.fsf@HIDDEN>
From: Jim Porter <jporterbugs@HIDDEN>
In-Reply-To: <86wma0uegn.fsf@HIDDEN>
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 7bit
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 78621
Cc: shipmints@HIDDEN, 78621 <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 5/28/2025 11:18 PM, Eli Zaretskii wrote:
> I don't follow this argument.  string-pixel-width uses the display
> code, so it should return the exact same value in pixels as what the
> actual display produces when the same characters are shown on the
> screen.  So whatever rounding happens (which I don't think it does,
> since font glyphs have integer advance width), it happens the same in
> both cases and should yield the same values.  Or what am I missing?

The short version is that we should pass the current buffer to 
'string-pixel-width' so that we can just use the display code to compute 
the string's width with all the remappings applied, rather than having 
the display code compute it without remappings and then trying to guess 
what the remapping would do to the width.

Here's a longer version if it helps:

The problem is that 'text-scale-increase' modifies the text size by a 
particular ratio; when zooming out by one step, that defaults to 1 / 
text-scale-mode-step, or 5/6.

My fixed-pitch font is 8 pixels wide at the default size, so zooming out 
one step means the pixel width per char is 8 * 5/6 = 6.666. Since the 
advance width is an integer, we round up to 7 pixels. The original code 
works for fixed-pitch fonts since '(default-font-width)' returns 7 in 
this case, so the original expression:

   (ceiling (* (string-pixel-width str)
               (/ (float (default-font-width)) (frame-char-width))))

is equivalent (only in this simple case) to:

   (* (string-width str) (default-font-width))

Hopefully that all makes sense.

For variable-pitch fonts, this is more complex. Our zoom ratio is still 
5/6, but we apply that ratio per-character, rounding each time. For the 
string "hi there", the pixel widths of each character are:

   Scale   h  i  _  t  h  e  r  e   Total
       0   8  4  4  5  8  8  5  8      50
      -1   7  3  4  4  7  7  5  7      44

Since the error introduced by rounding each character is a bit 
different, we get a different result between the width from the display 
engine compared to the approximation in the first expression above where 
we round only once at the very end.




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#78621; Package emacs. Full text available.

Message received at 78621 <at> debbugs.gnu.org:


Received: (at 78621) by debbugs.gnu.org; 29 May 2025 06:19:02 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Thu May 29 02:19:02 2025
Received: from localhost ([127.0.0.1]:32828 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1uKWbW-00053B-AK
	for submit <at> debbugs.gnu.org; Thu, 29 May 2025 02:19:02 -0400
Received: from eggs.gnu.org ([2001:470:142:3::10]:50286)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.84_2) (envelope-from <eliz@HIDDEN>) id 1uKWbR-00052Q-EE
 for 78621 <at> debbugs.gnu.org; Thu, 29 May 2025 02:19:01 -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 1uKWbL-0006mP-Hs; Thu, 29 May 2025 02:18:51 -0400
DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org;
 s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date:
 mime-version; bh=mw3Q8jZdswr15tJAmu2L64kBwk5lbo/PHtK4fgu32ek=; b=TscjB14lKD0I
 VzAZuALB9p8qwR+ssU01PViCWJGjJ7ttFV3NsdJkA1vhnCfRc48OKZO6lrfWjPIDvLCY3GZiRaqx1
 fCUSYAdcOEeu2wAI2bVWPrEgHgET8DulUzHO9KnzwT8OuvhzOXHf9OIpl/0iVpuM5R9UUyAWs2Xjh
 5ItgGgrIMMpKxyTRwH1bBPE0mb/VU+BRtJmXgk9MNmJ/5LinT/TK7APty+HCsR/B2trKxD33JQsrf
 u4r15iV86KFqh/jvLQNUSqCOaqfZmm67QEjLdK63aW1zPtcKEf9hBMNllXqoZP9bj1wBV84hVxtKP
 aE3hBG8nOUaIz06A5Coc0A==;
Date: Thu, 29 May 2025 09:18:48 +0300
Message-Id: <86wma0uegn.fsf@HIDDEN>
From: Eli Zaretskii <eliz@HIDDEN>
To: Jim Porter <jporterbugs@HIDDEN>
In-Reply-To: <31ab34c5-4c3b-4167-4a81-e336978a198b@HIDDEN> (message from
 Jim Porter on Wed, 28 May 2025 16:07:48 -0700)
Subject: Re: bug#78621: Pixelwise display specified spaces less precise than
 min-width
References: <CAN+1HbqjV7tVbyz0rRMBvXHC+u1nL59X--m8KxuKwvvKhuXY7A@HIDDEN>
 <7733aaf3-920b-8fe2-d02a-ab1a213f0cb6@HIDDEN>
 <CAN+1HbqHU-3P_QpQ6gxWQRx4_q6QE_ZVhZTyhhAD1e13R5hxUQ@HIDDEN>
 <6bd9d4d1-a24c-80f2-1d9a-a7b6dbc8e559@HIDDEN>
 <CAN+1HbpUZy5yeK0Ce1KJ0zvaEZMCSQEutDy1rJ_dvSVOnqUPOw@HIDDEN>
 <CAN+1HboiHSNVQ4tOG_-6acxtm1gswqMm0B=fYXTySUeBA9Oi=w@HIDDEN>
 <CAN+1Hbp52otHmBv9CJkaT-4XLHUOQOZb3JO+Ae5u3fNgwHTzRA@HIDDEN>
 <31ab34c5-4c3b-4167-4a81-e336978a198b@HIDDEN>
X-Spam-Score: -2.3 (--)
X-Debbugs-Envelope-To: 78621
Cc: shipmints@HIDDEN, 78621 <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 (---)

> Cc: 78621 <at> debbugs.gnu.org
> Date: Wed, 28 May 2025 16:07:48 -0700
> From: Jim Porter <jporterbugs@HIDDEN>
> 
>  From my read of this bug, the issue was originally that these snippets 
> should have the same display width:
> 
>    (concat "some text"
>            (propertize " " 'display
>                        `(space :width (,(- width width-of-some-text)))))
> 
>    (propertize "some text" 'display `(min-width ((,width))))
> 
> I agree with that, but only if 'width-of-some-text' is computed correctly.
> 
> For variable-pitch text, each character cell (I hope I'm using the right 
> term here) in the display is a different width, rounded to the nearest 
> integer, which means that computing the pixel-width as in your original 
> reproducer accumulates small rounding errors for every character.

I don't follow this argument.  string-pixel-width uses the display
code, so it should return the exact same value in pixels as what the
actual display produces when the same characters are shown on the
screen.  So whatever rounding happens (which I don't think it does,
since font glyphs have integer advance width), it happens the same in
both cases and should yield the same values.  Or what am I missing?




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#78621; Package emacs. Full text available.

Message received at 78621 <at> debbugs.gnu.org:


Received: (at 78621) by debbugs.gnu.org; 29 May 2025 06:11:03 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Thu May 29 02:11:03 2025
Received: from localhost ([127.0.0.1]:60997 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1uKWTn-0004VW-FI
	for submit <at> debbugs.gnu.org; Thu, 29 May 2025 02:11:03 -0400
Received: from eggs.gnu.org ([2001:470:142:3::10]:46060)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.84_2) (envelope-from <eliz@HIDDEN>) id 1uKWTl-0004Uq-N1
 for 78621 <at> debbugs.gnu.org; Thu, 29 May 2025 02:11:02 -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 1uKWTg-0005lI-Dz; Thu, 29 May 2025 02:10:56 -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=+uKGAycjk34O24OX2c+0VoeWA7SO1uOe6hFgiuvv/D8=; b=eQPfSiT8kTvIBh7Zlv6a
 dFVmvmWA/t8kZeRsFk+uUGFejgBC83BL4bkukKxh0Q0eAC6jR51aAoEuhHLGEEUgY84a3lCbSiZR4
 sTblrFNZhbfj9kr9S4ZKXjAMuB6IwxgSjNhjv72d0+WBnxHFs5N7qUE7MMLgt5MVvSyL9XZ1UPxAi
 t4ifh2as02cVS1fCyRbh6vbzva+9aKtKx9hLU4OEXt+iC9O9/ibgToHuiLpZD55frwB21LVT4jAhD
 VH6REyJT/1tzoXsx3YJpD4j57Yx1qaqirPcr2zX8mET/HZKmi9Tg7AusHznBZCENX+nvb7akhFUkt
 YbqyOyrAwRUM4w==;
Date: Thu, 29 May 2025 09:10:53 +0300
Message-Id: <86zfewuetu.fsf@HIDDEN>
From: Eli Zaretskii <eliz@HIDDEN>
To: Jim Porter <jporterbugs@HIDDEN>
In-Reply-To: <e6cebcc0-249d-3a78-f5ee-061bbb99b529@HIDDEN> (message from
 Jim Porter on Wed, 28 May 2025 15:42:56 -0700)
Subject: Re: bug#78621: Pixelwise display specified spaces less precise than
 min-width
References: <CAN+1HbqjV7tVbyz0rRMBvXHC+u1nL59X--m8KxuKwvvKhuXY7A@HIDDEN>
 <7733aaf3-920b-8fe2-d02a-ab1a213f0cb6@HIDDEN>
 <CAN+1HbqHU-3P_QpQ6gxWQRx4_q6QE_ZVhZTyhhAD1e13R5hxUQ@HIDDEN>
 <6bd9d4d1-a24c-80f2-1d9a-a7b6dbc8e559@HIDDEN>
 <CAN+1HbpUZy5yeK0Ce1KJ0zvaEZMCSQEutDy1rJ_dvSVOnqUPOw@HIDDEN>
 <e6cebcc0-249d-3a78-f5ee-061bbb99b529@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: 78621
Cc: shipmints@HIDDEN, 78621 <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 (---)

> Cc: 78621 <at> debbugs.gnu.org
> Date: Wed, 28 May 2025 15:42:56 -0700
> From: Jim Porter <jporterbugs@HIDDEN>
> 
> On 5/28/2025 3:15 PM, Ship Mints wrote:
> > Interesting.  The results got worse for me, not better.
> > 
> > What platform did you test on?
> 
> GNU/Linux.

I tested on MS-Windows, but I don't think the platform matters.  The
only platform-dependent part is which font is used for the
variable-pitch face; the rest of the code involved in this is
platform-independent.

Once again, the problem is not in :width vs :min-width, the problem is
in the pixel-width values given to these display specs; see my other
message in this thread.




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#78621; Package emacs. Full text available.

Message received at 78621 <at> debbugs.gnu.org:


Received: (at 78621) by debbugs.gnu.org; 29 May 2025 06:07:36 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Thu May 29 02:07:36 2025
Received: from localhost ([127.0.0.1]:60971 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1uKWQR-0004Dc-HV
	for submit <at> debbugs.gnu.org; Thu, 29 May 2025 02:07:36 -0400
Received: from eggs.gnu.org ([2001:470:142:3::10]:55902)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.84_2) (envelope-from <eliz@HIDDEN>) id 1uKWQO-0004D7-PV
 for 78621 <at> debbugs.gnu.org; Thu, 29 May 2025 02:07:33 -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 1uKWQJ-0005LT-0V; Thu, 29 May 2025 02:07:27 -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=vMKexLo6BWZhP9OsQxzpPKWnjqIzu2R0fH+MQHL4F+4=; b=R6+9g3y6zLIGJ2v8/FAq
 9tSku7/VbOAN5ML8J+MmvHoxxmeanYNldi1K44MMameONfewX+15wMX7p+A5To7XRXpTwkpWDi1SN
 q2gfk37ePcGkbrNiEoOQ4JJDcGyxfGczOCfWe17QjdBRVj+rCMY9yyHXpD/SWCc3er52jLLSuae4e
 NOYYxKczceo7HXZvTx4vFTHge7gxtIJs3zbZG5mn8t9AZBG7ORvhybJ2d5bJtNqel1ez1REeOwbwE
 gCFtCVIw4Y2r3ukO1qIc0Py4ApdiZENh8pTq9oNKzZM2Ra0fWXBp/ljxOfwu52lMb3dibIpiWiygm
 v4B0YYsEEaEOyg==;
Date: Thu, 29 May 2025 09:07:23 +0300
Message-Id: <861ps8vtk4.fsf@HIDDEN>
From: Eli Zaretskii <eliz@HIDDEN>
To: Ship Mints <shipmints@HIDDEN>
In-Reply-To: <CAN+1HbqHU-3P_QpQ6gxWQRx4_q6QE_ZVhZTyhhAD1e13R5hxUQ@HIDDEN>
 (message from Ship Mints on Wed, 28 May 2025 16:40:26 -0400)
Subject: Re: bug#78621: Pixelwise display specified spaces less precise than
 min-width
References: <CAN+1HbqjV7tVbyz0rRMBvXHC+u1nL59X--m8KxuKwvvKhuXY7A@HIDDEN>
 <7733aaf3-920b-8fe2-d02a-ab1a213f0cb6@HIDDEN>
 <CAN+1HbqHU-3P_QpQ6gxWQRx4_q6QE_ZVhZTyhhAD1e13R5hxUQ@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: 78621
Cc: jporterbugs@HIDDEN, 78621 <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 (---)

> Cc: 78621 <at> debbugs.gnu.org
> From: Ship Mints <shipmints@HIDDEN>
> Date: Wed, 28 May 2025 16:40:26 -0400
> 
> On Wed, May 28, 2025 at 4:14 PM Jim Porter <jporterbugs@HIDDEN> wrote:
> 
>  On 5/28/2025 12:44 PM, Ship Mints wrote:
>  > You can see this in text-scaled buffers when attempting to pad a string 
>  > to a specific pixel boundary.  If a pixelwise specified-width space is 
>  > inserted after a string with variable-pitch glyphs, it doesn't honor the 
>  > net pixel width.  That same string padded using min-width with the same 
>  > number of pixels works fine.
> 
>  Are you sure that your implementation of 'string-pixel-width-scaled' is 
>  correct? From a brief look, I'd expect that you get some jitter when 
>  dividing '(default-font-width)' by '(frame-char-width)', since both are 
>  rounded to the nearest whole number.
> 
>  If I instead replace that call with:
> 
>     (string-pixel-width str (current-buffer))
> 
>  then everything looks ok to me. As of Emacs 31, passing a buffer does this:
> 
>     If BUFFER is non-nil, use the face remappings, alternative and default
>     properties from that buffer when determining the width.
> 
>  That should handle all the necessary work to get the string width after 
>  applying text-scale remappings. I added that argument so I could use it 
>  in 'visual-wrap-prefix-mode' for a very similar issue you're seeing. See 
>  commit f70a6ea0ea86ef461e40d20664a75a92d02679ea.
> 
> Thanks for that.  I think I'm using that in other places.
> 
> But... Did you run the repro in question and it worked for you, or are you saying that this worked for your
> case?
> 
> AFAICT, the repro demonstrates a different issue.  With the identical string-pixel-width, padding using
> specified-width spaces vs. min-width behave differently, so this isn't due to jitter as the widths used are the
> same for both cases.

I tried your recipe in Emacs 31.  The variable-pitch text indeed
doesn't align, but the reason seems to be that the WIDTH value of
'(space :width WIDTH)' display property is miscalculated.  In my case
the :min-width spec has the value (150), i.e. 150 pixels, as expected,
whereas in the '(space :width WIDTH)' spec WIDTH is (66) while the
width of the text "f:0123456789" on display is 72 pixels (measured
with posn-at-point).  So the sum is 72 + 66 = 138 pixels, not 150.

The question is why is the value miscalculated.  Perhaps
string-pixel-width-scaled doesn't do its job reliably with
variable-pitch fonts?  I didn't have time to explore deeper, since you
guys seem to be looking into that already.  Let me know if you find
something unexpected or need my further help.




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#78621; Package emacs. Full text available.

Message received at 78621 <at> debbugs.gnu.org:


Received: (at 78621) by debbugs.gnu.org; 28 May 2025 23:08:00 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Wed May 28 19:08:00 2025
Received: from localhost ([127.0.0.1]:58230 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1uKPsN-0001WD-M1
	for submit <at> debbugs.gnu.org; Wed, 28 May 2025 19:08:00 -0400
Received: from mail-pf1-x42b.google.com ([2607:f8b0:4864:20::42b]:55483)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
 (Exim 4.84_2) (envelope-from <jporterbugs@HIDDEN>)
 id 1uKPsJ-0001V3-Uv
 for 78621 <at> debbugs.gnu.org; Wed, 28 May 2025 19:07:57 -0400
Received: by mail-pf1-x42b.google.com with SMTP id
 d2e1a72fcca58-7399a2dc13fso283826b3a.2
 for <78621 <at> debbugs.gnu.org>; Wed, 28 May 2025 16:07:55 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=gmail.com; s=20230601; t=1748473669; x=1749078469; darn=debbugs.gnu.org;
 h=content-transfer-encoding:in-reply-to:from:references:cc:to
 :content-language:subject:mime-version:date:message-id:from:to:cc
 :subject:date:message-id:reply-to;
 bh=BSTwbaQ596SiNlO54YQcivM6QflWDq58g2sZwp4V9sE=;
 b=Tmw/eDI+GYCiJXcHta9oESlLM44Ekqx/WvqIk8ZgTIdLfE1ywJHtU6rV8w/VGM+V11
 dUVot/jz1EGdb0HsHAB2lkp26HN4lavDcpkMopvSEsYytPeKnq1y0cTO2Rl1v22k24a5
 K8CnwiBP0TDj4+YrGL1REEKRMPY8vYcq6UNc8a257P+VKXO/P/kJ0PYDMqKr+4RwBg4C
 caf85edb/uMERinNmgOcKbkaQBKVdUE1yY/bjaRw/E/njiavv4njamThbllgpZbzrrnq
 H11C6xH+JutOkWsS2AlZM9T7O/S9TJjOA17CxBK+PRxvJRX/aOzyQT8zUSlIokrlN1eP
 ykGg==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20230601; t=1748473669; x=1749078469;
 h=content-transfer-encoding:in-reply-to:from:references:cc:to
 :content-language:subject:mime-version:date:message-id
 :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to;
 bh=BSTwbaQ596SiNlO54YQcivM6QflWDq58g2sZwp4V9sE=;
 b=ATP+ITXt1POyARHC1plW0CRuqMkUAvIvMpgrBJp/1qVtGRDxIGMHG+OTnYtHit27Fc
 VZhetrXT5EiZ+B+4VuIpz6jfpng+82dZX0qUkZyLR+TxQ9Z2pHPxSFpm4dDplAJr548a
 +xlMzl3QN62HOtY8+VHnkuTcAEFxiJToAt/FGd60RzcOrQ7TQUHZzdADAJ4pia+2wool
 2SLBy9Hk2lpohkGeSYDqJb8Mj8iYcMo/QEE1iwC/VqmQo56IfA5SyBPptUZFVmOVvmyL
 g/myEF02t5U/H6eizyFPdgwSxYgJUDcnd+/8J/B/R/4RO2YcnC+TIuLoD91VG7WoyyWk
 l0gg==
X-Gm-Message-State: AOJu0YxhWp7mdX67dQkBQBtxz3Y5njfW4SB/DLhO6e8mrdxuKp+6d5/0
 8blntb2xfOSdwCVG03r4Txb/UETijXWSOtL3ocTKId61n0KcwaihoVZA
X-Gm-Gg: ASbGncvPJIzRR+5ojm+JsHah9GMr+RO38aAmSBHZUa6SIWXORiTkmqjavJRRaoFRgt9
 YolxlrtSwH/9pcrXbL9DTNAH5ue1wyAM0VhE4m/Tif6y5ZijlZRwIaBGEpwyM1e2JHsVbuU9QYx
 g+TBQih+QXn3KQih4qv5sK5IlDCPMp3w21JZ/N/aCNF62duA//4DXPtxJ+xXkY4VNjLwp32mion
 vur8Go/Avx7dNrPtGdI53Qn/bbLIETGGuFw9UDk0L8x/BXsp85v3R2k0uh4ydr+/+Sn6LM+CNR3
 seAjySiEuVYUo9zyzlKHHJAXuGjrYmveRkkpbeLmcFR7OmsHB3614TvyvISKzysQnW3VjmtPOSl
 xKXJ4zsJBQ5CeM1ZAWJM56nszqGK0ypE=
X-Google-Smtp-Source: AGHT+IEjdBLf161LhAeH63b9n8BV6VRPjG+C4/AZKH8XAWcfGBTqALU6lViBH9YT0NHE8Uu4xRrzVA==
X-Received: by 2002:a05:6a00:1822:b0:736:31cf:2590 with SMTP id
 d2e1a72fcca58-745fe064383mr27375153b3a.16.1748473669051; 
 Wed, 28 May 2025 16:07:49 -0700 (PDT)
Received: from [192.168.1.2] (syn-076-168-144-128.res.spectrum.com.
 [76.168.144.128]) by smtp.googlemail.com with ESMTPSA id
 d2e1a72fcca58-747affadf70sm127991b3a.91.2025.05.28.16.07.48
 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128);
 Wed, 28 May 2025 16:07:48 -0700 (PDT)
Message-ID: <31ab34c5-4c3b-4167-4a81-e336978a198b@HIDDEN>
Date: Wed, 28 May 2025 16:07:48 -0700
MIME-Version: 1.0
Subject: Re: bug#78621: Pixelwise display specified spaces less precise than
 min-width
Content-Language: en-US
To: Ship Mints <shipmints@HIDDEN>
References: <CAN+1HbqjV7tVbyz0rRMBvXHC+u1nL59X--m8KxuKwvvKhuXY7A@HIDDEN>
 <7733aaf3-920b-8fe2-d02a-ab1a213f0cb6@HIDDEN>
 <CAN+1HbqHU-3P_QpQ6gxWQRx4_q6QE_ZVhZTyhhAD1e13R5hxUQ@HIDDEN>
 <6bd9d4d1-a24c-80f2-1d9a-a7b6dbc8e559@HIDDEN>
 <CAN+1HbpUZy5yeK0Ce1KJ0zvaEZMCSQEutDy1rJ_dvSVOnqUPOw@HIDDEN>
 <CAN+1HboiHSNVQ4tOG_-6acxtm1gswqMm0B=fYXTySUeBA9Oi=w@HIDDEN>
 <CAN+1Hbp52otHmBv9CJkaT-4XLHUOQOZb3JO+Ae5u3fNgwHTzRA@HIDDEN>
From: Jim Porter <jporterbugs@HIDDEN>
In-Reply-To: <CAN+1Hbp52otHmBv9CJkaT-4XLHUOQOZb3JO+Ae5u3fNgwHTzRA@HIDDEN>
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 7bit
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 78621
Cc: 78621 <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 5/28/2025 3:40 PM, Ship Mints wrote:
> Okay I applied the one-liner correctly this time and now I see good 
> results on my mac laptop.
> 
> My contention still stands, though, that with identical inputs, 'display 
> 'space :width and 'display 'min-width should produce identical results.  
> Does that make sense?

 From my read of this bug, the issue was originally that these snippets 
should have the same display width:

   (concat "some text"
           (propertize " " 'display
                       `(space :width (,(- width width-of-some-text)))))

   (propertize "some text" 'display `(min-width ((,width))))

I agree with that, but only if 'width-of-some-text' is computed correctly.

For variable-pitch text, each character cell (I hope I'm using the right 
term here) in the display is a different width, rounded to the nearest 
integer, which means that computing the pixel-width as in your original 
reproducer accumulates small rounding errors for every character.

That's not an issue for fixed-pitch text, since in that case you can 
reduce this expression as follows:

   (* (string-pixel-width str)
      (/ (float (default-font-width)) (frame-char-width)))

   ;; For simple cases, the pixel width is just the length times the
   ;; frame's char width.
   (* (length str) (frame-char-width)
      (/ (float (default-font-width)) (frame-char-width)))

   ;; Cancel out (frame-char-width).
   (* (length str) (float (default-font-width)))

   ;; Remove unnecessary float call.
   (* (length str) (default-font-width))

Thanks to '(frame-char-width)' canceling out, that expression doesn't 
accumulate rounding errors like it would for variable-pitch text.




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#78621; Package emacs. Full text available.

Message received at 78621 <at> debbugs.gnu.org:


Received: (at 78621) by debbugs.gnu.org; 28 May 2025 22:43:07 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Wed May 28 18:43:07 2025
Received: from localhost ([127.0.0.1]:58143 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1uKPUJ-0005s1-0i
	for submit <at> debbugs.gnu.org; Wed, 28 May 2025 18:43:07 -0400
Received: from mail-pf1-x431.google.com ([2607:f8b0:4864:20::431]:58493)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
 (Exim 4.84_2) (envelope-from <jporterbugs@HIDDEN>)
 id 1uKPUF-0005qY-VV
 for 78621 <at> debbugs.gnu.org; Wed, 28 May 2025 18:43:04 -0400
Received: by mail-pf1-x431.google.com with SMTP id
 d2e1a72fcca58-74264d1832eso233506b3a.0
 for <78621 <at> debbugs.gnu.org>; Wed, 28 May 2025 15:43:03 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=gmail.com; s=20230601; t=1748472177; x=1749076977; darn=debbugs.gnu.org;
 h=content-transfer-encoding:in-reply-to:from:references:cc:to
 :content-language:subject:mime-version:date:message-id:from:to:cc
 :subject:date:message-id:reply-to;
 bh=OFcWnkLwXZ2EIF+Ir+MOTN6ztUxfTa3y7U9/585lF4E=;
 b=Tj6teetc/oHA9QJ0/CYMSdDxNTijPxZ32NsnRjqC1dEPwswQxpwrcm2Y1brjtGU18U
 ER5YCEUYYguf1YSKWd7ApaocFtU9euX8VW/3pJrM19sa0vYH+0jH1xB4g0CIkUddxjAU
 EzjThEdvq852vHRxP+iBRTr2Db5YcT3OpRki271mIw/Z2xyeY95TnpgdZ/dho0Zz5ABx
 RNPXZPwnSJPlVrxtds4G8vb0YiSbzY4t7zp+XOyo62DuaktmXVBbdwrD2rUVhSCaSibm
 jsAo55wey321RTpv9XsBmsIiuY1tINodE3M59tgsqWJNId4kGNG6nfKmHO4hnsAGfkrJ
 7/yg==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20230601; t=1748472177; x=1749076977;
 h=content-transfer-encoding:in-reply-to:from:references:cc:to
 :content-language:subject:mime-version:date:message-id
 :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to;
 bh=OFcWnkLwXZ2EIF+Ir+MOTN6ztUxfTa3y7U9/585lF4E=;
 b=ZBBDzb/inCeswzgRCiK9cbNnNXngv3Bt2Zn2cxq0/Ctud3lDBFeW6lzhTFBEi3jlXc
 OlRweJKggaI7YrTKM7tG2U5+8SE6pz1vwvdMZ0r68ZwOnU91dvxVEueTWwsOTVxNzikd
 NWFhJQU4DhV8HYTjlarB6xa6yf8sFX81TdQm1PFnQzrh7QFO/5CT4gEy9yHV7z1GNf93
 uCkTaNDgbibqizkzf0DC6eDoqquodvFnOobLx3f/iZCp5njMLsNuflNEz9WhouMi5Tvf
 ZtLbjm0ex6mEjjhf+P8bsTuiIOtt3paxshAjlmkbdJ+tL8zh3ddivUjljB1bWOuiH87o
 6wbw==
X-Gm-Message-State: AOJu0Yx3aqwQlpGrWfZ2KVogjSqmrMS2Qu5AqmdVZ/ge2HsFhDmQEQWt
 vuDpCIv9wYqLXLsJJZP8nRq5i82CNe3DFtyMOeQY1MgvP59741ZHpuIv
X-Gm-Gg: ASbGncvvx6sv77Fi5wsbTGcAi+NbinjoJl7c8ditC3vOlHLi1LyLE6B+JPW7IDUap21
 o4JrzpO938IpiKNMEDofgNcGKxMZDHa69h1avlc8WDK7xCzMav1otZY7XDWepDDZkoL8hFfX5oy
 1IoCtiUwx543CKoCGn647gkOvBPxEYRSda7om+mcJ0Ib5Gqt0ssDS0EdF27CpHc3xco8ERmmb9t
 KOLx4jXHPYM6rxeIUA4TdAqws6IjdYahmjiXeO/SzEUnEd7V4XaO2zFJ26mSyDgOpWTBOfnfvkf
 NyqSeebDkW5549YpVtZXR/1/VX+K60158SQ7O9cFko5fBID1CVQJ5LClZiNBx3mN7l5f3fvBxYV
 QDCehG0i/2vJiMjzIdcwo3KtPLov+UlY=
X-Google-Smtp-Source: AGHT+IGNVaE97uy1vvt8vcknMbSqzLY5QHX/pi8DI4CFC+MKZelNTJ4pOHWoAai4ul/+vwxeIZgnzw==
X-Received: by 2002:aa7:888d:0:b0:742:a82c:d832 with SMTP id
 d2e1a72fcca58-745fe05d238mr31213575b3a.24.1748472176971; 
 Wed, 28 May 2025 15:42:56 -0700 (PDT)
Received: from [192.168.1.2] (syn-076-168-144-128.res.spectrum.com.
 [76.168.144.128]) by smtp.googlemail.com with ESMTPSA id
 d2e1a72fcca58-747afff71fbsm101258b3a.165.2025.05.28.15.42.56
 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128);
 Wed, 28 May 2025 15:42:56 -0700 (PDT)
Message-ID: <e6cebcc0-249d-3a78-f5ee-061bbb99b529@HIDDEN>
Date: Wed, 28 May 2025 15:42:56 -0700
MIME-Version: 1.0
Subject: Re: bug#78621: Pixelwise display specified spaces less precise than
 min-width
Content-Language: en-US
To: Ship Mints <shipmints@HIDDEN>
References: <CAN+1HbqjV7tVbyz0rRMBvXHC+u1nL59X--m8KxuKwvvKhuXY7A@HIDDEN>
 <7733aaf3-920b-8fe2-d02a-ab1a213f0cb6@HIDDEN>
 <CAN+1HbqHU-3P_QpQ6gxWQRx4_q6QE_ZVhZTyhhAD1e13R5hxUQ@HIDDEN>
 <6bd9d4d1-a24c-80f2-1d9a-a7b6dbc8e559@HIDDEN>
 <CAN+1HbpUZy5yeK0Ce1KJ0zvaEZMCSQEutDy1rJ_dvSVOnqUPOw@HIDDEN>
From: Jim Porter <jporterbugs@HIDDEN>
In-Reply-To: <CAN+1HbpUZy5yeK0Ce1KJ0zvaEZMCSQEutDy1rJ_dvSVOnqUPOw@HIDDEN>
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 8bit
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 78621
Cc: 78621 <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 5/28/2025 3:15 PM, Ship Mints wrote:
> Interesting.  The results got worse for me, not better.
> 
> What platform did you test on?

GNU/Linux.




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#78621; Package emacs. Full text available.

Message received at 78621 <at> debbugs.gnu.org:


Received: (at 78621) by debbugs.gnu.org; 28 May 2025 22:41:08 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Wed May 28 18:41:08 2025
Received: from localhost ([127.0.0.1]:58129 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1uKPSJ-0005e8-LK
	for submit <at> debbugs.gnu.org; Wed, 28 May 2025 18:41:08 -0400
Received: from mail-vs1-xe2d.google.com ([2607:f8b0:4864:20::e2d]:48619)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
 (Exim 4.84_2) (envelope-from <shipmints@HIDDEN>)
 id 1uKPSG-0005d1-Mj
 for 78621 <at> debbugs.gnu.org; Wed, 28 May 2025 18:41:01 -0400
Received: by mail-vs1-xe2d.google.com with SMTP id
 ada2fe7eead31-4e58ad70536so97735137.1
 for <78621 <at> debbugs.gnu.org>; Wed, 28 May 2025 15:41:00 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=gmail.com; s=20230601; t=1748472054; x=1749076854; 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=6kL9NcDOg3E/VueeDRR5pbIC0rsPUc+XGAmRMT1rmTI=;
 b=k6Fyww2T63EVevjnwrFnlDMCRgFwymajJIDzp5fOG2YtSgKPD9bA0D3AlI326XjwIk
 OIY8FDVxduFh6HxJkVv0qTbWI9CyVLaUiVTCUDLkMGOkbP0kzc/9T9ZUFukpCTWQD6cn
 cVgPZ6Ckcpv7L0jc61fEkXek5daK9/TJ4VfI0evY/rb741vaXVioHOhqipLO/twupR6j
 xcQ8gQ7ZSAU0Y+iG9S6sA/cTq6wsGPEAizYBMh0xT9ICsNwtI17HRiRGHJ1hxPIRSpPc
 QyEznYnXFkX9w7/m8lTc/Ef+LKIK1YwZmIeRcHSAC38Y+nZDeEiGVFTcZKTKvFe0Gc0X
 DhbQ==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20230601; t=1748472054; x=1749076854;
 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=6kL9NcDOg3E/VueeDRR5pbIC0rsPUc+XGAmRMT1rmTI=;
 b=ZIMSQGyA2yzvENDaIS36pbqdL2cofPFojhXHPF5iBWftscAMoT83v8l5xxBqtsLldI
 IAyvYouTjkJ1YpT/Dw5pR2UuO5oOoKoVdKXE95dUJ0CB65ibxHiFe6/oVoQj44zUIJQv
 FSi1Xsh7OPRxIHcPBKsUMfPEMamCAFLSIrpvfIidrj2NW0LkwzR07IMuNdkGKPrlClHK
 VnUU1d9DIe2cFr2TwsP9o/J6KwcPx0cediq9Fe07LAx7e6xO7H0uKqVr+oBrom7mVqRf
 mkFtxQD1KMPOe2ZeNOZO9JkvPLTm/M6VEomYpsVFW6fgVIfAPthqHL9a+GYIlnLKdT3x
 dfWA==
X-Gm-Message-State: AOJu0YxBpap1/iGTMKa0kRZNxD3LavkaOT9yBgCCi3MwskgQmZ/yTrB+
 Is/ry7/G1LkgN+Xt+uG2SK9EbevDwDvIzY+e1AsVjzdCaEu0hdNG7TrH5qm98yCtsJ6qAXCUFt5
 JGCHBfcsC+g7jzrLsQvVaHXZPHBPw0YE=
X-Gm-Gg: ASbGncsllXA1k6ebjGd+Bgu9Qj8D7tP4YvblGo35OWa3ub1rRPEX7QAhaFWZwQrnMcy
 xgoVRD4bVcQv14hqudENVVdtfD/Fwop16XHt0dhHijN4ShaERUnt+s7+XeYkXMFWwjTPkDR40x3
 Utq9G1CviQw4afMsz+HzL4Vmo/CwB+ZIyxlQh5TxouZAzPvg==
X-Google-Smtp-Source: AGHT+IFkFMa4jmVta0sNAItfwpCaSVQY6lBKe2c7Yi4hOseu/8/4X2QBVRzMWeRIuQNXpwcZf/75mQD/Mhvvr+mJGJg=
X-Received: by 2002:a05:6102:3ec8:b0:4de:ed14:da6d with SMTP id
 ada2fe7eead31-4e42405fd7cmr17068211137.2.1748472054496; Wed, 28 May 2025
 15:40:54 -0700 (PDT)
MIME-Version: 1.0
References: <CAN+1HbqjV7tVbyz0rRMBvXHC+u1nL59X--m8KxuKwvvKhuXY7A@HIDDEN>
 <7733aaf3-920b-8fe2-d02a-ab1a213f0cb6@HIDDEN>
 <CAN+1HbqHU-3P_QpQ6gxWQRx4_q6QE_ZVhZTyhhAD1e13R5hxUQ@HIDDEN>
 <6bd9d4d1-a24c-80f2-1d9a-a7b6dbc8e559@HIDDEN>
 <CAN+1HbpUZy5yeK0Ce1KJ0zvaEZMCSQEutDy1rJ_dvSVOnqUPOw@HIDDEN>
 <CAN+1HboiHSNVQ4tOG_-6acxtm1gswqMm0B=fYXTySUeBA9Oi=w@HIDDEN>
In-Reply-To: <CAN+1HboiHSNVQ4tOG_-6acxtm1gswqMm0B=fYXTySUeBA9Oi=w@HIDDEN>
From: Ship Mints <shipmints@HIDDEN>
Date: Wed, 28 May 2025 18:40:43 -0400
X-Gm-Features: AX0GCFti6E7CEgJ4KK1-qftWlU1OH7BVg9WVc-L3gGd71jVhSRxFdEe1V6XSM5w
Message-ID: <CAN+1Hbp52otHmBv9CJkaT-4XLHUOQOZb3JO+Ae5u3fNgwHTzRA@HIDDEN>
Subject: Re: bug#78621: Pixelwise display specified spaces less precise than
 min-width
To: Jim Porter <jporterbugs@HIDDEN>
Content-Type: multipart/alternative; boundary="000000000000b54402063639df94"
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 78621
Cc: 78621 <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 (-)

--000000000000b54402063639df94
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

On Wed, May 28, 2025 at 6:17=E2=80=AFPM Ship Mints <shipmints@HIDDEN> wr=
ote:

> On Wed, May 28, 2025 at 6:15=E2=80=AFPM Ship Mints <shipmints@HIDDEN> =
wrote:
>
>> On Wed, May 28, 2025 at 6:12=E2=80=AFPM Jim Porter <jporterbugs@HIDDEN=
m> wrote:
>>
>>> On 5/28/2025 1:40 PM, Ship Mints wrote:
>>> > But... Did you run the repro in question and it worked for you, or ar=
e
>>> > you saying that this worked for your case?
>>>
>>> I edited your repro to use that call (see the diff below), and it all
>>> looks good to me, as shown in the attached screenshots.
>>>
>>> --- before.el   2025-05-28 14:58:33.646686778 -0700
>>> +++ after.el  2025-05-28 14:58:42.551136757 -0700
>>> @@ -12,8 +12,7 @@
>>>       (let ((pad-to-width 150))
>>>         (cl-labels
>>>             ((string-pixel-width-scaled (str)
>>> -             (ceiling (* (string-pixel-width str)
>>> -                         (/ (float (default-font-width))
>>> (frame-char-width)))))
>>> +             (string-pixel-width str (current-buffer)))
>>>              (insert-pad-to-width (str face)
>>>                (let* ((s (propertize str 'face face))
>>>                       (pad-width (- pad-to-width
>>>
>>
>> Interesting.  The results got worse for me, not better.
>>
>> What platform did you test on?
>>
>
> In any case, it still doesn't explain the root of the potential bug with
> :width being different than :min-width despite the inputs being identical=
.
>

Okay I applied the one-liner correctly this time and now I see good results
on my mac laptop.

My contention still stands, though, that with identical inputs, 'display
'space :width and 'display 'min-width should produce identical results.
Does that make sense?

--000000000000b54402063639df94
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr"><div dir=3D"ltr"><div class=3D"gmail_default" style=3D"fon=
t-family:monospace"><span style=3D"font-family:Arial,Helvetica,sans-serif">=
On Wed, May 28, 2025 at 6:17=E2=80=AFPM Ship Mints &lt;<a href=3D"mailto:sh=
ipmints@HIDDEN">shipmints@HIDDEN</a>&gt; wrote:</span></div></div><di=
v class=3D"gmail_quote gmail_quote_container"><blockquote class=3D"gmail_qu=
ote" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,20=
4);padding-left:1ex"><div dir=3D"ltr"><div dir=3D"ltr"><div style=3D"font-f=
amily:monospace"><span style=3D"font-family:Arial,Helvetica,sans-serif">On =
Wed, May 28, 2025 at 6:15=E2=80=AFPM Ship Mints &lt;<a href=3D"mailto:shipm=
ints@HIDDEN" target=3D"_blank">shipmints@HIDDEN</a>&gt; wrote:</span>=
</div></div><div class=3D"gmail_quote"><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"><div dir=3D"ltr"><div dir=3D"ltr"><div style=3D"font-family:m=
onospace"><span style=3D"font-family:Arial,Helvetica,sans-serif">On Wed, Ma=
y 28, 2025 at 6:12=E2=80=AFPM Jim Porter &lt;<a href=3D"mailto:jporterbugs@=
gmail.com" target=3D"_blank">jporterbugs@HIDDEN</a>&gt; wrote:</span></d=
iv></div><div class=3D"gmail_quote"><blockquote class=3D"gmail_quote" style=
=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding=
-left:1ex">On 5/28/2025 1:40 PM, Ship Mints wrote:<br>
&gt; But... Did you run the repro in question and it worked for you, or are=
 <br>
&gt; you saying that this worked for your case?<br>
<br>
I edited your repro to use that call (see the diff below), and it all <br>
looks good to me, as shown in the attached screenshots.<br>
<br>
--- before.el=C2=A0 =C2=A02025-05-28 14:58:33.646686778 -0700<br>
+++ after.el=C2=A0 2025-05-28 14:58:42.551136757 -0700<br>
@@ -12,8 +12,7 @@<br>
=C2=A0 =C2=A0 =C2=A0 (let ((pad-to-width 150))<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 (cl-labels<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 ((string-pixel-width-scaled (str)=
<br>
-=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(ceiling (* (string-pixel-=
width str)<br>
-=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0(/ (float (default-font-width)) <br>
(frame-char-width)))))<br>
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(string-pixel-width str (c=
urrent-buffer)))<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(insert-pad-to-width (str f=
ace)<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(let* ((s (propertiz=
e str &#39;face face))<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 (pad-width (- pad-to-width<br></blockquote><div><br></div><div style=3D=
"font-family:monospace">Interesting.=C2=A0 The results got worse for me, no=
t better.</div><div style=3D"font-family:monospace"><br></div><div style=3D=
"font-family:monospace">What platform did you test on?</div></div></div></b=
lockquote><div><br></div><div style=3D"font-family:monospace">In any case, =
it still doesn&#39;t explain the root of the potential bug with :width bein=
g different than :min-width despite the inputs being identical.</div></div>=
</div></blockquote><div><br></div><div class=3D"gmail_default" style=3D"fon=
t-family:monospace">Okay I applied the one-liner correctly this time and no=
w I see good results on my mac laptop.</div><div class=3D"gmail_default" st=
yle=3D"font-family:monospace"><br></div><div class=3D"gmail_default" style=
=3D"font-family:monospace">My contention still stands, though, that with id=
entical inputs, &#39;display &#39;space :width and &#39;display &#39;min-wi=
dth should produce identical results.=C2=A0 Does that make sense?</div></di=
v></div>

--000000000000b54402063639df94--




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#78621; Package emacs. Full text available.

Message received at 78621 <at> debbugs.gnu.org:


Received: (at 78621) by debbugs.gnu.org; 28 May 2025 22:17:27 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Wed May 28 18:17:27 2025
Received: from localhost ([127.0.0.1]:57950 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1uKP5R-0003Mo-8H
	for submit <at> debbugs.gnu.org; Wed, 28 May 2025 18:17:26 -0400
Received: from mail-vk1-xa2e.google.com ([2607:f8b0:4864:20::a2e]:46220)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
 (Exim 4.84_2) (envelope-from <shipmints@HIDDEN>)
 id 1uKP5N-0003LQ-8k
 for 78621 <at> debbugs.gnu.org; Wed, 28 May 2025 18:17:23 -0400
Received: by mail-vk1-xa2e.google.com with SMTP id
 71dfb90a1353d-52f4327a0c8so120101e0c.0
 for <78621 <at> debbugs.gnu.org>; Wed, 28 May 2025 15:17:20 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=gmail.com; s=20230601; t=1748470633; x=1749075433; 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=rDqrvOUklHeOMI8cCF7A1m7S9zXaRGDsRmjKowQzNFA=;
 b=guZqKdInp3vVzBHmrPrZokmfkcWPhpfsgJZSDjVrddx4iXS5C5gqY1gJI62a4e/5jF
 ZuHQE2B8VhaGkeP35r2d9mkrXOISxz1GgBWEnlEmrtAPTWSs9B3/RdZ6eEX/RmuDH2VY
 zXj/I0Q0jFdfmLnV3NbnGziAM6O75aeGmNnZCP2FMnRkvZ6O5H5/Ggwe9yz+bO5oM4py
 osDVC0cWuzIRfqw7gh8X7mg2l/7plaDFDbgxx/v/0Y/KzfWKlEzdYcG7IOjdUZ/LxMrA
 3A3GePKpQ9+MslNflMxUdxaUmLkMBSiIb384zsoNiMX/Y31maPOivccOcUsB6xv7i88l
 POHg==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20230601; t=1748470633; x=1749075433;
 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=rDqrvOUklHeOMI8cCF7A1m7S9zXaRGDsRmjKowQzNFA=;
 b=evlLkjrjl19lA7fsKl6W/k47y4yZj6CgzMUsL82bckedCpzdCifJaPZiB2tGSFs/Z7
 f5puENioQUQF7hTPr7pp4+DAwTKYrfmqhisTvioaTVrhaLKPWu+KE0YAnMrJ/74ul6y4
 RxCOVxbBCz412TiXh/4VvsgjSosVA+TE1pM+1wR22PamUMduEQ9MvFa4d25xTJK9zKvx
 yTdcpMqsFWxgy79QkgelG8hfD1fqIVTU1KnwaTi6OavgjohSS3SqAi6oJjuD6FaZ4wL3
 oW1+h20U9hCVRdSauABAbzpFgSkB8cSRNzVVaQlNjGFOtk3taMBXMWRPDxS1zWaBqetH
 wHag==
X-Gm-Message-State: AOJu0Yw609bmNiKqTMDs02SD8sWtwUhPHA14kcA5yqHoQkwkLnOLOuyO
 ZzYQJ26upnopmpSSso5WhvqsYSkaYUPiNi+xjj8WvrBCsE0tDMWqO+026jQTRYwRSS5UwpesiK3
 J3z2ueKxrQ+tn/6tSNdfmR17o5kG0wFY=
X-Gm-Gg: ASbGncvF9kjbdvnCeyAcrt1NWjroYLvgGcGLGpcthB4U041rtlCkilrJzKGYPVzMbGy
 lvB3wDXRgfOfNeXcuGgLe0qFbLvzeRAX4wwfD7KD0oyN8rU8xQMT+js+mgktivVqVoYs9fJXOHG
 iZ4GzhTqLO4Wu+j2t/bsq8t2zGU4csUGJtWsvrmjReDe+0xQ==
X-Google-Smtp-Source: AGHT+IENNDqlgX44C29SW/20uDvAxSgJswoO6GBz+/U7u+uON0+utfcT6djp6mdQuQGmiHENS15RW7c0XfufhOvkVhQ=
X-Received: by 2002:a05:6122:430c:b0:529:1a6a:cc2f with SMTP id
 71dfb90a1353d-52f2c577188mr15798489e0c.7.1748470632668; Wed, 28 May 2025
 15:17:12 -0700 (PDT)
MIME-Version: 1.0
References: <CAN+1HbqjV7tVbyz0rRMBvXHC+u1nL59X--m8KxuKwvvKhuXY7A@HIDDEN>
 <7733aaf3-920b-8fe2-d02a-ab1a213f0cb6@HIDDEN>
 <CAN+1HbqHU-3P_QpQ6gxWQRx4_q6QE_ZVhZTyhhAD1e13R5hxUQ@HIDDEN>
 <6bd9d4d1-a24c-80f2-1d9a-a7b6dbc8e559@HIDDEN>
 <CAN+1HbpUZy5yeK0Ce1KJ0zvaEZMCSQEutDy1rJ_dvSVOnqUPOw@HIDDEN>
In-Reply-To: <CAN+1HbpUZy5yeK0Ce1KJ0zvaEZMCSQEutDy1rJ_dvSVOnqUPOw@HIDDEN>
From: Ship Mints <shipmints@HIDDEN>
Date: Wed, 28 May 2025 18:17:00 -0400
X-Gm-Features: AX0GCFue5NjzPUeXWdweIz06sHKlamPSVklcqK_GY8vOnLS6TKSGyImctGibk0o
Message-ID: <CAN+1HboiHSNVQ4tOG_-6acxtm1gswqMm0B=fYXTySUeBA9Oi=w@HIDDEN>
Subject: Re: bug#78621: Pixelwise display specified spaces less precise than
 min-width
To: Jim Porter <jporterbugs@HIDDEN>
Content-Type: multipart/alternative; boundary="000000000000f5e1140636398a50"
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 78621
Cc: 78621 <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 (-)

--000000000000f5e1140636398a50
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

On Wed, May 28, 2025 at 6:15=E2=80=AFPM Ship Mints <shipmints@HIDDEN> wr=
ote:

> On Wed, May 28, 2025 at 6:12=E2=80=AFPM Jim Porter <jporterbugs@HIDDEN=
> wrote:
>
>> On 5/28/2025 1:40 PM, Ship Mints wrote:
>> > But... Did you run the repro in question and it worked for you, or are
>> > you saying that this worked for your case?
>>
>> I edited your repro to use that call (see the diff below), and it all
>> looks good to me, as shown in the attached screenshots.
>>
>> --- before.el   2025-05-28 14:58:33.646686778 -0700
>> +++ after.el  2025-05-28 14:58:42.551136757 -0700
>> @@ -12,8 +12,7 @@
>>       (let ((pad-to-width 150))
>>         (cl-labels
>>             ((string-pixel-width-scaled (str)
>> -             (ceiling (* (string-pixel-width str)
>> -                         (/ (float (default-font-width))
>> (frame-char-width)))))
>> +             (string-pixel-width str (current-buffer)))
>>              (insert-pad-to-width (str face)
>>                (let* ((s (propertize str 'face face))
>>                       (pad-width (- pad-to-width
>>
>
> Interesting.  The results got worse for me, not better.
>
> What platform did you test on?
>

In any case, it still doesn't explain the root of the potential bug with
:width being different than :min-width despite the inputs being identical.

--000000000000f5e1140636398a50
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr"><div dir=3D"ltr"><div class=3D"gmail_default" style=3D"fon=
t-family:monospace"><span style=3D"font-family:Arial,Helvetica,sans-serif">=
On Wed, May 28, 2025 at 6:15=E2=80=AFPM Ship Mints &lt;<a href=3D"mailto:sh=
ipmints@HIDDEN">shipmints@HIDDEN</a>&gt; wrote:</span></div></div><di=
v class=3D"gmail_quote gmail_quote_container"><blockquote class=3D"gmail_qu=
ote" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,20=
4);padding-left:1ex"><div dir=3D"ltr"><div dir=3D"ltr"><div style=3D"font-f=
amily:monospace"><span style=3D"font-family:Arial,Helvetica,sans-serif">On =
Wed, May 28, 2025 at 6:12=E2=80=AFPM Jim Porter &lt;<a href=3D"mailto:jport=
erbugs@HIDDEN" target=3D"_blank">jporterbugs@HIDDEN</a>&gt; wrote:</s=
pan></div></div><div class=3D"gmail_quote"><blockquote class=3D"gmail_quote=
" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);=
padding-left:1ex">On 5/28/2025 1:40 PM, Ship Mints wrote:<br>
&gt; But... Did you run the repro in question and it worked for you, or are=
 <br>
&gt; you saying that this worked for your case?<br>
<br>
I edited your repro to use that call (see the diff below), and it all <br>
looks good to me, as shown in the attached screenshots.<br>
<br>
--- before.el=C2=A0 =C2=A02025-05-28 14:58:33.646686778 -0700<br>
+++ after.el=C2=A0 2025-05-28 14:58:42.551136757 -0700<br>
@@ -12,8 +12,7 @@<br>
=C2=A0 =C2=A0 =C2=A0 (let ((pad-to-width 150))<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 (cl-labels<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 ((string-pixel-width-scaled (str)=
<br>
-=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(ceiling (* (string-pixel-=
width str)<br>
-=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0(/ (float (default-font-width)) <br>
(frame-char-width)))))<br>
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(string-pixel-width str (c=
urrent-buffer)))<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(insert-pad-to-width (str f=
ace)<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(let* ((s (propertiz=
e str &#39;face face))<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 (pad-width (- pad-to-width<br></blockquote><div><br></div><div style=3D=
"font-family:monospace">Interesting.=C2=A0 The results got worse for me, no=
t better.</div><div style=3D"font-family:monospace"><br></div><div style=3D=
"font-family:monospace">What platform did you test on?</div></div></div></b=
lockquote><div><br></div><div class=3D"gmail_default" style=3D"font-family:=
monospace">In any case, it still doesn&#39;t explain the root of the potent=
ial bug with :width being different than :min-width despite the inputs bein=
g identical.</div></div></div>

--000000000000f5e1140636398a50--




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#78621; Package emacs. Full text available.

Message received at 78621 <at> debbugs.gnu.org:


Received: (at 78621) by debbugs.gnu.org; 28 May 2025 22:16:15 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Wed May 28 18:16:15 2025
Received: from localhost ([127.0.0.1]:57940 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1uKP4I-0003GD-K1
	for submit <at> debbugs.gnu.org; Wed, 28 May 2025 18:16:14 -0400
Received: from mail-vk1-xa29.google.com ([2607:f8b0:4864:20::a29]:59447)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
 (Exim 4.84_2) (envelope-from <shipmints@HIDDEN>)
 id 1uKP4G-0003Ff-6e
 for 78621 <at> debbugs.gnu.org; Wed, 28 May 2025 18:16:12 -0400
Received: by mail-vk1-xa29.google.com with SMTP id
 71dfb90a1353d-5259327a93bso78522e0c.2
 for <78621 <at> debbugs.gnu.org>; Wed, 28 May 2025 15:16:12 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=gmail.com; s=20230601; t=1748470565; x=1749075365; 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=77tv7u1HQEUgM7LZyS210423SFwfn1hfLryaI7PHdnA=;
 b=mixItbvwV/cjvO/2q8gE3QdoY3nr/o9xsu3zixNG8tI2QbB1T7/uXKywYpZupUpDET
 IyUYPyBTPqV6uKpPCUbvGEKBz4+YyoOR3Vh9D1fANm2MKedMOwIH3KCzTTL3lF+qwCS7
 PlO1WX/dZncMwjp6aFEZoudxb6kiEjFNBcwSS37GYpYwBZ/u0oiNDd46/PEkY2xUKwvn
 WmT+nKwNq3siVBjQufKkMZjeth9rXQ3ltspuygcWXVxX2w74/ffbuI3o/nVYx36W+LsN
 RP5VFzfRcBP5YmlqhW8CErW2XO3l1sAVIugukOqBB0OcJamqxMDV5Ft/JcWhAplQfZM9
 hfgQ==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20230601; t=1748470565; x=1749075365;
 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=77tv7u1HQEUgM7LZyS210423SFwfn1hfLryaI7PHdnA=;
 b=Sak9a+hxe04UTgoqNRMMgk1S6LqxX6rm20725DJJvZkRR6cyTkTGRq5PZK6PQdw6Tr
 BHRoaEXrCVE949TiccEdLwiMPa0z4oBcxhnSUE+j9DursHRCgJHt6RIB5DzLVeLVrVTE
 ycyihdBt8NjXB1XuUN6ppiEXMzD5JPnIVqQr22qWUREwTJDwdZKrkmVflCUJSrLoRXsp
 XvuFdgIM2Jlm495cZNQgDFygL9aoEf71u+ALHP6pIUMe7TndcRThPAjFD5aWXP98L9gr
 YPyGcVTT32eZl1CtyxtVsWLVv6MoSxF7f8UdrkgKqbTYTafNdNHqwHUDN14I5dDzhL86
 9Kew==
X-Gm-Message-State: AOJu0Yxf/GckS9ml0tkIkrkOdPoYnJA4zlRWvrEP7S7zEIAVg/x6hMgD
 O8W8uhkmgpf+HXbTkqvEYU5N9bg1pC+I/VBg03uzkCskfPprBdDtgQD5Lz3BGpXlzjfw3pD7sD5
 KYPcwSgDzc5sSpH1EUmZCoYbn1vdr+bE=
X-Gm-Gg: ASbGncuCBe6OFUu0p77sa1hmZEbsCqsfTDSHOnhy1b9SXdn//ExTw2v3IaW8uSi/AGF
 lFIftIkH9Bz6mJn9nk38XE+9j6KL2Gm7uhJmpO7zgdRHi0xH4uLzotXs48KqWaG4h0KJzsF0tWg
 peRwUFfQQ8X+kRitkOmDepnmffLwKVKHnYgqU0whI3d176WQ==
X-Google-Smtp-Source: AGHT+IGsX4r/5fbCmeruv24XivjEt2dE0Yg2A0rBjZpo6zze13fEmD7NKBLA2EKmCZM+lqSKGAOQgRwryKWvOZ1RMoU=
X-Received: by 2002:a05:6122:82a6:b0:518:7ab7:afbb with SMTP id
 71dfb90a1353d-52f2c583c8bmr14018907e0c.8.1748470564590; Wed, 28 May 2025
 15:16:04 -0700 (PDT)
MIME-Version: 1.0
References: <CAN+1HbqjV7tVbyz0rRMBvXHC+u1nL59X--m8KxuKwvvKhuXY7A@HIDDEN>
 <7733aaf3-920b-8fe2-d02a-ab1a213f0cb6@HIDDEN>
 <CAN+1HbqHU-3P_QpQ6gxWQRx4_q6QE_ZVhZTyhhAD1e13R5hxUQ@HIDDEN>
 <6bd9d4d1-a24c-80f2-1d9a-a7b6dbc8e559@HIDDEN>
In-Reply-To: <6bd9d4d1-a24c-80f2-1d9a-a7b6dbc8e559@HIDDEN>
From: Ship Mints <shipmints@HIDDEN>
Date: Wed, 28 May 2025 18:15:53 -0400
X-Gm-Features: AX0GCFt6u__dMCAyk-U28IJwXxcZWIHV8fY12RYGnaFtxOJaSRZlFV2ln7p9XCQ
Message-ID: <CAN+1HbpUZy5yeK0Ce1KJ0zvaEZMCSQEutDy1rJ_dvSVOnqUPOw@HIDDEN>
Subject: Re: bug#78621: Pixelwise display specified spaces less precise than
 min-width
To: Jim Porter <jporterbugs@HIDDEN>
Content-Type: multipart/alternative; boundary="000000000000e7199306363986a1"
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 78621
Cc: 78621 <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 (-)

--000000000000e7199306363986a1
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

On Wed, May 28, 2025 at 6:12=E2=80=AFPM Jim Porter <jporterbugs@HIDDEN> =
wrote:

> On 5/28/2025 1:40 PM, Ship Mints wrote:
> > But... Did you run the repro in question and it worked for you, or are
> > you saying that this worked for your case?
>
> I edited your repro to use that call (see the diff below), and it all
> looks good to me, as shown in the attached screenshots.
>
> --- before.el   2025-05-28 14:58:33.646686778 -0700
> +++ after.el  2025-05-28 14:58:42.551136757 -0700
> @@ -12,8 +12,7 @@
>       (let ((pad-to-width 150))
>         (cl-labels
>             ((string-pixel-width-scaled (str)
> -             (ceiling (* (string-pixel-width str)
> -                         (/ (float (default-font-width))
> (frame-char-width)))))
> +             (string-pixel-width str (current-buffer)))
>              (insert-pad-to-width (str face)
>                (let* ((s (propertize str 'face face))
>                       (pad-width (- pad-to-width
>

Interesting.  The results got worse for me, not better.

What platform did you test on?

--000000000000e7199306363986a1
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr"><div dir=3D"ltr"><div class=3D"gmail_default" style=3D"fon=
t-family:monospace"><span style=3D"font-family:Arial,Helvetica,sans-serif">=
On Wed, May 28, 2025 at 6:12=E2=80=AFPM Jim Porter &lt;<a href=3D"mailto:jp=
orterbugs@HIDDEN">jporterbugs@HIDDEN</a>&gt; wrote:</span></div></div=
><div class=3D"gmail_quote gmail_quote_container"><blockquote class=3D"gmai=
l_quote" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,20=
4,204);padding-left:1ex">On 5/28/2025 1:40 PM, Ship Mints wrote:<br>
&gt; But... Did you run the repro in question and it worked for you, or are=
 <br>
&gt; you saying that this worked for your case?<br>
<br>
I edited your repro to use that call (see the diff below), and it all <br>
looks good to me, as shown in the attached screenshots.<br>
<br>
--- before.el=C2=A0 =C2=A02025-05-28 14:58:33.646686778 -0700<br>
+++ after.el=C2=A0 2025-05-28 14:58:42.551136757 -0700<br>
@@ -12,8 +12,7 @@<br>
=C2=A0 =C2=A0 =C2=A0 (let ((pad-to-width 150))<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 (cl-labels<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 ((string-pixel-width-scaled (str)=
<br>
-=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(ceiling (* (string-pixel-=
width str)<br>
-=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0(/ (float (default-font-width)) <br>
(frame-char-width)))))<br>
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(string-pixel-width str (c=
urrent-buffer)))<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(insert-pad-to-width (str f=
ace)<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(let* ((s (propertiz=
e str &#39;face face))<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 (pad-width (- pad-to-width<br></blockquote><div><br></div><div class=3D=
"gmail_default" style=3D"font-family:monospace">Interesting.=C2=A0 The resu=
lts got worse for me, not better.</div><div class=3D"gmail_default" style=
=3D"font-family:monospace"><br></div><div class=3D"gmail_default" style=3D"=
font-family:monospace">What platform did you test on?</div></div></div>

--000000000000e7199306363986a1--




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#78621; Package emacs. Full text available.

Message received at 78621 <at> debbugs.gnu.org:


Received: (at 78621) by debbugs.gnu.org; 28 May 2025 22:12:26 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Wed May 28 18:12:26 2025
Received: from localhost ([127.0.0.1]:57916 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1uKP0c-0002w4-0u
	for submit <at> debbugs.gnu.org; Wed, 28 May 2025 18:12:26 -0400
Received: from mail-pl1-x62e.google.com ([2607:f8b0:4864:20::62e]:43181)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
 (Exim 4.84_2) (envelope-from <jporterbugs@HIDDEN>)
 id 1uKP0Y-0002vS-Pn
 for 78621 <at> debbugs.gnu.org; Wed, 28 May 2025 18:12:23 -0400
Received: by mail-pl1-x62e.google.com with SMTP id
 d9443c01a7336-22e09f57ed4so13051335ad.0
 for <78621 <at> debbugs.gnu.org>; Wed, 28 May 2025 15:12:22 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=gmail.com; s=20230601; t=1748470336; x=1749075136; darn=debbugs.gnu.org;
 h=in-reply-to:from:references:cc:to:content-language:subject
 :mime-version:date:message-id:from:to:cc:subject:date:message-id
 :reply-to; bh=MB1d39o2VVzc1lWqaYXyAyVke4GvXon7MAZolIaUT8w=;
 b=IHDoCSGAG+cKUiDz3WV3pwhc3526XSyZSYsJ+Cs9UX5xbHNB2T5wYsp0btxxoGHVee
 2IQTjy8N4Cs8a6d77bOQGvW5wBEU7isCOz3Vv04iLcBxTurfAEYRLy1q5oBJQ2dsNXRt
 Ddc0jHHGbTjfFWnQEjfdRiw88RNBZ411ag74J/bvZ8jhEf/DzKM+1xRH+wbR19wLiCii
 sN8wi5Iyyl+ZbsgDxJi45EsMq11HBdA89RluTmzPDC6rXmB3BgysN5yRwA156C7ysXhj
 z9l+ro8CCLvqCp0Rn1m+4LpJVMXOvlvU+IKOgB3j1WhHBhES5h9nBa8ZVj7aip5GLEuN
 UujQ==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20230601; t=1748470336; x=1749075136;
 h=in-reply-to:from:references:cc:to:content-language:subject
 :mime-version:date:message-id:x-gm-message-state:from:to:cc:subject
 :date:message-id:reply-to;
 bh=MB1d39o2VVzc1lWqaYXyAyVke4GvXon7MAZolIaUT8w=;
 b=l1tZrfNOkslpZyVGIVXEXCOjEqkPSyAHp1JQeWFbbJwDbyWUdFOzxwgVxJGIxlc2T6
 vXw+nyW0rpTSyYMEt7U7cKUnGZC4m/CLOjcHX88x0of24Uun1K2gLnmYAkjP6tCc+0pX
 hsht+0m64qlHWJgFZBn1ocO27FTqx49dxO4kKR4monyP3AIQ+8Pmfys8XvTFOcLnJNVI
 9ROsen9WNMF4eoXbZeQqgfmrVUyqz2Au9A7kKV72HYcMB+pBQY11c0mNTz+5LeaaQwSy
 vhXK3FBdd7wjg7Covg7LHojIhnCJbi63Rm9ueT3+d7tuNEm8QL0Le9lPUdACaER9bv0C
 E6sQ==
X-Gm-Message-State: AOJu0YzZ5j8iop1FPqi+5wRdmwqkgx7NGSGbPDm+TLfHfK+8mS63h3MW
 bLHpYTPvF4RoSRIaeWRKNnrSJyPTXmWAJz2fN0J/qAnb2mYMZ8sT3hXB
X-Gm-Gg: ASbGncthexN+BOpVwVlPLZDS+p5Mf+DyWtE4bLQ+6GlpkE4vWfe/fdy7n3x8BpMdK2x
 6dwczqj0y6Zn7TJv9uen8kfnf7HcqoQ021CPs3PUXZ2I0TmlpRZpVUeM9bYjS4jOF8kM7unHysz
 Ptk0cVULbsaLOcioizba+bnM8QWwxPa+2Yj0CcxDts0eF13aniVVKPV53o29pae/zsoQetBMn9E
 Imm/TJy5/aj0i2fOAfb9aNZi3ypseVYEfz+3fQhtyIMg4Cdys5r/4SxHjHD9dxKfshAor6Me+NK
 OH4xgKbhYFeRr45eL5fV9wiawmy9ZNv80L8I/45WDthxFNb32mWou/NSM2WpZfLzGiyb8AO9/oN
 seCEQQv6Db7FUQ5G1Bs4nV29tKpbeiNJtkaSEGnobV+6SMqEzwb+m
X-Google-Smtp-Source: AGHT+IGuwdIAOg3DcIFDhgk546Ff+tnsqGqpw8bLtsaHN/zh0RYY8IZI4eLbqZyYy0MZxibVvParkg==
X-Received: by 2002:a17:90b:4a0d:b0:310:b602:bc52 with SMTP id
 98e67ed59e1d1-31214e11d96mr1698175a91.2.1748470336118; 
 Wed, 28 May 2025 15:12:16 -0700 (PDT)
Received: from [192.168.1.2] (syn-076-168-144-128.res.spectrum.com.
 [76.168.144.128]) by smtp.googlemail.com with ESMTPSA id
 98e67ed59e1d1-3121b202763sm140816a91.0.2025.05.28.15.12.14
 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128);
 Wed, 28 May 2025 15:12:15 -0700 (PDT)
Content-Type: multipart/mixed; boundary="------------U4LDQgR0uj7riKGeJtFS2Esd"
Message-ID: <6bd9d4d1-a24c-80f2-1d9a-a7b6dbc8e559@HIDDEN>
Date: Wed, 28 May 2025 15:12:14 -0700
MIME-Version: 1.0
Subject: Re: bug#78621: Pixelwise display specified spaces less precise than
 min-width
Content-Language: en-US
To: Ship Mints <shipmints@HIDDEN>
References: <CAN+1HbqjV7tVbyz0rRMBvXHC+u1nL59X--m8KxuKwvvKhuXY7A@HIDDEN>
 <7733aaf3-920b-8fe2-d02a-ab1a213f0cb6@HIDDEN>
 <CAN+1HbqHU-3P_QpQ6gxWQRx4_q6QE_ZVhZTyhhAD1e13R5hxUQ@HIDDEN>
From: Jim Porter <jporterbugs@HIDDEN>
In-Reply-To: <CAN+1HbqHU-3P_QpQ6gxWQRx4_q6QE_ZVhZTyhhAD1e13R5hxUQ@HIDDEN>
X-Debbugs-Envelope-To: 78621
Cc: 78621 <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>

This is a multi-part message in MIME format.
--------------U4LDQgR0uj7riKGeJtFS2Esd
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 7bit

On 5/28/2025 1:40 PM, Ship Mints wrote:
> But... Did you run the repro in question and it worked for you, or are 
> you saying that this worked for your case?

I edited your repro to use that call (see the diff below), and it all 
looks good to me, as shown in the attached screenshots.

--- before.el   2025-05-28 14:58:33.646686778 -0700
+++ after.el  2025-05-28 14:58:42.551136757 -0700
@@ -12,8 +12,7 @@
      (let ((pad-to-width 150))
        (cl-labels
            ((string-pixel-width-scaled (str)
-             (ceiling (* (string-pixel-width str)
-                         (/ (float (default-font-width)) 
(frame-char-width)))))
+             (string-pixel-width str (current-buffer)))
             (insert-pad-to-width (str face)
               (let* ((s (propertize str 'face face))
                      (pad-width (- pad-to-width

--------------U4LDQgR0uj7riKGeJtFS2Esd
Content-Type: image/png; name="before.png"
Content-Disposition: attachment; filename="before.png"
Content-Transfer-Encoding: base64

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
--------------U4LDQgR0uj7riKGeJtFS2Esd
Content-Type: image/png; name="after.png"
Content-Disposition: attachment; filename="after.png"
Content-Transfer-Encoding: base64

iVBORw0KGgoAAAANSUhEUgAAAaYAAAOKCAYAAADQgPRnAAAABmJLR0QA/wD/AP+gvaeTAAAA
CXBIWXMAAC4jAAAuIwF4pT92AAAAB3RJTUUH6QUcFgQdMHHxogAAABl0RVh0Q29tbWVudABD
cmVhdGVkIHdpdGggR0lNUFeBDhcAACAASURBVHja7J15WFXV+oDfMzKPMgvOU445FSpOEZKW
5jynqTctLUtvDleztNJStH7m1dJS08ShHHEKtboppqJlhUPOE8ogDgjCgcM5+/cHiKAMB0FB
+d7n0Ufk7LPX3met/a1vrXXWq9q6daui0+nQaDRoNBq0Wm32v9VqdfYflUqV698AKpUq178F
QRAEobio5RYIgiAIEpgEQRAEQQKTIAiCIIFJEARBEIqI9sqVK7kWPOS38OHO4oc7/8658AFk
8YMgCIJQQoGpUaNG6HS67OCk1WpzBSpfX98C38BsNktgEgRBEEouMFnyouTk5DwzKK1WK3dQ
EARBKFGKNMdkPLWCIc18sLfSYxv0ZcmUwHyWzwIc6Lj4KkqJvKGRfeNq4f1aOOlFPfLkMgY9
7Y61Ro1V4AIum6WCPHzSCHvFjVZzziC3+2FgaXsoYrsxX+SLtg4ELYwtoXYrCEXMmLLyJsI/
ncTBVsu5GBlEBa0KrfatJ+hWJLN9+gQiA1Zy5fcgXDVSOYQnAR0tQk4SIzdCeCIzJtMloo6l
0ah9wAM9tJXrK+nupEZXfwqHM4p6tIGTayfStbEfTrZO+Dbpzaf/i8NkUc/uMgsCre5btKGt
NZ79xpzXd4G/jxh4+rnW919fxmV2fjKAltUrYGvvQZ3n3+K7o8nSU5SM64knfecIKtYYy16j
3AuhLAYmJZVUgxYr3YMsclC4uWM9uys2pcGVzWw6mlGkY+PWv0bQa7uo9J/tnLkex5/Le5G8
eQtnTJa+h5baEyMxKgpK1p+Mk7Pw1+W+vhSDDiu96r5Mas+kF+i5FF5dGcXVuKOEvdeIPzbu
JkXqjyAIQukEpi+DXbF1DGDW8Wus6OaATqe7f47JuJex1bTYdFnOzfveIZGdG37Fo8tUXm9x
jrCwf+7Ldm4fnk+fBu7Y2rpTt/OH/BSf1f81/cOST9Zi89p/CeldHzdra9zq9+LjOcOolZXZ
GP5ZwesBlXG0caBSmzFsumSy/A6YL/JFWytUuuZ8ciyB5Z2tUalU2XNMStwPzFx4lZdDFjD8
WR/s7Nyp1e5ffD65E3ZSf8o05rhdTOvaCB8Haxz9mtJrxs/E3ukTmU4yy9+edqOn0bO+G7a2
HjToMZOI63fzYMP57Uzv5081VzvsPevRcdx6zqbnzuTPbJhEtyaZmbxf836ERCRkZ9JK4u8s
HN6Omm62WNv70KTvbPZeL2KenVe7Mu7j3Vp+vL4z7d4r5vzcNjh3XkaConBjWWesVSpUKg0e
ecwdFdRuMv76gIY6FVYdFnHlzOcE6FWoVFpqjttHzuQp49wPvNWmSuZ7tJ1AeLyMIwiPKDC9
EX6dlFsRjK9TgYEbkjAajaTsfMPys9z6iY0/29C+w3MEBz/NyU2bOJErdqSzb9tpOv9wmusX
tzIkbR4Dx2zgugLKzQPsPWqLf9vGWOX13qajfD5oJL/W/Zw/r8YT+ZEre7ZfwOLQpK7E6F/T
UIwH+c9TbgzabEBRFNJ+GklFNRgP7yUyvTFtWzpKbXmsMBI5ZySf3+xL2LmbxB5cSn/jFjad
NOWqd3u3naX7+rNcvxDGgJsh9J8QTlLW7/YsXYGx50L2Xb5BzP6Z1No5jMHzT2XXreRfJtDx
1S14vLuF09fjiQodSHpEBAkKYL7CyqEvMfVCB746FMuNSzsYrf6SPu9s4kZxn926hgQ8k86h
yDP31PMU/th/nDoB/rioVLgM3oxBSee3d6ujKWK70Taaxt9GhbQdw/GpPoaIdAVFyeBUSAt0
Oe7x/s1RtFkcRfzFrfRPns/Er45gksonPLKhvEIbSys+O5tBatggnO/5VdLPG9hFWzo8Y4Nv
YBC1j20i7JQp11BbvcHj6VfHCWu3Z3hr7Mso4WHsTQPl1k0SFUecHfMuquncdsKO1mfY+K5U
s7fBq+14xnZyIPeAXAYnPn0GXY45JptuK0m24LIyEm+SpHbC2VEFpLPrDR80KhUqmx6svi0V
qPSxost3Cez9d/V7KrMKnU6HSq1Bq9Fi69WQbh98xoi6OR/ROhoOmUCfWo5Yu/szesxLpG3b
yIF0AD1B00KZ2qMRnjZ6HKp2ZHivakT9dhhDVhDYtTiUpB6f8Fn/RrhbW+Fc60UmT+yKuwrM
l9fzTbg3I+dMILCKIzYu9Rk4fgCu29exx1DcdmXLMwENOXvgEInmGBYFO1Bz3H6MxiPsP+xE
i1bVKGwa2LJ2Uxha6g8cQ4+aDli7t6TXC5U5d/w0GVIphTITmPIlmV827MDQMogAO9DUDiLQ
9wgbN+fs7anx8PbMbkxaDy/cDNe4lqKgcnTGUXWLm7fyntpWrl/lusoDb0919oPK09v1ngu7
f44pdUN/7C1pek7O2JtvkZikAHqe//IKhr1jqS6r9so4WppMXM38FlFMfNGfxk3b0GPcKo6l
5K7+nt4e2XVF7+mFS+JVEoyZGdPpdRPo0rgSLjZa1Got9d/7A0PKbQwKoNwkJtaAT/WqWOc1
jBgTTUzaYd5voM3uDOkaf0RUUgJXk4ubMqnwaNGSSn/v53DCr/x8qwHukTs5Gn2Ig9ebE/C0
rtB3sKzdFF4OZ1eX7GN0eh2mDKMsQhEeg8B0+1c2hl8jKWwwbmoVKp0/IacMHN64mfPZNdhM
fExcdoXOiI/lmo0b7rYqVM7NaflUCvt3H87z+xXqCh64EU/snTkp0oiLuVFijUP3dAua6/4k
4oCkR48bKocG9J/+HT/+doiD4TOo+csIRiw6m6NumImPic/+2RgXy3WHCrjqQIlfyTvDNuD6
7y2cuJaGyWzkr6mN0CpK5hySyhlvL2uunDlPXgmQ2ssHT+sgvooxZ3eGFEVBMWxnmHvxd0nR
1gngWfPv/O+7HSQEf8wIr71sWb+X4w0CeNbWgoZvabtRqVApZgk2wmMamPJZ/JCyewM/Jrdn
wSVTduNM2TkCj8Mb2XwhOxRxdPlsVp+4heHaIRb832bUnbrTygrQPMXQCV1JXvgm7/5whITU
ZK78uY6p45dwygTqKp14ucFRFoeEce52KrF75jB3+60SW8qt8urFuGHOrBs/mmV/xGEw3ubi
iQskyxxvGSedne/3Y8rqSC4kpmG4nUiywYxGkzPVNfLXtyGsPZWEISGSeXO3YtXxZfz1oKSn
kJqhx6GCC/a6dGL3L2T68pyLdmwJHNIP+3WTGLfmCAlp6dw6s4OQ2WFcVUDt252hgUeYM3YR
+6KTSUuK5s/Nsxk6ckmODtmDtyv0TQlofJLFc4/TJLgVwUE6lnz+K54tW+JlQau2tN2o3T2p
cPV3Io4lSXASnpSMKZWIjdtJatWblyvePZVNQB+6evzBhs2Xsiq7nhYvVGF996q4+HZksdVo
Qud0xlmVWUTv3ovZ+VV7zn0cTDVXH5oPWY2+YyeqaTID19vfLqDtkdE0quBO8//E0+KFyveM
sd8/x6Sy6c3aNEuuwZH2s35kdZ/bzO9WG2c7d/w/vU6Xme/yvK1UoLKLnoBBfVCvf4u2lZ1w
b/IOUa2+YN7QyjkqvZ5Wwb6s7FwZF79OLLMbw4pZnXAE1BUH8un0euwZUhtnRz/afxhN665P
5/pGukPgLLYuDib6k2CqOVWgbt/l6FsH4KYC1L4MWrqJsQ5reLWxJ06+LRjydRyBI7pTqSRa
ncoJ/4DaXDc/TYcmVngEBeF3zcwzAU9lltG4n/G1tKhUelrOPkXsNy9gpVKh8RrOjnRL2w1o
6w/lvYEmvmxdAZ36/lV5gvBQRjsiIyOVwjZxLWivPNnEVSgeaYS9UpGZTx9gz30LGB4ippPM
atWUPW9cJGywC1J7BaHcZEyCIAiCUDRke3ChlMlc7t1FboQgCFlYNJRXEDKUJwiCIDzSjOnW
rVu55pfutdgKgiAIQkkic0yCIAjC4xuY7hUFlohIT0SB5ZyHra148PrwaM8voj5BuEOxRIFP
1kieiAKfTEpblCeiPkF4eBmTiAJFFCg8ckTUJ0hgKjCyiChQRIGCIAhlITCZo/MVBeaagxFR
oPAISds4AJdabQiu64ZLzd5MmdyFqg6O1BgQykVzZoemQFFe1hxN+4nzeLOoojsR9QlCKQcm
tW++osCKluZbIgoUHgKKoQajfopgstdmFpzoxe6jc6m3Ywmbr5iBQkR5mRHmwUR3IuoThFIO
TJYiokDhEaOp0pCGntVoUMeVKo0a4+P9FLXdE4iJt3R934OK7kTUJwiPR2DKFxEFCg8HlU6P
DtBotej1OlBp0WoyyLD4yVyI6E6JY1GwdVZnRkvVMRFZw2gi6hOExzswiShQeMSU2CyLypPh
4YaszkwG5z4PyB5GE1GfIDwOgUlEgUJ5QkR9gvC4ZkwiChRKicJEecXusYioTxAeFoXuLu7o
6FjgJq53NnKVDV2FB6OURIGCIJTXjEkQBEEQioaIAoVSRkSBgiBIxiQIgiBIYBIEQRAECUyC
IAiCBCYLMR1nRjMHuoYmlejbmi/9l/YOz/PVFQu/ZGQ4wsJ+DXG30aBv/CFRsslYKfCwRYHl
HREVCo8f5Xjxg8K1de8z6VhHNsf+SUsnSR6FJxERFQqSMeVMizg2oxl6tRNdlsU9QK/KTELk
N4zt9izV3e2xsrLDo1Zr+n+wluOWbLugJLCkk/V937lSabwZsTMdMHH672NomrSlWa6gZOba
wSW826MFNT0dsNZb4+xbn8BB0/g+KlF6h5JxlStEVCg8WYEpPZKl392g6+BniFyyinNFemoo
XN32Jq0DP+R4w3F8/8dlbiVf458fQ+iq38yyHYkWvo+GKu/sIT3H5q2KKYaFQXpAITXFgN5a
f895RxEQOJUjdccQGnmRm7dvEX1oLZPb3Wb1F+uJlqefIAhC6Qam6EUv4d0mhOM55l9Mp+bQ
yjmAOadMgIkTM/2xrTuJQzl2dU7+aTFrnV5j6tyJdL+8jGV/Z9wXfBIPzmNgcz8crW1xr9eF
aTtjM3u96QcIGbME9RurWTetJ039nLDSWeNazZ/ek5fxafdMsYbx/EbeDaqJq40NLlVbM+Lb
IxZaZW+yvIsj7f97gctfBWGl0lF/yh9kpB8gZMxSNG98z/qPevNMZResdXrsverw3NBZrP96
CH4y4vfYYI7bxbSujfBxsMbRrym9ZvxM7J1qaDrJLH972o2eRs/6btjaetCgx0wirt/NiQ3n
tzO9nz/VXO2w96xHx3HrOZtrAsbAmQ2T6NbEDydbJ/ya9yMkIiE7q1YSf2fh8HbUdLPF2t6H
Jn1ns/d6EXPuvPagFFGhUN4DU8Wu/Wl9dg1r/r5THTM4uiqU48++Qp/83A9KAmGLf+LpUUN4
yrEdo4boWb10L4bcKRW7V++h0dxI4m6cY/O/zCzq+yrfXDBjOrGDnRdr0K3vM+S7HZ3pGJ/1
G8xGz8n87/INLv3vfbx2rOGQRUMOzgwKu8Uvb1ai4us7SVOMHPmoCap/wtlxsQZd+zRDtsF7
3DESOWckn9/sS9i5m8QeXEp/4xY2nTTlqoN7t52l+/qzXL8QxoCbIfSfEE5S1u/2LF2BsedC
9l2+Qcz+mdTaOYzB809l61qSf5lAx1e34PHuFk5fjycqdCDpEREkKID5CiuHvsTUCx346lAs
Ny7tYLT6S/q8s4kbxX12i6hQKO+BSeXeif7PJ/DDygOkAaQfInT1ZdoP6pFlsNVQe8J+Uo7N
oFnWUgrzxTUsPdqJN7t7okJD3WGjqLt9CeG5RuC01H/9U8a09MbGxhP/0bMYWXUPoZsukXEt
ngTc8XLPv3gZR79n1RF/JsweTENXa+wrB/He9EFUynWIifP/1xp9zjkm6/xX7ZmvX+XaPedN
Cu2KTZE3fhUeHZk7R+y9b589FTqdDpVag1ajxdarId0++IwRdXM+onU0HDKBPrUcsXb3Z/SY
l0jbtpED6QB6gqaFMrVHIzxt9DhU7cjwXtWI+u1wVgcrhV2LQ0nq8Qmf9W+Eu7UVzrVeZPLE
rrirwHx5Pd+EezNyzgQCqzhi41KfgeMH4Lp9HXsMRQlCeQk4RVQolPPAhMqZoP4vkrZhJb/e
htSIUNYldWRQZ7d8KrGJ498t4dcTC3jePvOBrvYezMbTG/lmQ86lpRoqVa10d1mgphJV/VTE
x8RDBQ8qcJXYq+YChmliuepQmcqud0uh86uKb64Wmccck2EXr/vkXXK1qzsVuEpcjvM6DNhI
qpLZc/SSYbzHCC1NJq5mfosoJr7oT+OmbegxbhXHUnJXf09vj+xGoPf0wiXxKgnGzIzp9LoJ
dGlcCRcbLWq1lvrv/YEh5TYGBVBuEhNrwKd6Vazzqp8x0cSkHeb9BtrsTpGu8UdEJSVwtdjO
FBEVCuU9MAF2bfvTzWoroeGX2LViE0qXVwhyzOfFaftZEqow6U/j3WCgKKTu6MfRpas4a74b
wC6eu3S3d2W6xPlLCh7eHuhqd6BDpdNs/P4QqfkV3NML96QLXMgxZp9x6TzRxRhH0NTpQJDf
aTb88Hu+5xUeH1QODeg//Tt+/O0QB8NnUPOXEYxYdDbHg9NMfEx89s/GuFiuO1TAVQdK/Ere
GbYB139v4cS1NExmI39NbYRWUTI7VypnvL2suXLmPHklQGovHzytg/gqxpyrHSiG7QxzL/5O
/CIqFMp9YMLqGfr3ciN83pv83zYHer7SOsccTO7FD0m7FvO9OZDgp3J/Rcra/wVa/fNtjkUQ
GRxZ+B/m7Y/DYIgncsFEFpwNoF8XP9T6Zxn32RBMC/rQ68MNHL6chDEjjRvnDvDDjFeZuOEm
2ro96VN3PyETVnD0Rjopl35m+pTlXCxOC9L7M+7zIZjm96bn1HUcuphIusmE4dpp9u47SYrM
6z5GpLPz/X5MWR3JhcQ0DLcTSTaY0WhyptRG/vo2hLWnkjAkRDJv7lasOr6Mvx6U9BRSM/Q4
VHDBXpdO7P6FTF/+T475E1sCh/TDft0kxq05QkJaOrfO7CBkdhhXFVD7dmdo4BHmjF3Evuhk
0pKi+XPzbIaOXJLD3GwB+Qg4RVQoSGBCR8O+fan++w72+fZlYHN9PuMDVwlbvAmlfTCN7x1N
sGvDCy0v8N3iPVnZiJ42vVty6K2muDtVptMCE0NWLuW1KmpAhfuL89mz8z1q/D6D7g09sbN1
pXbweLbp+vBasDNo6/PvVUt4KXoaAd6O+LR+n8uBvWmmyz2seN8ck8qazstu5PN9JBUeL84n
Ytf71Pk7hL7NKuJgbYt73U5MOtyQjzeH8JKVVJrHAz0Bg/qgXv8WbSs74d7kHaJafcG8oZVz
VHo9rYJ9Wdm5Mi5+nVhmN4YVszrhCKgrDuTT6fXYM6Q2zo5+tP8wmtZdn871jXSHwFlsXRxM
9CfBVHOqQN2+y9G3DsBNBah9GbR0E2Md1vBqY0+cfFsw5Os4Akd0v2ce9EHTQREVCk/waIeI
AoXSpZREgaaTzGrVlD1vXCRssAtSewXhscuYBEEQBOHRIKJAoZQRUaAgCLmRoTxBEAShTCFD
eYIgCIIEJkEQBEEoW4FJRIFCNg9bW1FEAV6pnV9EfYJwBxEFiijwCae0RXki6hOEMpQxiShQ
EIqLiPoECUwl2qJEFCgIgiA8hMAkokARBZZF0jYOwKVWG4LruuFSszdTJnehqoMjNQaEZu2X
WIgoL2uOpv3EebxZVNGdiPoEoXQDk4gChbKKYqjBqJ8imOy1mQUnerH76Fzq7VjC5itmoBBR
XmaEeTDRnYj6BKF0A5OIAkUUWFbRVGlIQ89qNKjjSpVGjfHxfora7gnExFs63vqgojsR9QlC
qQYmEQWKKLCsotLp0QEarRa9XgcqLVpNBhkWP5kLEd0pcSwKvrOARkvVMRFZw2gi6hOE0g1M
iChQeMyG+Eos8nkyPNyQVYczOPd5QPYwmoj6BKGUA5OIAkUUKNxbV0TUJwilG5hEFCiiwMeN
wkR5xc6mRNQnCA8L2V1cKGVKSRQoCMLjnjEJgiAIwqNBRIFCKSOiQEEQJGMSBEEQJDAJgiAI
ggQmQRAE4UkPTMZTKxjSzAd7Kz22QV9yWb5YIRSbhy0KLO+IqFB4/CjC4odkwj+dxMFWy7kY
GUQFrQpZIS4IZR0RFQpPcsZkukTUsTQatQ/AVVP0EynXV9LdSY2u/hQOF2WXyfRtDHXTZH5n
Sq3BytmPpj2mEX753r2HzJz5rAuv/5hXf8/AybUT6drYDydbJ3yb9ObT/8VZtAuz6fRsWuhV
qNVarJ18eKrdIGb8eOH+XqWSwJJOdjn2U7tTrMssCLS677tf2lrj2W/RNyUz+GNKfXT3Cg+t
X+AbSxUHGZfZ+ckAWlavgK29B3Wef4vvjiY/IT1dybgeJiIqFMp2YFJSSTVosdI9SJqkcHPH
enZXbEqDK5vZdLSo+x9b0WP1bRSzkVsnNzAwdT7931xFvAKYL/Htaz35YMu5TK2G6RoHFw6n
90e/Ze6GjkLc+tcIem0Xlf6znTPX4/hzeS+SN2/hjKX76ukaM+3vFBLP7+XrAWpCewfydviN
IjzYtdSeGIkxx96BGSdn4a+z/A7o28zlginnZrQ/8i8PSz6LZPZMeoGeS+HVlVFcjTtK2HuN
+GPjbgvdVYIgCGUtMJmj+TLYFVvHAGYdv8aKbg7odLr755iMexlbTYtNl+XcvO9NEtm54Vc8
ukzl9RbnCAv75wGdMWqsPJrQs1M9Uo9Fcd4EqP0Y/PnHNDwwmZGLDrL9/REsNb/KvP+0xArA
9A9LPlmLzWv/JaR3fdysrXGr34uP5wyjVhEyPxUarFyqEvDaAj7ra2DFZz8QU5IpR4H378GP
V+J+YObCq7wcsoDhz/pgZ+dOrXb/4vPJnbB7wiu3OW4X07o2wsfBGke/pvSa8TOxd/pEppPM
8ren3ehp9Kzvhq2tBw16zCQix6bAhvPbmd7Pn2qudth71qPjuPWcTc+diZ/ZMIluTTIzcb/m
/QiJSMjusCiJv7NweDtqutlibe9Dk76z2XtdKf7nKqJCodwHJrUvb4RfJ+VWBOPrVGDghiSM
RiMpO9/I8jFZwK2f2PizDe07PEdw8NOc3LSJEw8UmRTS4g+ycuPfOD/jTw3N3bCRc75LpVJl
KzmUmwfYe9QW/7aNKZlt7mxo8mwDMv48SJQxd+hSAWVt2s14eC+R6Y1p29KxnFVtI5FzRvL5
zb6EnbtJ7MGl9DduYdPJnBUvnb3bztJ9/VmuXwhjwM0Q+k8IJynrd3uWrsDYcyH7Lt8gZv9M
au0cxuD5p7I7Vcm/TKDjq1vweHcLp6/HExU6kPSICBIUwHyFlUNfYuqFDnx1KJYbl3YwWv0l
fd7ZxI3iPrtFVCjIUJ6ljaUVn53NIDVsEM73/Crp5w3soi0dnrHBNzCI2sc2EXaqKNU3jXV9
7VCp1Fh7tWR6zMt89lFnXFWZQ3nLxkzmz+YfM394czp+uJBXWcKoTzKH8pRbN0lUHHF2LKlL
VWHvYA9JidzKmTGqrLGxUWNtY51HcMrgxKfP5Jonsum2kmQL7x9A+u63qay5c7wa+37rSbPg
+IzEmySpnXB2VAHp7HrDB41KhcqmB6tvPwlVOHPniL337bOnQqfToVJr0Gq02Ho1pNsHnzGi
bs5HtI6GQybQp5Yj1u7+jB7zEmnbNnIgHUBP0LRQpvZohKeNHoeqHRneqxpRvx3OMjGnsGtx
KEk9PuGz/o1wt7bCudaLTJ7YFXcVmC+v55twb0bOmUBgFUdsXOozcPwAXLevY4+huO1KRIWC
BKZikswvG3ZgaBlEgB1oagcR6HuEjZtz9PbyFbLdffj0WH0bRTGTfuMkP7x8grdemkRESuZQ
3qtfr+XDztWwAdBUoPnrX/PDlMyhPJWjM46qW9y8VVJT4wrJSclg70TuWKfDwdEOR2fHPBr3
/XNMqRv6Y1+Es+aeYzKTvKq7RRmg1skZe/MtEpMUQM/zX17BsHcs1TVPetXW0mTiaua3iGLi
i/40btqGHuNWcSwld/X39PbIbgR6Ty9cEq+SYMzMmE6vm0CXxpVwsdGiVmup/94fGFJuY1AA
5SYxsQZ8qlfFOq9hxJhoYtIO834DbXZnRNf4I6KSEriaXNyUSUSFggSm4nH7VzaGXyMpbDBu
ahUqnT8hpwwc3riZ83dqcAFCtnsbgs6pOkEjevPU2S1sP56R61Kqjw3jqxdyKzlUzs1p+VQK
+3cfJr1ELiiVw5FH0DZuToNci+31vLg0lv3ja1GWnvm6p1vQXPcnEQdul7vKrXJoQP/p3/Hj
b4c4GD6Dmr+MYMSiszkenGbiY+KzfzbGxXLdoQKuOlDiV/LOsA24/nsLJ66lYTIb+WtqI7SK
kjmHpHLG28uaK2fOk1cCpPbywdM6iK9izLmEmYphO8Pciz/gK6JCQQKTJeQz+Z6yewM/Jrdn
wSVTduNM2TkCj8Mb2Xyh6NU9Izma31Zu5qiuGtV9LAgBmqcYOqEryQvf5N0fjpCQmsyVP9cx
dfwSco0mFrL4QMFE+s0L/LbkLd5dbcWAMb3wznn38lsubimm48xopscq4LMclt/i33+VVy/G
DXNm3fjRLPsjDoPxNhdPXCD5iZ+jTmfn+/2YsjqSC4lpGG4nkmwwo9HkrDNG/vo2hLWnkjAk
RDJv7lasOr6Mvx6U9BRSM/Q4VHDBXpdO7P6FTF+ec9GOLYFD+mG/bhLj1hwhIS2dW2d2EDI7
jKsKqH27MzTwCHPGLmJfdDJpSdH8uXk2Q0cuudshK8bnKqJCQQJTMbKLiI3bSWrVm5dzrJSw
CehDV48/2LD5koWVPWuOSa3GxqMRgza68ObK+bzirbLoEr17L2bnV+0593Ew1Vx9aD5kNfqO
nahmaWpjPMz7DW1wqPQsQ5el02fVLr54waUI4/H3zzGpbHqzNuckkZLC7VSwdnPHoURXUDjS
ftaPrO5zm/ndauNs547/p9fpMvNdnrd9kqu2noBBfVCvf4u2lZ1wb/IOUa2+YN7QyjkqvZ5W
wb6s7FwZF79OLLMb2UPc+gAAIABJREFUw4pZnXAE1BUH8un0euwZUhtnRz/afxhN665P5/pG
ukPgLLYuDib6k2CqOVWgbt/l6FsH4KYC1L4MWrqJsQ5reLWxJ06+LRjydRyBI7pTqSRanYgK
hSd5tENEgWUD5cpXdKg5k1phR5gfaFeOrryURIGmk8xq1ZQ9b1wkbLALUnsFoewgPqYywu0D
ezjW7G2+bGcnN0MQBAlMQulj3y2Uy93K45WLKFAQhNzIUJ4gCIJQphAfkyAIgiCBSRAEQRBK
JDCJKFAoeR62tqKIArxSO7+I+gThDiIKFJ5wSluUJ6I+QXh4GZOIAkUUKDxyRNQnSGAqMLKI
KFBEgYIgCGUhMIkoEBBRYFkjbeMAXGq1IbiuGy41ezNlcheqOjhSY0AoF82ZHZICRXlZczTt
J87jzaKK7kTUJwilHJhEFHgPIgosKyiGGoz6KYLJXptZcKIXu4/Opd6OJWy+YgYKEeVl3p0H
E92JqE8QyshQXqGNVUSBIgp8tGiqNKShZzUa1HGlSqPG+Hg/RW33BGLiLV3f96CiOxH1CcLj
EZjyRUSBIgp8OKh0enSARqtFr9eBSotWk0GGxU/mQkR3+dZLEfUJwuMdmEQUWKqUR1Fgic2y
FFAvRdQnCI9DYBJRoIgCyxMi6hOExzVjElFgVjgVUeCjpjBRXrGzKRH1CcLDQnYXLyvDTyIK
fLSiQEEQyiziYyojiChQEARBMiZBEAShDCIjJ4IgCIIEJkEQBEGQwCQIgiBIYBKEwnnYosDy
jogKhccPWZUnCE80IioUJGPKgYljM5qhVzvRZVlc4b0qJYElnayzV/qpNXocKzbipQnrOXNP
F858bi7dR+bVszOTEPkNY7s9S3V3e6ys7PCo1Zr+H6zleF5bHeQ8p1qN1soe9yqNeK7/RJbs
j8+9S3PiCl6282XUL+l5ljf7j8abETvTC72+O3+sOy0hIc+bY+bawSW826MFNT0dsNZb4+xb
n8BB0/g+KlF6qZJxPRJEVCg8WYEpPZKl392g6+BniFyyinMWPTU0VHlnD+mKgtl4i5PrXsG0
dDD/WngOM2ailw2n1wdbOGdQABPXDy1iRK9pRBgAFK5ue5PWgR9yvOE4vv/jMreSr/HPjyF0
1W9m2Y7Egs9pNpOeFEPUj3MZXDGS955rwZC1lwt52N0tb7bAzxTDwiC9xa83bBuK230r7RWu
bhtFQOBUjtQdQ2jkRW7evkX0obVMbneb1V+sJ1qewoIglNfAFL3oJbzbhHA8R/pgOjWHVs4B
zDllAkycmOmPbd1JHMqxp2ryT4tZ6/QaU+dOpPvlZSz7u4ib8aut8Xp2KH2eMXHq+DkyUOM7
6DM+bnSQ995YyIGtUxi+JINB/51MgDWQfoCQMUtQv7GaddN60tTPCSudNa7V/Ok9eRmfdncu
/JR6B7zqtGNwyGbWvK5jzfgQ9j7w9jUmTsx89r77YtFr0w8QMmYpmje+Z/1HvXmmsgvWOj32
XnV4bugs1n89BD+ZHSwUc9wupnVthI+DNY5+Tek142di73wWppPM8ren3ehp9Kzvhq2tBw16
zCTi+t1c1HB+O9P7+VPN1Q57z3p0HLees7nqg4EzGybRrYkfTrZO+DXvR0hEQnY2qyT+zsLh
7ajpZou1vQ9N+s5m7/Ui5rp57YEookKhvAemil370/rsGtb8fac6ZnB0VSjHn32FPvm5E5QE
whb/xNOjhvCUYztGDdGzeuneTPW5pSgG4g4u44dDDrRoXS9zV+fsIbCs1+QQAppO7GDnxRp0
6/sMxd8Czg7/3p2pdOVX/ncyq7GqMv9SPQIVoOmfcHZcrEHXPs2wlTr6gBiJnDOSz2/2Jezc
TWIPLqW/cQubTuYcoE1n77azdF9/lusXwhhwM4T+E8JJyvrdnqUrMPZcyL7LN4jZP5NaO4cx
eP6p7CHe5F8m0PHVLXi8u4XT1+OJCh1IekRE5tCs+Qorh77E1Asd+OpQLDcu7WC0+kv6vLOJ
G8V9douoUCjvgUnl3on+zyfww8oDmWK69EOErr5M+0E9sgy2GmpP2E/KsRk0y1pKYb64hqVH
O/Fmd09UaKg7bBR1ty8hPLHwzOH8/7VGr1KhUtvg5T+Zf9p8zLRunqgwE71sDJMON+XDBSN4
9sWPWPiqmm9HTSfCAOZr8STgjpd7yaQS6goeuKlucu1G1piZ3gZrjTU21vmU984f6+f56oqS
dV8O5Lov971e7ciAjWn3vdZ8/SrX7rmWpNCu2OS3AWy5xoou3yWw97599lTodDpUag1ajRZb
r4Z0++AzRtTN+YjW0XDIBPrUcsTa3Z/RY14ibdtGDqQD6AmaFsrUHo3wtNHjULUjw3tVI+q3
w1kdrBR2LQ4lqccnfNa/Ee7WVjjXepHJE7virgLz5fV8E+7NyDkTCKziiI1LfQaOH4Dr9nXs
KUoPLU8BpIgKhXIemFA5E9T/RdI2rOTX25AaEcq6pI4M6uyWTyU2cfy7Jfx6YgHP22ctZPAe
zMbTG/lmQ+bS0lwPWesX+CY7/c8xB2M2cuv8NoZef4/gYWuJU9T4Dl7E2g87U81aBWio0HwE
i9Z+QIB1ZiCpwFVir5bM5Is5IZ4EXHBzybpFagecHJ1wymUHzGOOybCL133ya973vN58i9Cu
9+v+1K7uVOAqcTmuxWHARlKVzB6slwzjWfTQbDJxNfNbRDHxRX8aN21Dj3GrOJaSu/p7entk
NwK9pxcuiVdJMGZmTKfXTaBL40q42GhRq7XUf+8PDCm3MSiAcpOYWAM+1atinVf9iYkmJu0w
7zfQZndadI0/IiopgavFdo6IqFAo74EJsGvbn25WWwkNv8SuFZtQurxCkGM+L07bz5JQhUl/
Gu8+rBWF1B39OLp0FWfNdx+ymQ/yH/mXRx4PcpUWh0ptGdG/KQlbN2X1YrMKXfVt1i8IJucS
A03tDnSodJqN3x8itdi35Tb7f9jMRZ92tKuV1ffUd2BR9CHeq/fwNYCaOh0I8jvNhh9+L4Fr
Kb+oHBrQf/p3/PjbIQ6Gz6DmLyMYsehsjgenmfiY+OyfjXGxXHeogKsOlPiVvDNsA67/3sKJ
a2mYzEb+mtoIraJkziGpnPH2subKmfN5DlGrvXzwtA7iqxhzrnagGLYzzL34w8EiKhTKfWDC
6hn693IjfN6b/N82B3q+0jrH3EfuxQ9JuxbzvTmQ4Kdyf0XK2v8FWv3zbREWQZi4Hb2XxasP
oqpdjxqFfeNK/yzjPhuCaUEfen24gcOXkzBmpHHj3AF+mPEqEzfcBNIJf80Dm+BFxOXRaTUb
bxN/YjfLJ7xM36+M9J31Li3vRL97l4tbUP4HXvyg92fc50Mwze9Nz6nrOHQxkXSTCcO10+zd
d5IUmV+2gHR2vt+PKasjuZCYhuF2IskGMxpNzo6Fkb++DWHtqSQMCZHMm7sVq44v468HJT2F
1Aw9DhVcsNelE7t/IdOX/5Nj/sSWwCH9sF83iXFrjpCQls6tMzsImR3GVQXUvt0ZGniEOWMX
sS86mbSkaP7cPJuhI5fcNTdbQn4CSxEVCuU+MKGjYd++VP99B/t8+zKweT7LoZWrhC3ehNI+
mMb3jibYteGFlhf4bvGeArKAu3MwarWeCvX7873tML4LHUPdQhMVFe4vzmfPzveo8fsMujf0
xM7WldrB49mm68Nrwc6FnFONzs6Dpzq8ybeXmvHhz/tY0sOnkBuUxxyTyprOy26gkEH0+Rjc
W7SiRpGTLBUeL84nYtf71Pk7hL7NKuJgbYt73U5MOtyQjzeH8JKVVN5CeioEDOqDev1btK3s
hHuTd4hq9QXzhlbO8ZnqaRXsy8rOlXHx68QyuzGsmNUJR0BdcSCfTq/HniG1cXb0o/2H0bTu
+nSub6Q7BM5i6+Jgoj8JpppTBer2XY6+dUDm8n+1L4OWbmKswxpebeyJk28LhnwdR+CI7lQq
iaFYERUKT/Joh2gvHhIZB/mP/yR8vg/nrWoyKZQ/pSQKNJ1kVqum7HnjImGDXZDaKwhlB9mS
6KHd2eZ8cmin3AdBEAQJTMLjReZy7y5yIwRByEKG8gRBEIQyhUx+CIIgCBKYBEEQBEECk1BG
edjaiiIK8Ert/CLqE4Q7yOIH4QmntEV5IuoThDKUMYkosKDrE1GgYAki6hMkMJVoixJRoCWv
F1GgIAhCEQOTiAIfPGMUUeDDI23jAFxqtSG4rhsuNXszZXIXqjo4UmNAKBfNmcG9QFFe1hxN
+4nzeLOoojsR9QlC6QYmEQWKKLCsohhqMOqnCCZ7bWbBiV7sPjqXejuWsPmKGShElJcZYR5M
dCeiPkEo3cAkokARBZZVNFUa0tCzGg3quFKlUWN8vJ+itnsCMfGWjnM+qOhORH2CUKqBSUSB
Igosq6h0enSARqtFr9eBSotWk0GGxU/mQkR3ShyLgu8sWNFSdUxE1jCaiPoEoXQDEyIKzMyY
RBT42AzxlVjk82R4uCGrDmdw7vOA7GE0EfUJQikHJhEFIqJA4Z76JqI+QSjdwCSiwELLK6LA
MkZhorxiZ1Mi6hOEh4XsLv6wEFGghZSSKFAQhDKLbEn00O6siAIFQRAkMAmPISIKFAQhNzJy
IgiCIEhgEgRBEAQJTIIgCMKTF5iMp1YwpJkP9lZ6bIO+5PKj+GKF+SyfBTjQcfHVMqJ6KD3x
nPHkMgY97Y61Ro1V4IJHc/8fOg9bFFjeEVGh8PhRhMUPyYR/OomDrZZzMTKICtocm6kKj4Bk
tk+fQGTASq78HoSrRu6IYAkiKhSe5IzJdImoY2k0ah8gD8XSwHSBv48YePq51nL/JeN6ZIio
UCjbgUlJJdWgxUonaVKpoKSSYtBhpZf7LwhCeQ9M5mi+DHbF1jGAWcevsaKbAzqd7v45JuNe
xlbTYtNlOTfveQvD+e1M7+dPNVc77D3r0XHces4WcYLm9uH59Gngjq2tO3U7f8hP8UXpHxs4
s2ES3Zr44WTrhF/zfoREJFg8Nl6Q0M2imJL4OwuHt6Ommy3W9j406TubvdctPLv5Il+0tUKl
a84nxxJY3jlzt+uizDGlnVrFqNaVcbRxpHLbt5k8oEapzJE9asxxu5jWtRE+DtY4+jWl14yf
ib2zb6HpJLP87Wk3eho967tha+tBgx4zicjxuRRebwuuV8X63AtqVyIqFMp9YFL78kb4dVJu
RTC+TgUGbkjCaDSSsvONLB9ToYMB7Fm6AmPPhey7fIOY/TOptXMYg+efKoLQLJ19207T+YfT
XL+4lSFp8xg4ZgOWtvHkXybQ8dUteLy7hdPX44kKHUh6RAQJlhxfiNCt8KfjFVYOfYmpFzrw
1aFYblzawWj1l/R5ZxM3LDm/uhKjf01DMR7kP0+5MWhz5m7XaT+NtOz+m04w79UR7Kj+KQfj
4jg4w4292y6Ug2EvI5FzRvL5zb6EnbtJ7MGl9DduYdNJU656tXfbWbqvP8v1C2EMuBlC/wnh
JFlYbwusV8X93AtCRIXCk05kZKRy+PBhJSoqSjl27Jhy8uRJ5ezZs8qFCxeU6Oho5datW0py
crKScitCGV+ngjJwQ5JiNBqVjIwMxWQyKWazWTGbzYrlZChHPm6iOPVcoyRb8nLTGWVOK1ul
0dS/FGPWf6VuH6Z4VhikhKVa8ga3lQ0DKiheQ7ZYdr57S3sqRPG3baGEnDJl/U+Ssravs+Lx
rx+VNEuKf3Ge0s6usfJhVEb2/xkPT1EauA1UNqUUoSDGg8p/nnJTBm02FKn8ptNzlJZ2zyqz
TmZkl39dXxeLy//wMSibBlZQWs4+rZhK9H2NyqFJdRXn9jOVw9eNeXywJ5SZz9oqTT4+qty5
M7c3D1Y8fEYoO9MsqbcF16sS+9zzxKxc/vJ5xaXzMuWa6YqysIO9UuPdfUp6+j5lXO3qyjt7
0nO8Nl357d2aitc9n7el9Tptx3DFp/oYJSL93gu8oMxtY6c0m3Es6/5l3m+nvusVgyIIxeMR
fI8pndPrJtClcSVcbLSo1Vrqv/cHhpTbGLLHPPITst1N7Dy8PbN7fVoPL9wM17h2x/9Q0PHK
TWJiDfhUr4p1vmNt+R9vkdCtgOPNMdHEpB3m/Qba7E1vdY0/IiopgavJioXXX9hYYQHnvxZH
Al74eGqyy+/h7VIOvsCmpcnE1cxvEcXEF/1p3LQNPcat4lhK7nrl6e2RfS/0nl64JF4lwWhB
vS2kXln0uT8wIioUyvtQXjFR4lfyzrANuP57CyeupWEyG/lraiO0inJ3jqcAIdudsfP4mLjs
Cp8RH8s1GzfcbVWFH69yxtvLmitnzmPIt33lf7xFQreCjvfywdM6iK9izLnEiYphO8PcVRZe
f2HPh4LK74mbEsvlWFP+5X9CUTk0oP/07/jxt0McDJ9BzV9GMGLR2RzXbiY+Jj77Z2NcLNcd
KuCqs6DeFlKvLPrcixN2RVQoSGCyZEg/78UPSnoKqRl6HCq4YK9LJ3b/QqYv/6eI49AZHF0+
m9UnbmG4dogF/7cZdafutLLISWRL4JB+2K+bxLg1R0hIS+fWmR2EzA7jqgUdV0uFbvlP0XVn
aOAR5oxdxL7oZNKSovlz82yGjlzC+UfQ2tVVOtHt6WN8M+MHTiYZuPrb5/w3PLkcVO10dr7f
jymrI7mQmIbhdiLJBjMajSbXPNRf34aw9lQShoRI5s3dilXHl/HXW1JvC65XJfa557eoSESF
ggSmYpyg4kA+nV6PPUNq4+zoR/sPo2nd9ekibmuup8ULVVjfvSouvh1ZbDWa0Dmdcbaw4+kQ
OIuti4OJ/iSYak4VqNt3OfrWAbhZcryFQrcCIhODlm5irMMaXm3siZNvC4Z8HUfgiO5UehTj
aZo6vPXtQp4/PZ6m7u40n5xImxcroVU/6YN5egIG9UG9/i3aVnbCvck7RLX6gnlDK+eo9Hpa
BfuysnNlXPw6scxuDCtmdcLRwnpbYL162J+7iAqFJ3m0Q0SB5Y1Utrxalf/4befwR43LgPek
lESBppPMatWUPW9cJGywC1J7BaEcZUxCaWMmZvUk3l12kNhUA1cjF/DfcFc6vVhPZFyCIJRJ
5NlUDvoenh26UfXdt3n27T+56fQ0PT9cyRR/fRkpn4gCBUHIjQzlCYIgCGWsOy0IgiAIEpgE
QRAEoQQCk4gCQUSBJc3D1laU3udVtPOLqE8Q7iCiwMcGEQU+GKUtyhNRnyA8vIxJRIGli4gC
yyUi6hMkMBWEiAJLFxEFCoIggSkLEQWKKLAMkrZxAC612hBc1w2Xmr2ZMrkLVR0cqTEglItm
gEJEeVlzNO0nzuPNooruRNQnCKUcmEQUKKLAsppEGmow6qcIJnttZsGJXuw+Opd6O5aw+YoZ
KESUlxlhHkx0J6I+QSjlwGQpulZ8djaD1LBBOOf6hZ6gaaFM7dEITxs9DlU7MrxXNaJ+O5y/
huI+tNQbPJ5+dZywdnuGt8a+jBIext40S45NYdfiUJJ6fMJn/Rvhbm2Fc60XmTyxK5bYB0zn
thN2tD7Dxnelmr0NXm3HM7aTg8V7q5kvr+ebcG9GzplAYBVHbFzqM3D8AFy3r2OP4eF/wObz
W9nwV12GT+5NbUcbPFqNYfQLDk9E5dVUaUhDz2o0qONKlUaN8fF+itruCcRYnE1rqT9wDD1q
OmDt3pJeL1Tm3PHTZBR6nC3PBDTk7IFDJJpjWBTsQM1x+zEaj7D/sBMtWlUrdJPf4tar4pVf
EMpLYCog2xFRoIgCHwYqnR4doNFq0et1oNKi1WSQYfGTuRDRXb73VUR9gvAweeh75d0Rrrn9
dwsnutfD3VYhalozWh64XxQ4PP9+f5YoMDM45ScKzPP4XEK3utjl+Zr8j88Uqu3JFKo5qMkW
qtlbeHyWMG7MqXBGeOXTHy70+gt7PhVUfk/clF8zRYGOmrzL/4RRYrMsBdzXTFHfe/zvO0Om
qO/4LLasdymiqK+QegUi6hMkYyoWIgrM+3gRBT6ZiKhPEB7foTwRBYoosFQoTJRX7GxKRH2C
8LCQ3cXLHSIKFAShnGdMQmkjokBBEB4v5NlUDvoeIgoUBOFxQobyBEEQhDLWnRYEQRAECUyC
IAiCUJYDk+k4M5o50DU06ZGe1nzpv7R3eJ6vrpTwxpeGIyzs1xB3Gw36xh8SJZuXFcDDFgWW
d0RUKDx+yOKHEkfh2rr3mXSsI5tj/6SlkySlQmkiokJBMiYBE6f/PoamSVuaSVCSjOsxR0SF
ggSmJyRjSk0xoLfWy60QBEF4GIEpetFLeLcJ4XiOeRLTqTm0cg5gzikTYOLETH9s607iUAbA
TZZ3sUGlUqFW67Dzqs9Lk7ZwqdAdnxUSD85jYHM/HK1tca/XhWk7YwvsBSs3DrBgeCB1PO2w
da1O29eXEpWc/4i38fxG3g2qiauNDS5VWzPi2yOkFFaqm4dYOOI5anvYYWXrTp0OY1hzMj9f
xU2Wd3Gk/X8vcPmrIKxUOupP+SNfDUH62XWMDayBi7UNzlVaMWzaCJ55GHNe5RRz3C6mdW2E
j4M1jn5N6TXjZ2LvfBimk8zyt6fd6Gn0rO+Gra0HDXrMJCKH5KtwwWXBAspiCSKzK20ee1CK
qFAo74GpYtf+tD67hjV/36mOGRxdFcrxZ1+hT/W8doxzZlBYKoqiYDYlc2HnZLzDhjJ8yaVC
hlrS2b16D43mRhJ34xyb/2VmUd9X+eZCPkeZz7Kw74t8dL4dc/de5tq5n5je5BDrd+cTNEzH
+KzfYDZ6TuZ/l29w6X/v47VjDYcKGqIwn2fJgBf5JL4L3/weR9LV35n37CHe6vEhB/J0QTkz
KOwWv7xZiYqv7yRNMXLkoyZ5T+RlHGF236Fs9ZvKnpibXN7zEX6//MDvMmRSQhiJnDOSz2/2
JezcTWIPLqW/cQubTppy1bm9287Sff1Zrl8IY8DNEPpPCCcp63eFCS4LFFAWVxBZECIqFJ50
IiMjlcOHDytRUVHKsWPHlJMnTypnz55VLly4oERHRyu3Ei8qK3q6KVVH7VASDQYlPXm3Mram
q/Lyslglw2RSzGazYjablfwxKdHzn1OcX16h3MjvJRnHlOlNbZSGH/ypGLP/76jycVNbpc3c
84opr0OOfKQ0tm2pzD5tUizB+NcHSiP7DsqimLtlNfw6WqliE6h8edmcT7FmKM3snlPmX8px
jtRwZXjFmsq/f0vP50zpyi9vVlIqvr5TSSuoPH9+oDR0eEH5OvbuudN2v11geZ5MDMqmgRWU
lrNPK6YSfV+jcmhSXcW5/Uzl8HVjHh/uCWXms7ZKk4+PKhlZ/3V782DFw2eEsjPPDy5DOfJx
E8Wp5xolOfPVyoYBFRSvIVuyfr6n1l+cp7Sza6x8GJVxt0SHpygN3AYqm1KKe21m5fKXzysu
nZcp10xXlIUd7JUa7+5T0tP3KeNqV1fe2ZOeqz7+9m5NxetfP+aqjxmnQhR/2xZKyKk7dz1J
WdvXWfG453VpO4YrPtXHKBH3VnfTBWVuGzul2YxjWfcv83479V2vGBRBKB6FzzGpnAnq/yJp
G1by621IjQhlXVJHBnV2y8e2mcLR796mY0NfnK21qNUafEf9TMr1q9w0Q1JoV2zu7Bph/QLf
ZKf+GipVrXQ3u9BUoqqfiviYeBLzOMYUE02sVXVq+t5/CXmdwxwXy1WHylR2vVtqnV9VfDX5
H2O6fIHLqT8zyk9zd6cLm2AWXYkj7qq5gGuxoDzxsSTY+1HJ5W55tL5VsssjFBctTSauZn6L
KCa+6E/jpm3oMW4Vx1JyDxh4entkDxvoPb1wSbxKgjEzYypQcFmIgNIiQeQDI6JCoZwP5QHY
te1PN6uthIZfYteKTShdXiHIMb8RtkW8MepXak3fxclrqWSYTVyc1w6dOVN25jBgI6mKgqIo
KIYf+ZfHnQeziYvnLt2djzFd4vwlBQ9vD5zyOEbj7Yt32hlORd/fDPI6h9rTC/ekC1zIMcaf
cek80ab8j9F4VcTLvhNL4s2Z/3/njzmR77pYFXAtFpTHwwu35EtcyjGukxF9tzxC8VE5NKD/
9O/48bdDHAyfQc1fRjBi0dkcD04z8THx2T8b42K57lABV91dwaXrv7dw4loaJrORv6Y2Qqtk
CS5zCSjzaFhZgsivYu6pO4btDHMv/vZdmaLC3/nfdzsyRYVee9myfm8RRYXxmaJCIFtUeN9N
FFGhUEYDE1bP0L+XG+Hz3uT/tjnQ85XW3K37uRc/KGkppJp1WNvbY6/PIP7QUiZ98ZsFDpkM
jiz8D/P2x2EwxBO5YCILzgbQr4tfnoXUPNWPf7X6h9lvzGDHmUQMty6w9+tRfLg9Ne+GXLcn
feruJ2TCCo7eSCfl0s9Mn7KciwW0OE3dAbze8hAfj5zHr+cSSTdc59zBdXzcfzwbi/ldYG29
HvSuvZeQiSs5djOdlOhf+PT97wosj1AU0tn5fj+mrI7kQmIahtuJJBvMaDSaXPNQf30bwtpT
SRgSIpk3dytWHV/GX2+J4LJgAWWJCSLzEXCKqFCQwISOhn37Uv33Hezz7cvA5vkvhdbUGcHs
/3izpXdNnBx8aPF2BPU6+lP44mk9bXq35NBbTXF3qkynBSaGrFzKa1XyKaK6Oq+v2sIkv52M
etYb16qBTP6jGd0CrPOJBPX596olvBQ9jQBvR3xav8/lwN40K2jUQ12N11ZtY6LnVka19MWx
Qm06jP4BU5/XCHIobpe3Ae+u+obg81No4emIT8B7nA/oytM6PXpZaV4C6AkY1Af1+rdoW9kJ
9ybvENXqC+YNrZyj0utpFezLys6VcfHrxDK7MayY1QlHLBNcFiigfNiCSBEVCk/yaIfsLl52
SN35OrVfVVh8biFB5SY4lZIo0HSSWa2asueNi4QNdkFqryA8dhmTUPKYiflhGlPXHuZKsoEb
/2xg0qTVaF7uTUvJmARBKMfIXnml2CfwbPccdm+PJGD4X8SovGnebSbrPn0Ou3J1H0QUKAhC
bmQoTxAEQSiNml7SAAAgAElEQVRj3XZBEARBkMAkCIIgCGU5MIkosBzzsLUVRRTgldr5RdQn
CHeQxQ8ljogCyxalLcoTUZ8gPJ4Z0xOFiAKFkkNEfYIEJqFEMiYRBQqCIDzEwCSiQBEFlkXS
Ng7ApVYbguu64VKzN1Mmd6GqgyM1BoRm7TdYiCgva46m/cR5vFlU0Z2I+gShdAOTiAJFFFhm
c1NDDUb9FMFkr80sONGL3UfnUm/HEjZfMQOFiPIyI8yDie5E1CcIpRuYVO6d6P98Aj+sPEAa
QPohQldfpv2gHlRUA2ioPWE/Kcdm0OzeJ7DKCrcGfZg6sgH7t+3mVoFn0lL/9U8Z09IbGxtP
/EfPYmTVPYRuyjugmY6vZFFEbd79cjLBNZyxcapCwPD5fNDJJs93zzj6PauO+DNh9mAaulpj
XzmI96YPKnBDTdOJVXz1a33GzxtNaz979HaVCJo8hW431vLDH8WLIBlH17Lmn5aMmzmA+i5W
2Pk9x6SPBpXMBp/lBE2VhjT0rEaDOq5UadQYH++nqO2eQEy8pev7tNQfOIYeNR2wdm9Jrxcq
c+74aQpN7rHlmYCGnD1wiERzDIuCHag5bj9G4xH2H3aiRatqFKbVMp3bTtjR+gwb35Vq9jZ4
tR3P2E4ORdyz70HLLwiPeWASUaCIAssqKp0eHaDRatHrdaDSotVkkGHxk7kQ0Z0Sx6Jg66zP
XkvVMRFZw2gi6hOEh4lFy8UzRYEDCQ2/hHHbJpQu3xYqCmwcuotlz1XHzU7D5f8G8tTqHKLA
Afd2HzP/yhQFumQW6o4osH2WKPCeY0zevninbc8UBVbP3ZzzOkeGpxfuSfsyRYFemcHgPlHg
vefIEgVOP72FIXnK3fK4ljzIszweXrglH8gUBXpmlUdEgSUzxFdikc+T4eEGhufVcOoE8Kz5
Pf73nSFT1Hd8FlvWuxRR1LcnU9TnoCZb1Gd/bxlE1CdIxpQ3IgoUUaCQGxH1CUIpByYRBYoo
8HGjMFFesbMpEfUJwsNCdhcvQ4gosLp8sU4QBHkOlB4iChQEQcgL2SuvFPsEIgoEEQUKgnAv
MpQnCIIglLFuuyAIgiBIYBIEQRCEEghMxlMrGNLMB3srPbZBX3JZvlghFJuHLQos74ioUHj8
KMLih2TCP53EwVbLuRgZRAWtCplWEoSyjogKhSc5YzJdIupYGo3aB+Ba1P3ckv9k0RB/Kjna
YOdZjy4f7CAmu3ucqQqwylpIoXboz4a03D3qS7tmM6RtHTztbXDya0avj3ZwOXvrHhNXD3zD
2x3r4mZjjZNfM3pP30VMXlv73P6NCQ2s7vmSZTIru9nkXtBh1Zr/O5ej/26OZ/fsV2hZzRVb
W0+av7aMY7ezzn56Ni30qvsWhOj9Z3Eyqwxpp75nbPBTeNjpsXaujP8rc9l/424/M/mvxQxv
Uw1XGyvsfRrRdWrO+yNIxlV6iKhQKNuBSUkl1aDFSlfUNCmF3VN68++/Alh8PIHonW+i/qYf
/1oanfUgUVPl7d2kKQqGzYNwvvft0/fy9cLLtJq6gb/jrnFiTS8Sv+jF4IXnM4/POM6ab/6k
zr/XcuTqDU5veJW0Bb0Ylv3+d8txYMY49jr+P3tnGV3V0YXh52pu3AUITnCHQtDiWoJboHjx
thQKpZRSirVYKR9Q3N21eLEiIUjQAEGDxkiIEJJr8/1ICAmEJsFp51mLxYJz5dxzZmbP3jPn
fQujSSdxLDvmIkYhEEIgEv9mQF5lSuC78r82NJ9tpNOK84RFXmJBjUB2nEiKbKoC33JMn/w+
IRDGq0yqYkeF1i3IrwLM15nVoxurrb9h3704Ii/MperFYbT78QAJAHo/RrcbwPEy/+N0eAx3
dn6JdpEvXyy+JwdaiUQiA1O6mO8ys74TVnZVmXDpIcua26LRaF5cYzIcYWA+NZY+S3j0XGBZ
sTqEWt98T50c1jiW7MH3HV04sHxz5taotLUYtXYKPWoWwd3aCo/K/ehS1cBp/4tJ0izq4vSf
O50+dYriYWOJa/nudKxi4PSJS2nk/5+c+JUBB+oxoW/hrD28ZfBn7h+Xqf/rTHp558BG50SJ
DuMZVCP9p2ANAQtYcLEq3XyTPXiMt7h8VVCxdQeKO2ix8qxF+4a5CQ8K4pEA0/X97Ltdii5f
NyKPjQWOJbswuL0rB1dvR3q+vR7m0L383KwU2W112OUsR+tx+wh52ihMQUzwtqHGVz/TqrgL
VlZulGg5nsORzy56wq0djG3vTT4na2zci9Fw8AZupFmASeD6xmE0L5sTeyt7cn7SnomHI1LW
XET0KWb3rIGXixU6m+yUbTeJI5FZvKnp9StpVCj5zwcmpSd9dkUSH3OYIYWd6bgxFoPBQPye
Psl+TBkMDiGXufzIk2JF7JNtMjQULlEYrlwk6FWMY+JP4X9BQ9mKxV/MfMwJPPCbxeLDdlSv
WeLZ8YRTTPjqT6qO/5ay6UrpmQicVB0HCx0OuSvQ7tf9hJqfVvECCHhQAI+b31Elly2WNh6U
bDqS3enW2h6zb84yHjbqTotkBXM0ZWnyWTZOb1hFYLSBhPuHWLPnEZWa1sJVAUkXRcHzHiKG
a1e4KY11XgMD/pP7MuVRO7bcfETIiYX4GraxOSh1jVfPke03aLHhBpHBW+jwaCK+3+0iNvnY
3wuXYWg1m2P3onjgN56Ce7rTecbVFCO+uP3f0bDLNty+3ca1yDDOL++I/vBhIgRgvs+Kbp8x
Mrges06GEHVnN18pZ9J2wGaiXnfslkaFElnKy2xnqcJvN4w82dIJh9QVwMdxPMYKG4trzKiX
naLf7MNoZYXycSyPs9pBRTg7B/dltecIfuuaO9XJGzn3c2k0KktyVBlFSPuFTG/rkTzWJxIw
sT9rS//C8CrW6XhI2eC7MZ4nURHExN7Hb3pt7k5sweezb2IGREw0MfqTLN/lyfjjYUTd2ESH
+Ol0+Go14eL509vMnA0qWnVv+KwkqXCkwdiZtLszhJKOWiw9P2N93lFM6+6FClDlq0HNnGdY
Mm03t+P1PDq/mN/WBiOePCZeTj4zQZJyxJEXdPYUaDQaFEoVapUaK4+SNP/pN3oVTT1EayjZ
9TvaFrRD5+rNV998RuL2TRzXA2ip+/NyRrYshbulFtu8DenZOh/njwYklWCJZ+/85cS2/IXf
fEvhqrPAoWBjfhjaDFcFmO9tYN6ubPSd/B2189hh6VicjkM64LRjPX8nvG6/kkaFEhmYXguF
tQ3WxBOXWIB+u+8TOKUW6vh4TNY2WGelF4goDv3YlB7+jVi+diAldWk7SMmfzmAwPSE0YBYV
9n1Ok7Gn0QPGC7/Tf2kBRo2qi30G36fQOlG4yc+M7WDHkc1/ESFAYWmFpcKKev0HUS2bJTo3
b/r3qo3+0D7SmtiaubVyDrs9OtCteioX3cRTjG7Ynr1VlnI1Ws+TkEN8k/gzdbusJkQAWm9+
XDGBUkd7UtzRHq8OuynjWw8bOwfs5FNmr4GaskNXMaPSeYY29qZMueq0HLySwPi0zd89m1tK
J9C6e+AYHU6EISljurb+O3zK5MLRUo1Sqab48NMkxD8mQQDiEQ9CEsiePy/pJeHmB3d5kBjA
iBLqlA0xmjKjOR8bQXjc6844pFGhRAam1/sC98IUcrhL4OWnXjNGrly4gqJQcQpmdrFHRHJo
xGd02FmJhX+Op5bLSyKMUodrydYM6liAC5t2cs0ET84e4/TVZbR0S5JS0rVaw+PQudS3LsR3
/saXdrine+GVHgXxej6iCZIM3FL/n/EcC+edpGTXLpRK9btMN3axNTA3zbvXJ6+tBp1bebp3
qkr0zm3465O+y7ZsHxb53SYm8Qnh55ZSPfEKylJlM399JOnfRdsS+I5dys6jJzmxaxxe+3vR
a86NVAOnmbAHYSn/NoSGEGnrjJMGRNgKBnTfiNOgbVx5mIjJbODsyFKohUhqxwoHsnnouH/9
FuklQEqP7Ljr6jLrgfnZxhghEAk76O76+s9ZJBkVnuLA0t1JRoUeR9i24UgWjQrDkowKkysL
oQ+iXgwq0qhQ8lEHppdtfrCoQoc2Huz7/Vf+evCE6Avz+XVZODU6+GRqjQoRycHhn9FhVxUW
7ZhIXbe0bzLfmE/fL6bw59m7xOoTiLiwgd+Xn8e+eAk8VcnusakGhoR1bbB2/4Jdj68wvoIa
871lfNN7OnsCQ3mcGM21XWMZuTKG6s3r4KIAdFVp3dSGHb//xuGQBBLDjzN9zl/oatSlXKqJ
afzBuSy5/emzTQ9PL3C2whSyucKG+bu5FWckMfw0C5YewuRVhPxJVr1cWjiSaQeDiY5/yMW1
g/lynoJO/RphL9vna6Bnz4j2/LjKn+DoRBIeRxOXYEalSn13DJxdNJF1V2NJiPBn2tQ/sWjY
FG8tCH08T4xabJ0dsdHoCfGbzdgll1Otn1hRu2t7bNYPY/DqC0Qk6om5vpuJk7YQLkDp2YJu
tS8weeAcjt2NIzH2Lme2TqJb3wXcMr+BfiWNCiX/Zvz9/UVAQIA4f/68CAwMFEFBQeLGjRsi
ODhY3L17V8TExIi4uDgRH3NYDCnsLDpujBUGg0EYjUZhMpmE2WwWZrNZCP1h8U1eldA1WSyi
xHPEnhazOlcQnjYWQudSRDT+cae4Z3p2OHFHN+GiRCTnIgIQSvcvxK5EIcSjpcJHl/YYICwa
zhfhZiGEKUqcWTZENCufVzjptMLarbCo1fMPcTzSLNIjYV0bYf30s4UQwhQu/p7SWVTO4yAs
NDrhlL+q6Pzb3yIs1fmZo/zE1I4VRE47rdBYe4jSLcaIv0JTfb75oVjdxkW4+a4XUS98rUmE
7h8v2lfMIxws1EJj4yGKN/hGrLz8JOUVhjvbxND6BYSjpY3IVqKJGLrxukgU/xUSxOaOzqLy
pGvC9IY/Of7qRjGidQWR295C6JwKiOo954tzcckHjVfE+IrW4tN+w4VPIUeh0zmLok3HigPh
yTfQHC38f28jSrlbCo3OWRRqOFRMG1hR2Dxtd0nfIK6sHSKalMoubC1sRI7yHcTvfg/F08Pm
SH8xs2dNUdDFSljYeYrSTb4Vy85EZe13vrRfGUXQhIrCIkdvsSdBCNOtqaK6zl302JncrvTH
xGAv1Qv9Rpmq7SdcXiZ6V8kpbC2shWeVvmJI23zCo8fOtG3PeEus6VNJ5LTVCKVCJQp8e1To
hRDCFCymVrcRdWY9SP69BnF2ZClh02q1iBcSyesh1cUl75n3ZBRoCmJClXL83ec2Wzo7Iluv
RPIfWmOSSCQSiSQryOV1yXtGGgVKJJK0yFKeRCKRSD4oZClPIpFIJDIwSSQSiUTyRgKTNAqU
vHnetm1FFg3w3tv3S6M+ieQp0ihQ8i/nfRvlSaM+ieTtZUzSKFAaBUreOdKoTyID0z8hjQKl
UaBEIpF8EIFJGgVKo8APkMRNHXAsWJ36RV1w9GrDjz/4kNfWjgIdlnPbDJCBUV7yGk3NodPo
n1WjO2nUJ5G858AkjQKlUeAHikgoQL+/DvODx1b+uNKaQxenUmz3ArbeNwMZGOUlXeVXM7qT
Rn0SyQdSysuws0qjQGkU+G5R5SlJSfd8lCjsRJ5SZcierQiFXCN4EJbZIuirGt1Joz6J5OMI
TC9BGgVKo8C31rY0WjSASq1Gq9WAQo1aZcSY6ZE5A6M7Ecqc+rrkDS1q8n5zOLmMJo36JJKP
OjBJo0BpFPjOS3xvLPK503NXQvLGFiM3p1RNKaNJoz6J5GMITNIoUBoF/peQRn0SycebMYEV
1cesZmLxg3Qt6IhHzanou61gbtecKV+u39kdV5UCXZMlRMWupIVO8exZo5jt/PbbMe6emEgd
N1XKc0K6RguIEKDM05JeNUKY16M6eeztyVP7RwI/mcCmKZ9hl5kLkK0BLQufZGTjwjjbelCx
3z5yD9vCkh5P17BsqT9hDSM8t+JbyB7bvM1YZfcNK//XCmfFs+C5bc4anjTuTkuPtNmVwqEZ
U9aMoNCRvpRxscQ2X2NmJrRlwbKBFFMBqPCq+wn3f6lDXpc81B19kzrzt/FLNWvZOl9rouTH
kIJqFAotlSddJWReAywUiueeYXudbMoe76qFiDSXpl5ZC9zq1iXnQzMVqhZJ2vWZ0ferivD1
oj/49MJXlHJ25ZPvw6jUIPcLa1Pq4t0Y3tHEzGrOaJQv7sqTSP6NSHVxyXvmPRkFSiSS/3LG
JJFIJBJJ5pHL65L3jDQKlEgkMmOSSCQSiQxMEolEIpHIwCSRSCQSGZgkkqzyto0C/+tIo0LJ
x4fc/CCR/KuRRoUSmTElT75usXloI4q6WaOzyU7plqPZG2JOmZkd+DIX6pcaAyZwa/dvfFGn
CK5WFli5FqRGjxkcj3w6LxPEXVrHT+2qUtDVGkuHnJRtPpzNN9OZ5xmDmFbbAZWmGD+ceio/
pGdvn+yo0jyLZUH1qbdSzdhNhB78ja7VvXCxtiVb6VaM/etBkjimfjc9PVQvPMulTGUuaLq/
m9Gty5PLQYfW0ol8lTsx5cjDlJml8c4ORrYoi6edDp1DHip1/h/Ho+S8U2ZcHx7SqFDyLwlM
Bs6Nb83nG90Zfug+UcF/0pu5tO44kxvmpBlcjWm3Mb7UGPAAc+eGUGnoGgIeRHJ731iKnR6K
T9+1RAhARLFz4TYs20xh99WHRASupSuL8W03hUBT2vO4PK0PM5UVKKJ+8Wd79t+PPkWqKJFD
X+dJuRhxh3+gQctFqLou52xoOJfXdsH852YumwBtPeaEmJ4ZA4p49vfPg3XltjTPrQQRyvK+
7fg9oinLAqN4HH6K6ZUvMaLVILbFAsYLTGrVhgX0YNP1R0RdWUWbiPE0/WIlD2RskkgkkowD
0905n5Gt+kQupRr0TVcnU8WhKpOvmgATV8Z7Y1V0GCeNgMGfRQsvU2nQONoXtsfSuQxf/NKP
gkfns+JSJpxitA0Yu3YC3eqUwNPeGpcSrfihZ0Vijx/jshFQONFqwiKGtviEPA46rLN707NH
bXSBZ7icalZnCPwfvefmZMyvn+GalfBrvsPSn2eS0G0OM7pWIIeNDnuvz/jxt94UT8fLQDza
wdw1MdT7oh25lIDpNpeuJFK+fU+qZbdEY5OX+l+0omjMFS6HmDDd2M7G83npMqIn5V11WLp7
0//HDtjtmM3aYDnnf5OYQ/fyc7NSZLfVYZezHK3H7SPkaeJsCmKCtw01vvqZVsVdsLJyo0TL
8RyOfDY7SLi1g7HtvcnnZI2NezEaDt7ADX3a7P76xmE0L5sTeyt7cn7SnomHI1IyYxF9itk9
a+DlYoXOJjtl203iSGQWZx/paVBKo0LJfz0w5WjmS7Ubq1l97mlzNHJx5XIuVfyctvlfHKlF
xHnOh+SgTBnXFPVtVZ6ylLa7ytmLCVk/Q/GQo4cuoitZBq8XMh8zCaGnWLT4ILoGTfB+aiqr
v8CU3nPJOWYCPm7p/UQzIYtb4KqzwNqtEDV7TOPYw+QOFe/Hfn9LCmt24FvSHSudLdlLN2fk
znvpGLCZebBuLts0zenh45L0e9XF+MwnP+fXzOdoSALGx8H8tWADwaWaUT+PCoT5qTh5CgqF
AoXhAgEXpZPOm8zc/Sf3Zcqjdmy5+YiQEwvxNWxjc1Dqu6jnyPYbtNhwg8jgLXR4NBHf73YR
m3zs74XLMLSazbF7UTzwG0/BPd3pPONqSjuI2/8dDbtsw+3bbVyLDOP88o7oDx9OyuzN91nR
7TNGBtdj1skQou7s5ivlTNoO2MxrV22lUaHk346/v78ICAgQ58+fF4GBgSIoKEjcuHFDBAcH
i7t374qY6NtiWSsXkbffbhGdkCD0cYfEQC8n0XRxiDCaTMJsNguz2SyeYgyaILytyokxF40p
/yf0R8Sg/Fai/tww8eyVQiRs7SQcbduLDQniJcSLC9MbCg/3BuKPy/pU/28WkYs+ExYgQCFs
i30hVt9MfPqp4szYysLLd60IMQthuj1N1LAqKoadNLz48aYnIvTsWjHQ21E41pspbpiEMN+b
KWpbKIQmbzsx/0yEeBJ/XxyZUF+4230qpl41pn2/8bIYX9FKFBriJxJTn13k32JUDTehViSd
nzbnZ2JqQFzytTgtRpSyFLlazRanIxJEQuhxMbVJdqFW6ETLVY/Ff48Esbmjs6g86ZowvdHP
NYiTw4oKh5rjRUBkOvfeeEWMr2glyo65KJ7e1cdbOwu37L3EnsT0Ps8oLowpK+xbrRZJd/Kx
2NjBWXh03Zb87+ea1u1pooZ1GTHq/LM2Ywj4UZRw6Sg2x7/ubzOLezPrCMcmi8VD030xu56N
KPDtMaHXHxODC+UXA/5O3Vf04ui3XsKjx840bdR4daLwtqokJl59etVjxbp2DsLtudcl7u4p
suf/RhzWP/8Dg8XU6tai/LjA5OuXdL3t220QCUIieT0yLnIpHKjr25jEjSs4+BieHF7O+tiG
dGrikq7bptLGFhviiE1tTyseExunxNbOKgsOnY85N70NDcYaGLhtDb0LpTZfezobNPEk9CwL
652ld60v2fFIYDg3md4LcjF6ckvcM/oypQ63kq34ZWIXHP9ey44HZhTWttgo1ZToPpzOpZzR
WWaj8tff08bBn237ItJsjdWfWsjC88Xp0rU82pTaxjnGN/Jhee6JnAh9guHxXQ4O0TC5fhvm
3TKDpgzD1i6iZcwU6uW0xbFkL45WaEdNawecneQmyTeHmrJDVzGj0nmGNvamTLnqtBy8ksD4
tAUD92xuKWUDrbsHjtHhRBiSMqZr67/Dp0wuHC3VKJVqig8/TUL8YxIEIB7xICSB7Pnzoksv
J39wlweJAYwooU7ZIKMpM5rzsRGEx71uyiSNCiX/8VIegPWnvjS3+JPlu+6wd9lmhM/n1H2J
p4TCpQQlPO4REBCeMoibbp3mTIwXpYrpMlm+i+b4+KY0mKBg6M5NDC7/MstpJTq3ErT4tgtl
Qvaz/7KRhPP+nLm+inbZklTQVbm+5EB8IOPK615uGZD6w62LU9pLna7bXFoB9cfsm7ece1W7
83nBZ4US870D7DjrRrO+vpR21aG2yo53z97UVxxg+7GkUdHCqw2/7bpEeLye+JAA5n0Sy2WL
KtQoq5Et8g2isC2B79il7Dx6khO7xuG1vxe95txINXCaCXsQlvJvQ2gIkbbOOGlAhK1gQPeN
OA3axpWHiZjMBs6OLIVaiKSmoXAgm4eO+9dvkV6BWumRHXddXWY9MKfaKCMQCTvo7vr6SvzS
qFDynw9MWFTAt7ULu6b15/fttrT6vBrP2v5zmx80FejctTDHJg9j1eVoEiLPMO/7GQRV7k77
IqpMrSkd/LERPnOcGbtnDf1KPudLFL+d0X2nseNMMI8SDcTdP82qsXM54VCJKoXULxgDmm5P
o4ZVUYadTEiqjydu5wffcWw6HcyjxCdEXNzID4MXEVm5JfWzKUFdnI5feHNzwRgWn4tEnxDC
sam/sCamKs3rPFs3ExFbmLc+kcZftCZ7qquodC9JSfdgNs1azfmHekwJIZxYMJdd0QUpXUyX
VJf//Rt+33uNqIQ47hydRa+vNpDjmx9o7iytQ94cevaMaM+Pq/wJjk4k4XE0cQlmVCpVmnWo
s4smsu5qLAkR/kyb+icWDZvirQWhj+eJUYutsyM2Gj0hfrMZu+RyqvUTK2p3bY/N+mEMXn2B
iEQ9Mdd3M3HSFsIFKD1b0K32BSYPnMOxu3Ekxt7lzNZJdOu7gFtZGeVfZsApjQol/+k1ppgY
ERcXJ2JP/yzKaRVCXfJHcTrBIIxGozCZTMJsNohLv1QQlkW+FyeelvL1N8XGIQ1EYRdLobVy
FyWb/yx23zem1MfD5jVIXh9K9ceitph5zyzMDxeKRhbPHQOhsP9cbElIqu1f2zpatK+UXzjr
NMLSKY8o5zNQLD4Tk2b9Kk2tP80aU7y4vi3p/U6WWmHjXkTU6jFVHA5PtcJheiD+GtNalM1h
I7RaO+FZvq34ZV9IqjUQk7g1vaawyd1X7I1/sf4ffWqO6FWrsHCz1giV1lZkL9lYDFp1WTx5
uqpyc7P4vlER4WJlJVwK1hBfTDsqIsz/1Wry21pjEiL+6kYxonUFkdveQuicCojqPeeLc3Gp
15isxaf9hgufQo5Cp3MWRZuOFQfCk2+EOVr4/95GlHK3FBqdsyjUcKiYNrCisGk4X4Sbn62B
Xlk7RDQplV3YWtiIHOU7iN/9Hqa0Q3Okv5jZs6Yo6GIlLOw8Rekm34plZ6Ky9jv1h8U3eVVC
12SxiHpuzStoQkVhkaO32JMghOnWVFFd5y567ExuZfpjYrCX6oV+pHT/QuxKXkRKuLxM9K6S
U9haWAvPKn3FkLb5XliLEsZbYk2fSiKnrUYoFSpR4NujQp+yxmQj6sx6kPx7DeLsyFLCptVq
ES+XSCSviTQKlLxn3pNRoCmICVXK8Xef22zp7IhsvRLJx1bKk0gkEonkHSG3gUneM9IoUCKR
pEWW8iQSiUTyQSFLeRKJRCKRgUkikUgkEhmYJB8ob9u2IosGeO/t+6VRn0TyFLn5QfIv530b
5UmjPonkw8iYpFGgNAqUvBGkUZ9EBqY3VLqQRoHSKFAikUjeWmCSRoHSKPBDJHFTBxwLVqd+
URccvdrw4w8+5LW1o0CH5dw2J2XW/2iUl7xGU3PoNPpn1ehOGvVJJO83MEmjQGkU+KEiEgrQ
76/D/OCxlT+utObQxakU272ArffNPLNGeYlRXnJW/UpGd9KoTyJ5v4FJ4doI3zoRrF1xnEQA
/UmWr7pHzU4tyaEEUFHoOz/iA8dRXg3muFjisMHWOvXIa42tjZnYmPgs7iB6wsU/OvHlvtKM
ndA+lb/S09moCkuPTxgcWJcpE1slq3wncnZSL+blHMOk5m7p/EAtdWbeJzEmkkfx0dzcO5ay
F3+ise9sbppBxDwkMjGMP1cG0XhpIJFRQazr8IRZbTsw49pzXd50lWXzDpGtwxfUtnn6n1ZU
HvoHfQX3MvMAACAASURBVExTqZGcMTVZ6cawP/pTUgOqfPVpWPAai8YsIOBhIolh/vwxdhk3
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
CejfheJZxaqKYtOwNvT7IZ6On23l9K0EjKmK1Ctf4m8L5jSHekYltca+F2sMlgXSHbcMkax1
c8eFKCKjzFn+vTkmnAijBs+iHlleZJZ/GxtJtEmDm4fb/X+rdcPDTfvov4+5xW2DkZNT6mNz
3y4Z1tSYEEJKdCTR6tHXnv3zjSLapMHV3fV+95TWFXdXWXj5QGKqPISflo3DN3oFozp7U8Hd
lVKNXuaLoOgH5io09s44WcafRo+THmLSDL2QzP6J7ekyM5SGkzdzJiKZVLPCGPI+NawUZpU+
5xgVEUmq1g0P94c8E1ME4TEm/l3YGjvL2LGuzDsHDCTExOSLcFHU78JTl5iwqU/vnpWJClzJ
tmgjx1au4pRzO/p3eIh1M+VPVq0Lo9bgTxnboTYlXeyw0oD53/9v77yjojy6OPxsZelVxY7Y
e+8looK9a2I3GhMTNfYaY9TPEnvsidHYu7HEXkFjj2KNHTtY6SBty3x/gLIgIBiMGOc5Z49H
3i3zzsw7d+6dmfvzN1PcfClJLRAi4RW9kXZmGtMiIpjQZFNEU0gwYTjg5KhM9fNKexectYLA
Z0GpbjZI9bN2TjioBSHBoUk/awohKMSUrs87arRUnXYTgzC7nvAyRW2grcWb7z395XXEQS0I
DU42sJpCCQmVM8kUploUbD2JzWcfEhbmj+/m76n8fCNDOk/kZLJRX0SHE2H+NxFJRCTY2tnE
9339OX7//RauXX9kUtuyuFqrUQDG508INCUdPh2cHVGZggkMSqNN1E4422sp/cN59Cn0nejN
HbB+F1WSIP1+4cx5LuyLl37vrPFm/9VznLkIFWr8M+n3V1t0pPS7JNMME2pKtvuU0pH7WPvH
PtZt8sOpaUe8HNKY+phiidWDWm0+zYrl3NYd3M5ALEK8OM7eo+Z7fqI5vf9PwpxrUKt4GlM4
m5p41rDgxo5tXMnowVTbKtQur+TygUNJjKjpwSEOXE1H4W1q0bCGlkvbd3Dn3ziTYVOVWuUU
XD50mCdmD70p4DCHrhpkL0/rAbDORflWI5j1bRWUAbe5F5PsDTHnOXUhzqwPnMX3iQXlK5dK
CEnFEhsLFpY6s4cpipO7vAkUSQ2TY636VFRdZtfuu6kf/NVUpH4dG24f+dNMmv7fqAgp/S75
4AwTqIq247OKMez74VvWPMhBy071MV/5MfrNoLrWTGHTohoN61pxfvFE1v4dQmz0U3yX9eOH
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
AAAASUVORK5CYII=

--------------U4LDQgR0uj7riKGeJtFS2Esd--




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#78621; Package emacs. Full text available.

Message received at 78621 <at> debbugs.gnu.org:


Received: (at 78621) by debbugs.gnu.org; 28 May 2025 20:40:49 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Wed May 28 16:40:49 2025
Received: from localhost ([127.0.0.1]:57329 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1uKNZx-0001VB-BW
	for submit <at> debbugs.gnu.org; Wed, 28 May 2025 16:40:49 -0400
Received: from mail-vk1-xa2b.google.com ([2607:f8b0:4864:20::a2b]:60440)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
 (Exim 4.84_2) (envelope-from <shipmints@HIDDEN>)
 id 1uKNZt-0001UT-DI
 for 78621 <at> debbugs.gnu.org; Wed, 28 May 2025 16:40:46 -0400
Received: by mail-vk1-xa2b.google.com with SMTP id
 71dfb90a1353d-5259331b31eso76053e0c.0
 for <78621 <at> debbugs.gnu.org>; Wed, 28 May 2025 13:40:45 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=gmail.com; s=20230601; t=1748464839; x=1749069639; 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=MhyHJ0Fcyccmt55+zpUS/446x5C5YezEf2M0gaLLHSE=;
 b=ZvQGk4YBxZD3TQJoTKUqoSDVibmXuvIoQ6KFNjUlb5aGB+O3SjtNth1oCQvD66fudl
 sOXElsKqJjOwUGZ173UtoqTbFh4qs7elX1qYrDbFlCEIsTGuRp5NA8CJD8fOn0BKK3wg
 cGbAMApOIUWqNJK11KLuKTNZ/kjgyFcwVKMboGql1uYmw0AoavnbZMsYFt84vpLLwt32
 8JbJEUIMR9p950XbNarn3JcsKNKvfrec+IMu6z+g5xd6ru0AoI6+MNcuhbyOYn36xuTp
 mjLlHBo9kJAMltobfD6G8kiJ1TJSweXkELd87vaGbSKBr9xUvJY1vKoeN09274mSFaNE
 xjFQ==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20230601; t=1748464839; x=1749069639;
 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=MhyHJ0Fcyccmt55+zpUS/446x5C5YezEf2M0gaLLHSE=;
 b=dCWlE5/L8iOG1s7k+sLU7tiTHo+owX/mDS56xv8qcWvI0F5ly1aejSbpMqyK/B9hIg
 DLOj81oSCjxv0yu0EdLSU43JodAwa6RzzRHIkeY0tm1+z/InPxB2GH1qiHr0JAXhsXXo
 L7crMEazqe6MBiOsJ7vvA3HX1Urvf6BK2/VJzpcca6PAg73w0DctmvIMP7Mxp5+RlrNI
 wmWtxUwK5IdURfJ5vR8Rw2+nbPfbIPKLqtxEd2XtGx+5PewT4Okzud5fslGrK8559JAJ
 pPcB3aTcvQjNKn8FuWm3a+LtDJnS9D2K5AftCiSeQg0v73Zespfv9KsF9ucEGkC2jjSS
 91DQ==
X-Gm-Message-State: AOJu0YwGvuVbMzP5jQgCXH2XlxG2AHcMY6SrP74OaTPVFacQKtML4pOO
 YxC+psVMGyh5dB6of7/l/Ll6ohrNaFflat96WqPeQKVPCFhurk2GFrbgL9zFs0vZlotRffRN+LC
 GyK6zfK7HAT6JhSdwh5n0VXjNR+x5nawCNQ==
X-Gm-Gg: ASbGncsgCnJbiUzpy86f57+O47WTqFDDylJXcF0fF4ifOACriEEdSinVvLiKevLC3mo
 +tuVAvBPfgDm01t+LqWqXXLkSgzl6+WvgRY6ynTrNo7efNuW4MATHqn0ys4TjKgMUhL6xxYv5/j
 0hIs12i4DEf4B2i+asi0cx5FXzD4MyqNfYpR4=
X-Google-Smtp-Source: AGHT+IFxUcQbrtkkQ3bp2H2nKXhcP48Xr3AS5T6Eygu/MmaLp9IESOyjT5tht0rEHgt0/YB5WoeYYOi70mayAJz4XN4=
X-Received: by 2002:a05:6122:8b01:b0:530:6dc2:ba90 with SMTP id
 71dfb90a1353d-5306dc2bbe9mr3078555e0c.2.1748464839101; Wed, 28 May 2025
 13:40:39 -0700 (PDT)
MIME-Version: 1.0
References: <CAN+1HbqjV7tVbyz0rRMBvXHC+u1nL59X--m8KxuKwvvKhuXY7A@HIDDEN>
 <7733aaf3-920b-8fe2-d02a-ab1a213f0cb6@HIDDEN>
In-Reply-To: <7733aaf3-920b-8fe2-d02a-ab1a213f0cb6@HIDDEN>
From: Ship Mints <shipmints@HIDDEN>
Date: Wed, 28 May 2025 16:40:26 -0400
X-Gm-Features: AX0GCFu9fRcOKCQ2NTDh8mAH-fqkmZXrfdNILozCoBtbisiPrdyLCCUfDlRZja0
Message-ID: <CAN+1HbqHU-3P_QpQ6gxWQRx4_q6QE_ZVhZTyhhAD1e13R5hxUQ@HIDDEN>
Subject: Re: bug#78621: Pixelwise display specified spaces less precise than
 min-width
To: Jim Porter <jporterbugs@HIDDEN>
Content-Type: multipart/alternative; boundary="000000000000a311fe0636383114"
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 78621
Cc: 78621 <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 (-)

--000000000000a311fe0636383114
Content-Type: text/plain; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

On Wed, May 28, 2025 at 4:14=E2=80=AFPM Jim Porter <jporterbugs@HIDDEN> =
wrote:

> On 5/28/2025 12:44 PM, Ship Mints wrote:
> > You can see this in text-scaled buffers when attempting to pad a string
> > to a specific pixel boundary.  If a pixelwise specified-width space is
> > inserted after a string with variable-pitch glyphs, it doesn't honor th=
e
> > net pixel width.  That same string padded using min-width with the same
> > number of pixels works fine.
>
> Are you sure that your implementation of 'string-pixel-width-scaled' is
> correct? From a brief look, I'd expect that you get some jitter when
> dividing '(default-font-width)' by '(frame-char-width)', since both are
> rounded to the nearest whole number.
>
> If I instead replace that call with:
>
>    (string-pixel-width str (current-buffer))
>
> then everything looks ok to me. As of Emacs 31, passing a buffer does thi=
s:
>
>    If BUFFER is non-nil, use the face remappings, alternative and default
>    properties from that buffer when determining the width.
>
> That should handle all the necessary work to get the string width after
> applying text-scale remappings. I added that argument so I could use it
> in 'visual-wrap-prefix-mode' for a very similar issue you're seeing. See
> commit f70a6ea0ea86ef461e40d20664a75a92d02679ea.
>

Thanks for that.  I think I'm using that in other places.

But... Did you run the repro in question and it worked for you, or are you
saying that this worked for your case?

AFAICT, the repro demonstrates a different issue.  With the identical
string-pixel-width, padding using specified-width spaces vs. min-width
behave differently, so this isn't due to jitter as the widths used are the
same for both cases.

-Stephane

--000000000000a311fe0636383114
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr"><div dir=3D"ltr"><div class=3D"gmail_default" style=3D"fon=
t-family:monospace"><span style=3D"font-family:Arial,Helvetica,sans-serif">=
On Wed, May 28, 2025 at 4:14=E2=80=AFPM Jim Porter &lt;<a href=3D"mailto:jp=
orterbugs@HIDDEN">jporterbugs@HIDDEN</a>&gt; wrote:</span></div></div=
><div class=3D"gmail_quote gmail_quote_container"><blockquote class=3D"gmai=
l_quote" style=3D"margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,20=
4,204);padding-left:1ex">On 5/28/2025 12:44 PM, Ship Mints wrote:<br>
&gt; You can see this in text-scaled buffers when attempting to pad a strin=
g <br>
&gt; to a specific pixel boundary.=C2=A0 If a pixelwise specified-width spa=
ce is <br>
&gt; inserted after a string with variable-pitch glyphs, it doesn&#39;t hon=
or the <br>
&gt; net pixel width.=C2=A0 That same string padded using min-width with th=
e same <br>
&gt; number of pixels works fine.<br>
<br>
Are you sure that your implementation of &#39;string-pixel-width-scaled&#39=
; is <br>
correct? From a brief look, I&#39;d expect that you get some jitter when <b=
r>
dividing &#39;(default-font-width)&#39; by &#39;(frame-char-width)&#39;, si=
nce both are <br>
rounded to the nearest whole number.<br>
<br>
If I instead replace that call with:<br>
<br>
=C2=A0 =C2=A0(string-pixel-width str (current-buffer))<br>
<br>
then everything looks ok to me. As of Emacs 31, passing a buffer does this:=
<br>
<br>
=C2=A0 =C2=A0If BUFFER is non-nil, use the face remappings, alternative and=
 default<br>
=C2=A0 =C2=A0properties from that buffer when determining the width.<br>
<br>
That should handle all the necessary work to get the string width after <br=
>
applying text-scale remappings. I added that argument so I could use it <br=
>
in &#39;visual-wrap-prefix-mode&#39; for a very similar issue you&#39;re se=
eing. See <br>
commit f70a6ea0ea86ef461e40d20664a75a92d02679ea.<br></blockquote><div><br><=
/div><div class=3D"gmail_default" style=3D"font-family:monospace">Thanks fo=
r that.=C2=A0 I think I&#39;m using that in other places.</div><div class=
=3D"gmail_default" style=3D"font-family:monospace"><br></div><div class=3D"=
gmail_default" style=3D"font-family:monospace">But... Did you run the repro=
 in question and it worked for you, or are you saying that this worked for =
your case?</div><div class=3D"gmail_default" style=3D"font-family:monospace=
"><br></div><div class=3D"gmail_default" style=3D"font-family:monospace">AF=
AICT, the repro demonstrates a different issue.=C2=A0 With the identical st=
ring-pixel-width, padding using specified-width spaces vs. min-width behave=
 differently, so this isn&#39;t due to jitter as the widths used are the sa=
me for both cases.</div><div class=3D"gmail_default" style=3D"font-family:m=
onospace"><br></div><div class=3D"gmail_default" style=3D"font-family:monos=
pace">-Stephane</div></div></div>

--000000000000a311fe0636383114--




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#78621; Package emacs. Full text available.

Message received at 78621 <at> debbugs.gnu.org:


Received: (at 78621) by debbugs.gnu.org; 28 May 2025 20:14:46 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Wed May 28 16:14:46 2025
Received: from localhost ([127.0.0.1]:57135 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1uKNAk-0007sG-FQ
	for submit <at> debbugs.gnu.org; Wed, 28 May 2025 16:14:46 -0400
Received: from mail-pj1-x102a.google.com ([2607:f8b0:4864:20::102a]:52399)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
 (Exim 4.84_2) (envelope-from <jporterbugs@HIDDEN>)
 id 1uKNAh-0007rp-2y
 for 78621 <at> debbugs.gnu.org; Wed, 28 May 2025 16:14:43 -0400
Received: by mail-pj1-x102a.google.com with SMTP id
 98e67ed59e1d1-311e993f49aso138297a91.0
 for <78621 <at> debbugs.gnu.org>; Wed, 28 May 2025 13:14:43 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=gmail.com; s=20230601; t=1748463276; x=1749068076; darn=debbugs.gnu.org;
 h=content-transfer-encoding:in-reply-to:from:references:to
 :content-language:subject:mime-version:date:message-id:from:to:cc
 :subject:date:message-id:reply-to;
 bh=3f8QFRKXLNTwpO6erFqCXBByj5CpvAYU2xxamkzaGpQ=;
 b=eg8dclZ/GcVjBVbXcmIlsLu8JV6Wa/IIRMjsMsqaNmSS9fZktGN1VFRfcPYxvnNw8X
 Sz0WVTYpfSEin09ja5zcxongv0BshREPO3EjcP5+7mgIiyLdCNtYDUgBxA+iVSlqF/Im
 uPyOh3Jy9W8E84kgqzp9FlQZlL0zYjnrbpnQB/4ibv8HlNuFJxFXsJW5CigR79960D4j
 Ff7LLrIm/fAaRPtoajuUQSVyOaBvOMsECSLVkXrNUwrJGwVjFEg8wrVKFsiWejLW5+Um
 KHyRVPAPKPazshrRZ22UmYixMElvU/4aJaxmjTqaP4nFASYUscgCUvPeHY/ujUiGrfqh
 pokQ==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20230601; t=1748463276; x=1749068076;
 h=content-transfer-encoding:in-reply-to:from:references:to
 :content-language:subject:mime-version:date:message-id
 :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to;
 bh=3f8QFRKXLNTwpO6erFqCXBByj5CpvAYU2xxamkzaGpQ=;
 b=KRY1A0801MCjwivUkSocg3BfQSD23GGmIOJHBt0QXy4HiQ2a6uB6DCR0rdXsjVUXnd
 pDqzM0qrjPkmKb5t9jmwI0UFLH49rIW48UXbIG1PBRgoOsuCijdBmtnSyMQJQCsAAgcc
 XLNbLw1BQv577hI7OBt2f0bwQuVU0R89196DiEFATjObH5wSpxPM0bRhdFSrDHwZAFW2
 dS29VKIuizehdPWt0Tp5kirkPhu2cLGPcE/rC6V2ToDsgJFSB1rmkKAVXOp50xIY/dT8
 4OnlVesU5wT7XKcR0ng4psMp1yTV42mcOExPdVjGdzYqBfbroJmgyFsweC/vLoHloVkl
 fbBw==
X-Forwarded-Encrypted: i=1;
 AJvYcCXRhNGU4ajbPFhNGszqnVeQQHJHjwKiBILPFn/pByQaVwDqGiVT1MXiwXOOiuat4N2x0L2W8g==@debbugs.gnu.org
X-Gm-Message-State: AOJu0Yzn9cyZp3x3buOPKfXNDUch6Hne2euiZYHyHaSRndRk3HDwoUvS
 uVjytACcOD81iXBvHN9JCzRhEb9kgJEZRYJ9jDEdJPWVsO6WPvkFBP33+gG+eQ==
X-Gm-Gg: ASbGncujUWo6n6CWjAFeXf5GUupYtIbexTDkRDW/SbQoFvIcIAT/UDhXyuGCJQs54rz
 V9UKuEFECimekDJKi1hQqTdURyIfPMT+KuLIDMuKpbF834JaKCWQ5leaQpnalh4atNir3uYVkTf
 h82ngWzz/YlBeEJIYPLjImtPwHa7vMt+qr31c9MqfYySwOyEGvnVraGosnTwTxE++Elnqu1sXQt
 FiEU1YDEhTpv3jkoMsETHfHZWK47Qj0Jl06ZwWFVEMOviMPUaJyJCsuzGyXPnIPdmfVFGu9zBRj
 HDSYazudO5HoPE9hW1OnQMqxxFX8ArJ/5aHwp4ldkTldMZMrfDkNLQreyL5FP5X+kAvF/7nNKo8
 Jz0GrzWez0VZT+3BSY9QGu40KZFyrWiFuieeYmrmnkLhv51tQZNSJ
X-Google-Smtp-Source: AGHT+IFN5MNGxFNd9dalcLz/zP9jaVAfuI0dvmq0r4wJt7KkaPfzV6CvuWsnCNrLMBar6AvMZglCRg==
X-Received: by 2002:a17:90b:2882:b0:312:ec:4128 with SMTP id
 98e67ed59e1d1-31200ec4521mr2355547a91.34.1748463276560; 
 Wed, 28 May 2025 13:14:36 -0700 (PDT)
Received: from [192.168.1.2] (syn-076-168-144-128.res.spectrum.com.
 [76.168.144.128]) by smtp.googlemail.com with ESMTPSA id
 98e67ed59e1d1-3121b71c5c5sm39634a91.17.2025.05.28.13.14.35
 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128);
 Wed, 28 May 2025 13:14:36 -0700 (PDT)
Message-ID: <7733aaf3-920b-8fe2-d02a-ab1a213f0cb6@HIDDEN>
Date: Wed, 28 May 2025 13:14:35 -0700
MIME-Version: 1.0
Subject: Re: bug#78621: Pixelwise display specified spaces less precise than
 min-width
Content-Language: en-US
To: Ship Mints <shipmints@HIDDEN>, 78621 <at> debbugs.gnu.org
References: <CAN+1HbqjV7tVbyz0rRMBvXHC+u1nL59X--m8KxuKwvvKhuXY7A@HIDDEN>
From: Jim Porter <jporterbugs@HIDDEN>
In-Reply-To: <CAN+1HbqjV7tVbyz0rRMBvXHC+u1nL59X--m8KxuKwvvKhuXY7A@HIDDEN>
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 8bit
X-Spam-Score: 0.0 (/)
X-Debbugs-Envelope-To: 78621
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 5/28/2025 12:44 PM, Ship Mints wrote:
> You can see this in text-scaled buffers when attempting to pad a string 
> to a specific pixel boundary.  If a pixelwise specified-width space is 
> inserted after a string with variable-pitch glyphs, it doesn't honor the 
> net pixel width.  That same string padded using min-width with the same 
> number of pixels works fine.

Are you sure that your implementation of 'string-pixel-width-scaled' is 
correct? From a brief look, I'd expect that you get some jitter when 
dividing '(default-font-width)' by '(frame-char-width)', since both are 
rounded to the nearest whole number.

If I instead replace that call with:

   (string-pixel-width str (current-buffer))

then everything looks ok to me. As of Emacs 31, passing a buffer does this:

   If BUFFER is non-nil, use the face remappings, alternative and default
   properties from that buffer when determining the width.

That should handle all the necessary work to get the string width after 
applying text-scale remappings. I added that argument so I could use it 
in 'visual-wrap-prefix-mode' for a very similar issue you're seeing. See 
commit f70a6ea0ea86ef461e40d20664a75a92d02679ea.




Information forwarded to bug-gnu-emacs@HIDDEN:
bug#78621; Package emacs. Full text available.

Message received at submit <at> debbugs.gnu.org:


Received: (at submit) by debbugs.gnu.org; 28 May 2025 19:45:13 +0000
From debbugs-submit-bounces <at> debbugs.gnu.org Wed May 28 15:45:13 2025
Received: from localhost ([127.0.0.1]:56962 helo=debbugs.gnu.org)
	by debbugs.gnu.org with esmtp (Exim 4.84_2)
	(envelope-from <debbugs-submit-bounces <at> debbugs.gnu.org>)
	id 1uKMi8-0005tL-Kq
	for submit <at> debbugs.gnu.org; Wed, 28 May 2025 15:45:13 -0400
Received: from lists.gnu.org ([2001:470:142::17]:56686)
 by debbugs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256)
 (Exim 4.84_2) (envelope-from <shipmints@HIDDEN>)
 id 1uKMi5-0005mU-Hb
 for submit <at> debbugs.gnu.org; Wed, 28 May 2025 15:45:10 -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 <shipmints@HIDDEN>)
 id 1uKMhv-0000dO-Jq
 for bug-gnu-emacs@HIDDEN; Wed, 28 May 2025 15:44:59 -0400
Received: from mail-vk1-xa32.google.com ([2607:f8b0:4864:20::a32])
 by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128)
 (Exim 4.90_1) (envelope-from <shipmints@HIDDEN>)
 id 1uKMhq-0002Ht-A3
 for bug-gnu-emacs@HIDDEN; Wed, 28 May 2025 15:44:57 -0400
Received: by mail-vk1-xa32.google.com with SMTP id
 71dfb90a1353d-52eea8111easo41641e0c.2
 for <bug-gnu-emacs@HIDDEN>; Wed, 28 May 2025 12:44:51 -0700 (PDT)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=gmail.com; s=20230601; t=1748461490; x=1749066290; darn=gnu.org;
 h=to:subject:message-id:date:from:mime-version:from:to:cc:subject
 :date:message-id:reply-to;
 bh=ZxR34e63qesbuq9s7ioZG99JmOhcd+cY28/F1uzEi/M=;
 b=ND0uaip8YRrNMpy9rZg2fSDcbKMtojQ/amAfvJAwbJPIEWYUdRnVi6ICr1esMdyucD
 bFk73TvmIsQoho3693XZ93FIdl2Ais+3wG1QLUwnywQ24f9p/gFbWWdKx8AKnZgDnwR4
 6Lu+YXFNnfjrWLtkqEb0Nr8E7UTBEdsniifAFY4p0bMFi59XjDP24T0or9K3jkcyoaI3
 1w3ZUOpizC5PtfRKOTkKPm8HXgqddZEJAza2St1LSnkrWY9RbzYLZ+blGSjoRm9BVLH+
 eiFC/IHVPKclMDLTsvm7M/yKgz1qLLhlcSSsQpceSzgPNFKLIPIpNHsOrpH9n+AMRlXs
 G9Og==
X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed;
 d=1e100.net; s=20230601; t=1748461490; x=1749066290;
 h=to:subject:message-id:date:from:mime-version:x-gm-message-state
 :from:to:cc:subject:date:message-id:reply-to;
 bh=ZxR34e63qesbuq9s7ioZG99JmOhcd+cY28/F1uzEi/M=;
 b=Bg8ZqsL7gQICkM9qM6/turJu/YFoccGORzJKq7KLdmEOJmypiVbQFfnT1u9dOAD5rh
 nftlsu6fxjzNICJEBUowN226FDsOc1kfCnLGWQlQt8apSXBTmj1+2t8v5CLMbIcPaMFF
 PLkdnSxJLRGW67O/cYD7luasLIfXCrVsCl8SiOKl97n2C0wdRn03aG77wwF6au1ImfB0
 a1al3W8V3h4nvIJpP6nnY0spuHZBXBQLtXUq07SpP2MFv0yaJ7TN3SRuUpsK2i26LFGl
 qTgvI51Ly3cIFGz3HZd0ciOZDQKkZgaUcw6gLuYb0tqxSU2V9OWBEadcdjc2j6+k6p39
 hHog==
X-Gm-Message-State: AOJu0Yxhu9sdfMJrZZm/AMNq6MGIXoP+R/DGUwbyKziaL2H99Y57jUmi
 uaIX8uLuriW6iCNAz7fBqZ5P81GAjwGvhGUt9Dj5WCBREruvWETrT6SjrrtXWWWw50LNzkOtvxo
 vhrPT/sD9GI7rtPgGEHOU2KKroxOibT1akdW/
X-Gm-Gg: ASbGnctDWpTM6x89jKZR5novuNgdhW1h2dXH8DqErxI0ZC5yrZz61DsBXySc7y+ollN
 DaJ2uOQEYSdgqZR8VJJKDcIgQTKRftgD2FDCd/JThr+4316F5yIJRTCtRX4vUgoBiIcuTQ72Vet
 E0FrAiEV/evcphq3x3FIXRl2NBPXR3HPPtrzFZMlDoKZdR0A==
X-Google-Smtp-Source: AGHT+IGGqiVwKZ+O9rrau18H273elkAi3reK9YY56GT85deu+WleLGR5/PcflD7s3dkzjd150Y0CtBH44ux7HYMvj1M=
X-Received: by 2002:a05:6122:2a13:b0:530:720b:abe9 with SMTP id
 71dfb90a1353d-530720bc03bmr903073e0c.7.1748461490132; Wed, 28 May 2025
 12:44:50 -0700 (PDT)
MIME-Version: 1.0
From: Ship Mints <shipmints@HIDDEN>
Date: Wed, 28 May 2025 15:44:38 -0400
X-Gm-Features: AX0GCFt5DfAmJkXzc0UKk4NYh1tz-X_Pw0vJDShZekdCMh8hcQCPrQotVtueI2c
Message-ID: <CAN+1HbqjV7tVbyz0rRMBvXHC+u1nL59X--m8KxuKwvvKhuXY7A@HIDDEN>
Subject: Pixelwise display specified spaces less precise than min-width
To: bug-gnu-emacs@HIDDEN
Content-Type: multipart/mixed; boundary="00000000000005f9330636376a89"
Received-SPF: pass client-ip=2607:f8b0:4864:20::a32;
 envelope-from=shipmints@HIDDEN; helo=mail-vk1-xa32.google.com
X-Spam_score_int: -1
X-Spam_score: -0.2
X-Spam_bar: /
X-Spam_report: (-0.2 / 5.0 requ) DKIM_SIGNED=0.1, DKIM_VALID=-0.1,
 DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001,
 HTML_MESSAGE=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001,
 SPF_PASS=-0.001 autolearn=unavailable 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 (/)

--00000000000005f9330636376a89
Content-Type: multipart/alternative; boundary="00000000000005f9320636376a87"

--00000000000005f9320636376a87
Content-Type: text/plain; charset="UTF-8"

This came up as I've been working on improving vtable to operate well in
text-scaled buffers and getting things to align on pixel boundaries is
impacted by this rendering issue.

You can see this in text-scaled buffers when attempting to pad a string to
a specific pixel boundary.  If a pixelwise specified-width space is
inserted after a string with variable-pitch glyphs, it doesn't honor the
net pixel width.  That same string padded using min-width with the same
number of pixels works fine.

I've attached a -Q reproducer which I've run on 30.1 and a recent master
with the same results on macOS.  On master, I run as "src/emacs -Q -l
repro-variable-pitch-pixels.el".

The reproducer shows that a variable-pitch string padded to a specific
pixel width using string+specified space is unreliable vs. string with a
min-width display property.  Fixed-pitch glyphs seem fine and everything
works at scale 0.  There are three buffers created: scale 0, scale -1,
scale +1.

I tried to find where in xdisp.c or in ns*.m this would manifest, but it
wasn't immediately obvious.  I don't have access to another platform this
week, so I do not know if this is NS specific or also manifests with other
toolkits.

-Stephane

--00000000000005f9320636376a87
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr"><span style=3D"font-family:monospace">This came up as I&#3=
9;ve been working on improving vtable to operate well in text-scaled buffer=
s and getting things to align on pixel boundaries is impacted by this rende=
ring issue.</span><br class=3D"gmail-Apple-interchange-newline"><div class=
=3D"gmail_default" style=3D"font-family:monospace"><br></div><div class=3D"=
gmail_default" style=3D"font-family:monospace">You can see this in text-sca=
led buffers when attempting to pad a string to a specific pixel boundary.=
=C2=A0 If a pixelwise specified-width space is inserted after a string with=
 variable-pitch glyphs, it doesn&#39;t honor the net pixel width.=C2=A0 Tha=
t same string padded using min-width with the same number of pixels works f=
ine.</div><div class=3D"gmail_default" style=3D"font-family:monospace"><br>=
</div><div class=3D"gmail_default" style=3D"font-family:monospace">I&#39;ve=
 attached a -Q reproducer which I&#39;ve run on 30.1 and a recent master wi=
th the same results on macOS.=C2=A0 On master, I run as &quot;src/emacs -Q =
-l repro-variable-pitch-pixels.el&quot;.</div><div class=3D"gmail_default" =
style=3D"font-family:monospace"><br></div><div class=3D"gmail_default" styl=
e=3D"font-family:monospace">The reproducer shows that a variable-pitch stri=
ng padded to a specific pixel width using string+specified space is unrelia=
ble vs. string with a min-width display property.=C2=A0 Fixed-pitch glyphs =
seem fine and everything works at scale 0.=C2=A0 There are three buffers cr=
eated: scale 0, scale -1, scale=C2=A0+1.<br><br></div><div class=3D"gmail_d=
efault" style=3D"font-family:monospace">I tried to find where in xdisp.c or=
 in ns*.m this would manifest, but it wasn&#39;t immediately obvious.=C2=A0=
 I don&#39;t have access to another platform this week, so I do not know if=
 this is NS specific or also manifests with other toolkits.<br></div><div c=
lass=3D"gmail_default" style=3D"font-family:monospace"><br></div><div class=
=3D"gmail_default" style=3D"font-family:monospace">-Stephane</div></div>

--00000000000005f9320636376a87--

--00000000000005f9330636376a89
Content-Type: application/octet-stream; 
	name="repro-variable-pitch-pixels.el"
Content-Disposition: attachment; filename="repro-variable-pitch-pixels.el"
Content-Transfer-Encoding: base64
Content-ID: <f_mb8ch83j0>
X-Attachment-Id: f_mb8ch83j0

Ozs7IHJlcHJvLXZhcmlhYmxlLXBpdGNoLXBpeGVscy5lbCAtLS0gLSotIGxleGljYWwtYmluZGlu
ZzogdDsgLSotCgooc2V0LWZyYW1lLXNpemUgbmlsIDEwMCA2MCkKKHNlbGVjdC1mcmFtZS1zZXQt
aW5wdXQtZm9jdXMgKHNlbGVjdGVkLWZyYW1lKSkgOyBtYWNvcyBzdGlsbCBoYXMgdGhpcyBpc3N1
ZSBvbiBtYXN0ZXIKKHJlcXVpcmUgJ2NsLWxpYikKKGRvbGlzdCAoYnVmLXNjYWxlICcoKCJmb28t
MCIgIC4gMCkKICAgICAgICAgICAgICAgICAgICAgKCJmb28tMSIgLiAtMSkKICAgICAgICAgICAg
ICAgICAgICAgKCJmb28rMSIgLiAgMSkpKQogICh3aXRoLWN1cnJlbnQtYnVmZmVyIChnZXQtYnVm
ZmVyLWNyZWF0ZSAoY2FyIGJ1Zi1zY2FsZSkpCiAgICAoZXJhc2UtYnVmZmVyKQogICAgKHRleHQt
c2NhbGUtaW5jcmVhc2UgMCkKICAgIChsZXQgKChwYWQtdG8td2lkdGggMTUwKSkKICAgICAgKGNs
LWxhYmVscwogICAgICAgICAgKChzdHJpbmctcGl4ZWwtd2lkdGgtc2NhbGVkIChzdHIpCiAgICAg
ICAgICAgICAoY2VpbGluZyAoKiAoc3RyaW5nLXBpeGVsLXdpZHRoIHN0cikKICAgICAgICAgICAg
ICAgICAgICAgICAgICgvIChmbG9hdCAoZGVmYXVsdC1mb250LXdpZHRoKSkgKGZyYW1lLWNoYXIt
d2lkdGgpKSkpKQogICAgICAgICAgIChpbnNlcnQtcGFkLXRvLXdpZHRoIChzdHIgZmFjZSkKICAg
ICAgICAgICAgIChsZXQqICgocyAocHJvcGVydGl6ZSBzdHIgJ2ZhY2UgZmFjZSkpCiAgICAgICAg
ICAgICAgICAgICAgKHBhZC13aWR0aCAoLSBwYWQtdG8td2lkdGgKICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIChzdHJpbmctcGl4ZWwtd2lkdGgtc2NhbGVkIHMpKSkpCiAgICAgICAg
ICAgICAgIChpbnNlcnQKICAgICAgICAgICAgICAgIHMKICAgICAgICAgICAgICAgIChwcm9wZXJ0
aXplICIgIiAnZGlzcGxheSAobGlzdCAnc3BhY2UgOndpZHRoIChsaXN0IHBhZC13aWR0aCkpKQog
ICAgICAgICAgICAgICAgInwgJ3NwYWNlIDp3aWR0aFxuIikKICAgICAgICAgICAgICAgKGluc2Vy
dAogICAgICAgICAgICAgICAgKHByb3BlcnRpemUgcyAnZGlzcGxheSAobGlzdCAnbWluLXdpZHRo
IChsaXN0IChsaXN0IHBhZC10by13aWR0aCkpKSkKICAgICAgICAgICAgICAgICJ8IG1pbi13aWR0
aFxuIikpKSkKICAgICAgICAodGV4dC1zY2FsZS1pbmNyZWFzZSAoY2RyIGJ1Zi1zY2FsZSkpCiAg
ICAgICAgKGRvbGlzdCAoc3RyICcoIkFiQ2RFZkciCiAgICAgICAgICAgICAgICAgICAgICAgIkEt
QipDLkQhRTtGOkciCiAgICAgICAgICAgICAgICAgICAgICAgImEtYi1jLWQtZS1mLWciCiAgICAg
ICAgICAgICAgICAgICAgICAgIjAxMjM0NTY3ODkiKSkKICAgICAgICAgIChpbnNlcnQtcGFkLXRv
LXdpZHRoIChjb25jYXQgImY6IiBzdHIpICdmaXhlZC1waXRjaCkKICAgICAgICAgIChpbnNlcnQt
cGFkLXRvLXdpZHRoIChjb25jYXQgInY6IiBzdHIpICd2YXJpYWJsZS1waXRjaCkpCiAgICAgICAg
KHBvcC10by1idWZmZXIgKGN1cnJlbnQtYnVmZmVyKSkKICAgICAgICAoc3BsaXQtd2luZG93LWJl
bG93KSkpKSkKKGRlbGV0ZS13aW5kb3cpCihiYWxhbmNlLXdpbmRvd3MpCgo7OzsgcmVwcm8tdmFy
aWFibGUtcGl0Y2gtcGl4ZWxzLmVsIGVuZHMgaGVyZQo=
--00000000000005f9330636376a89--




Acknowledgement sent to Ship Mints <shipmints@HIDDEN>:
New bug report received and forwarded. Copy sent to bug-gnu-emacs@HIDDEN. Full text available.
Report forwarded to bug-gnu-emacs@HIDDEN:
bug#78621; Package emacs. Full text available.
Please note: This is a static page, with minimal formatting, updated once a day.
Click here to see this page with the latest information and nicer formatting.
Last modified: Fri, 30 May 2025 20:30:03 UTC

GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997 nCipher Corporation Ltd, 1994-97 Ian Jackson.