Improve calculation of indent prefixes when using text scaling

Previously, the display spec for the "average space" was wrong.  It used
a plain number for the width of the specified space, which means "N
times the normal character width for the buffer", but we want "N times
the normal character width for the *current face*" (bug#76008).

* lisp/visual-wrap.el (visual-wrap--content-prefix): Specify the width
of the "average space" in terms of the average width of the current
face.

* lisp/net/shr.el (shr-indent): As above, and call 'string-pixel-width'
without specifying the buffer, to match 'shr-string-pixel-width'.
This commit is contained in:
Jim Porter
2025-02-04 09:25:17 -08:00
parent b685b21a33
commit 6842415577
2 changed files with 4 additions and 4 deletions

View File

@@ -1052,15 +1052,15 @@ When `shr-fill-text' is nil, only indent."
(insert-char ?\s shr-indentation)
(insert ?\s)
;; Set the specified space width in units of the average-width
;; of the current font, like (N . width). That way, the
;; of the current face, like (N . width). That way, the
;; indentation is calculated correctly when using
;; `text-scale-adjust'.
(let ((avg-space (propertize (buffer-substring (1- (point)) (point))
'display '(space :width 1))))
'display '(space :width (1 . width)))))
(put-text-property
(1- (point)) (point) 'display
`(space :width (,(/ (float shr-indentation)
(string-pixel-width avg-space (current-buffer)))
(string-pixel-width avg-space))
. width)))))
(put-text-property start (+ (point) prefix)
'shr-prefix-length (+ prefix (- (point) start))))))

View File

@@ -164,7 +164,7 @@ PREFIX was empty."
;; units of the font's average-width) large enough to fit the
;; first-line prefix.
(let ((avg-space (propertize (buffer-substring position (1+ position))
'display '(space :width 1))))
'display '(space :width (1 . width)))))
;; Remove any `min-width' display specs since we'll replace with
;; our own later in `visual-wrap--apply-to-line' (bug#73882).
(add-display-text-property 0 (length prefix) 'min-width nil prefix)