Fix 'string-pixel-width' under 'line-prefix'

* lisp/emacs-lisp/subr-x.el (string-pixel-width): Disable
'line-prefix' and 'wrap-prefix' to avoid their effect on the
calculated string width.  (Bug#64971)
This commit is contained in:
Eli Zaretskii 2023-07-31 21:50:45 +03:00
parent 7bbd7cae07
commit 0c29f53ab8

View file

@ -322,12 +322,15 @@ as the new values of the bound variables in the recursive invocation."
;; Keeping a work buffer around is more efficient than creating a ;; Keeping a work buffer around is more efficient than creating a
;; new temporary buffer. ;; new temporary buffer.
(with-current-buffer (get-buffer-create " *string-pixel-width*") (with-current-buffer (get-buffer-create " *string-pixel-width*")
;; `display-line-numbers-mode' is enabled in internal buffers ;; If `display-line-numbers-mode' is enabled in internal
;; that breaks width calculation, so need to disable (bug#59311) ;; buffers, it breaks width calculation, so disable it (bug#59311)
(when (bound-and-true-p display-line-numbers-mode) (when (bound-and-true-p display-line-numbers-mode)
(display-line-numbers-mode -1)) (display-line-numbers-mode -1))
(delete-region (point-min) (point-max)) (delete-region (point-min) (point-max))
(insert string) ;; Disable line-prefix and wrap-prefix, for the same reason.
(setq line-prefix nil
wrap-prefix nil)
(insert (propertize string 'line-prefix nil 'wrap-prefix nil))
(car (buffer-text-pixel-size nil nil t))))) (car (buffer-text-pixel-size nil nil t)))))
;;;###autoload ;;;###autoload