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:27:30 +0100

>> What is the width of a buffer?  What are em-lenght units?
 >
 > I mean, the distance (in useful units!) from the left side of the
 > buffer,

... a buffer has no "left side" unless you mean the value of how many
columns the buffer has been scrolled horizontally in some window ...

 > as displayed within a given window, to the right side of that
 > window.  If the buffer is displayed using *a fixed width font*, then one
 > useful unit is *columns*, i.e. the number of columns that can be
 > displayed before line wrap or continuation kicks in.  However, if the
 > buffer is displayed using a variable-width font, then "columns" is *not*
 > necessarily a meaningful unit -- as has been pointed out in the earlier
 > discussion.  In this case, see below for "ems."
 >
 > To be clear, the width of the *window* calculated in non-buffer-specific
 > units is not generally "useful" for the purpose of measuring the number
 > of characters that can be fit, horizontally, into the buffer.

".., into the window" I presume.  Is it that what you want to do: Fit
characters into a window?

 > Nevertheless, if the window is displayed using *the default face* at the
 > default scale (and if the default font happens to be fixed width!) then
 > `window-body-width' does indeed return the number of columns.

The number of columns available for displaying the buffer in the window.

 >    «An em is a unit in the field of typography, equal to the currently
 >    specified point size. For example, one em in a 16-point typeface is 16
 >    points. Therefore, this unit is the same for all typefaces at a given
 >    point size. [...] The name "em" was originally a reference to the
 >    width of the the capital "M" in the typeface and size being used,
 >    which was often the same as the point size.»

So you mean the width of a default face "M" in points here?  No idea how
to get that.  IIRC `nlinum-mode' tries to approximate that somehow.

 >> (3) `text-scale-mode-amount' constitutes a request to the display engine
 >>       to scale a face height.  What shall we do when our target machine
 >>       can't display the character with the requested height and uses, for
 >>       example, the nearest available height instead?
 >
 > Presumably the function should fall back to the height (and
 > corresponding scale factor) that is actually used.  This is an edge case
 > that I hadn't considered!

Apparently it's possible to get the face actually used, but I don't
understand how.

martin