From 757051908bd998ee95f6b6a51e5d56bc188129ec Mon Sep 17 00:00:00 2001 From: Jim Porter Date: Tue, 4 Feb 2025 09:25:17 -0800 Subject: [PATCH] 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'. (cherry picked from commit 6842415577405adafcba16f8cbff02f35b5583f9) --- lisp/net/shr.el | 6 +++--- lisp/visual-wrap.el | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/lisp/net/shr.el b/lisp/net/shr.el index a732e25a560..7521860db09 100644 --- a/lisp/net/shr.el +++ b/lisp/net/shr.el @@ -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)))))) diff --git a/lisp/visual-wrap.el b/lisp/visual-wrap.el index cceb694cfcc..50879cc30c9 100644 --- a/lisp/visual-wrap.el +++ b/lisp/visual-wrap.el @@ -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) -- 2.39.5