Subject: bug#19194: 24.4.50; `window-body-width' is not dynamic relative to font size changes

From: martin rudalics <[email-masked]>
Date: Fri, 28 Nov 2014 08:29:05 +0100

> Faces are frame-specific.  The same face can have different attributes
 > on each frame, and that includes the size.

That's what I'm trying to fathom out here all the time.  So when
calculating the actual height of a character as it will be displayed in
a window I have to apply (in some order) the height attribute specified
by (1) the font of the frame the window belongs to, (2) the font of the
buffer shown in the window, and (3) the font of the default face.

 >>   > You mean, like what default-font-height returns?
 >>
 >> Does this take text scaling into account?
 >
 > Yes.  You can try it yourself: call it before and after "C-x C-+", and
 > see for yourself.

I did now.

 >> Is this the final value as it would be displayed or could the height
 >> of "the font of the frame's 'default' face" get mixed in afterwards?
 >
 > The former, I think.

OK.  Now how do I get the `default-font-width' from that?

 >> And how does `default-font-height' differ from
 >> `default-line-height'?
 >
 > default-line-height includes the line-spacing.

I see.  Silly of me to ask.

The doc-string of this should be slightly improved because OT1H
`line-spacing' is buffer-local and OTOH "the frame" in

   The value includes `line-spacing', if any, defined for the buffer
   or the frame.

is slightly ambiguous.

 >>   > Btw, the OP wanted the width of the window, not its height, AFAIR.
 >>
 >> ... we would need `window-screen-columns' too.
 >
 > That will be harder, unless we change some APIs.  We currently don't
 > have the font width in what font-info returns.

Is there a way to approximate the "width of a character" in points from
(1) its height and (2) its width attribute?

martin