GNU bug report logs -
#77042
31.0.50; `string-pixel-width' could return wrong results with alternative properties
Previous Next
Reported by: David Ponce <da_vid <at> orange.fr>
Date: Sat, 15 Mar 2025 22:45:02 UTC
Severity: normal
Found in version 31.0.50
Done: Eli Zaretskii <eliz <at> gnu.org>
Bug is archived. No further changes may be made.
Full log
Message #8 received at 77042 <at> debbugs.gnu.org (full text, mbox):
> Date: Sat, 15 Mar 2025 23:43:33 +0100
> From: David Ponce via "Bug reports for GNU Emacs,
> the Swiss army knife of text editors" <bug-gnu-emacs <at> gnu.org>
>
> (let ((text0 (propertize "This text" 'face 'variable-pitch))
> (text1 (propertize "This text" 'my-face 'variable-pitch)))
> (with-temp-buffer
> (setq-local char-property-alias-alist '((face my-face)))
> (list
> (string-pixel-width text0 (current-buffer))
> (string-pixel-width text1 (current-buffer)))))
>
> Normally the result should be a list of two identical numbers. But,
> on my config, the result is (89 117) instead of expected (89 89).
>
> This problem is similar to the already solved case with
> `face-remapping-alist', as is the solution.
>
> I propose the attached patch to fix this and slightly simplify the
> code. On my configuration, the new code has no significant impact on
> performance.
Thanks, please see some comments below.
> + ;; Setup current buffer to correctly compute pixel width.
> + (when buffer
> + (if (local-variable-p 'face-remapping-alist buffer)
> + (setq-local face-remapping-alist
> + (buffer-local-value 'face-remapping-alist
> + buffer)))
> + (if (local-variable-p 'char-property-alias-alist buffer)
> + (setq-local char-property-alias-alist
> + (buffer-local-value 'char-property-alias-alist
> + buffer))))
What about default-text-properties? shouldn't it get the same
treatment?
> - (add-text-properties
> - (point-min) (point-max) '(display-line-numbers-disable t))
> - ;; Prefer `remove-text-properties' to `propertize' to avoid
> - ;; creating a new string on each call.
> - (remove-text-properties
> - (point-min) (point-max) '(line-prefix nil wrap-prefix nil))
> - (setq line-prefix nil wrap-prefix nil)
> + (add-text-properties (point-min) (point-max)
> + '( display-line-numbers-disable t
> + line-prefix "" wrap-prefix ""))
What is the rationale for this hunk? Was there any problem with the
original code?
In any case, please don't leave a space after an opening parenthesis.
This bug report was last modified 141 days ago.
Previous Next
GNU bug tracking system
Copyright (C) 1999 Darren O. Benham,
1997,2003 nCipher Corporation Ltd,
1994-97 Ian Jackson.