Subject: bug#39264: 26.3; (frame-char-width) is different from real char width of monospace font 'Noto Sans Mono'

From: Eli Zaretskii <[email-masked]>
Date: Fri, 24 Jan 2020 17:34:04 +0200

tags 39264 notabug
thanks

> From: [email-masked]
> Date: Fri, 24 Jan 2020 23:55:42 +0900
> 
> I installed Noto fonts.
> With setting frame font to "Noto Sans Mono", which is a monospace font,
> (frame-char-width) and the real char width may differ.
> 
> For example, using "Noto Sans Mono-13", (frame-char-width) is one pixel larger.
>   (progn
>     (set-frame-font "Noto Sans Mono-13")
>     (list (frame-char-width) (car (window-text-pixel-size nil 1 2))))
>   => (11 10)

This is not a bug.  frame-char-width returns the value of the font's
"average width" attribute, whereas window-text-pixel-size actually
performs the layout of the specified text, simulating its display, and
measures the result.  Thus, the values can differ, although for
monospaced fonts they cannot (or should not) differ by too much.

The upshot of this is that you cannot really perform accurate layout
calculations from Lisp, at least not easily.  There's no way around
this basic difficulty.