Starting with Emacs 23, fonts are specified by their name, size and optional properties. The format for specifying fonts comes from the fontconfig library used in modern Free desktops:
The old XLFD based format is also supported for backwards compatibility.
Emacs on MS-Windows supports a number of font backends. Currently,
harfbuzz backends are
gdi font backend is available on all versions
of Windows, and supports all fonts that are natively supported by
uniscribe font backend is available on Windows
2000 and later, and supports TrueType and OpenType fonts. The
harfbuzz font backend is available if Emacs was built with
HarfBuzz support, and if the HarfBuzz DLL is installed on your system;
uniscribe, this backend supports only TrueType and
OpenType fonts. Some languages requiring complex layout can only be
properly supported by the Uniscribe or HarfBuzz backends. By default,
two backends are enabled for each frame:
gdi and either
uniscribe, depending on which one is
available (if both are available, only
harfbuzz is enabled by
uniscribe backends take
gdi when Emacs looks for a suitable font. To
override that and use the GDI backend even if Uniscribe is available,
invoke Emacs with the -xrm Emacs.fontBackend:gdi command-line
argument, or add a
Emacs.fontBackend resource with the value
gdi in the Registry under either the
‘HKEY_CURRENT_USER\SOFTWARE\GNU\Emacs’ or the
‘HKEY_LOCAL_MACHINE\SOFTWARE\GNU\Emacs’ key (see Resources).
Similarly, to use the Uniscribe backend even if HarfBuzz is available,
use -xrm Emacs.fontBackend:uniscribe on the command line that
invokes Emacs. You can also request all the 3 backends via the
font-backend frame parameter, but be warned that in that case
font searches for characters for which no fonts are available on the
system will take longer.
Alternatively, you could specify a font backend for a frame via the
font-backend frame parameter, using
modify-frame-parameters (see Parameter Access in The
Emacs Lisp Reference Manual). You can also request specific font
backend(s) for all your frames via
initial-frame-alist (see Frame Parameters). Note that the
value of the
font-backend parameter should be a list of
symbols, as in
(harfbuzz uniscribe gdi).
Optional font properties supported on MS-Windows are:
Specifies the weight of the font. Special values
black can be specified
weight= (e.g., Courier New-12:bold). Otherwise,
the weight should be a numeric value between 100 and 900, or one of the
named weights in
font-weight-table. If unspecified, a regular font
Specifies whether the font is italic. Special values
oblique can be specified
slant= (e.g., Courier New-12:italic).
Otherwise, the slant should be a numeric value, or one of the named
font-slant-table. On Windows, any slant above 150 is
treated as italics, and anything below as roman.
Specifies the font family, but normally this will be specified at the start of the font name.
Specifies the font size in pixels. This can be used instead of the point size specified after the family name.
Specifies additional style information for the font.
On MS-Windows, the values
decorative are recognized. These are most useful
as a fallback with the font family left unspecified.
Specifies the character set registry that the font is
expected to cover. Most TrueType and OpenType fonts will be Unicode fonts
that cover several national character sets, but you can narrow down the
selection of fonts to those that support a particular character set by
using a specific registry from
Specifies how the font is spaced. The
p spacing specifies
a proportional font, and
c specify a monospaced font.
Not used on Windows, but for informational purposes and to
prevent problems with code that expects it to be set, is set internally to
raster for bitmapped fonts,
outline for scalable fonts,
unknown if the type cannot be determined as one of those.
Specifies a Unicode subrange the font should support.
All the scripts known to Emacs (which generally means all the scripts
defined by the latest Unicode Standard) are recognized on MS-Windows.
GDI fonts support only a subset of the known scripts:
Specifies the antialiasing method. The value
none means no
standard means use standard antialiasing,
subpixel means use subpixel antialiasing (known as
Cleartype on Windows), and
natural means use subpixel
antialiasing with adjusted spacing between letters. If unspecified,
the font will use the system default antialiasing.
The method used by Emacs on MS-Windows to look for fonts suitable for
displaying a given non-ASCII character might fail for some rare
scripts, specifically those added by Unicode relatively recently, even
if you have fonts installed on your system that support those scripts.
That is because these scripts have no Unicode Subrange Bits (USBs)
defined for them in the information used by Emacs on MS-Windows to
look for fonts. You can use the
function to overcome these problems. It needs to be run once at the
beginning of the Emacs session, and again if you install new fonts.
You can add the following line to your init file to have this function
run every time you start Emacs:
Alternatively, you can run this function manually via M-:
(see Lisp Eval) at any time. On a system that has many fonts
w32-find-non-USB-fonts might take a couple
of seconds; if you consider that to be too long to be run during
startup, and if you install new fonts only rarely, run this function
once via M-:, and then assign the value it returns, if
nil, to the variable
w32-non-USB-fonts in your init
file. (If the function returns
nil, you have no fonts
installed that can display characters from the scripts which need this
w32-use-w32-font-dialog controls the way fonts can
be selected via S-mouse-1 (
the value is
t, the default, Emacs uses the standard Windows
font selection dialog. If the value is
nil, Emacs instead pops
a menu of a fixed set of fonts. The fonts to appear in the menu are