G.10 Specifying Fonts on MS-Windows
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:
[Family[-PointSize]][:Option1=Value1[:Option2=Value2[...]]]
The old XLFD based format is also supported for backwards compatibility.
Emacs on MS-Windows supports a number of font backends. Currently, the gdi
, uniscribe
, and harfbuzz
backends are available. The gdi
font backend is available on all versions of Windows, and supports all fonts that are natively supported by Windows. The 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; like 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 harfbuzz
or uniscribe
, depending on which one is available (if both are available, only harfbuzz
is enabled by default). The harfbuzz
and uniscribe
backends take priority over 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 default-frame-alist
and initial-frame-alist
(see Frame Parameters). Note that the value of the font-backend
parameter should be a list of symbols, as in (uniscribe)
or (harfbuzz uniscribe gdi)
.
Optional font properties supported on MS-Windows are:
weight
​
Specifies the weight of the font. Special values light
, medium
, demibold
, bold
, and black
can be specified without 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 is assumed.
slant
​
Specifies whether the font is italic. Special values roman
, italic
and oblique
can be specified without slant=
(e.g., Courier New-12:italic
). Otherwise, the slant should be a numeric value, or one of the named slants in font-slant-table
. On Windows, any slant above 150 is treated as italics, and anything below as roman.
family
​
Specifies the font family, but normally this will be specified at the start of the font name.
pixelsize
​
Specifies the font size in pixels. This can be used instead of the point size specified after the family name.
adstyle
​
Specifies additional style information for the font. On MS-Windows, the values mono
, sans
, serif
, script
and decorative
are recognized. These are most useful as a fallback with the font family left unspecified.
registry
​
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 w32-charset-info-alist
here.
spacing
​
Specifies how the font is spaced. The p
spacing specifies a proportional font, and m
or c
specify a monospaced font.
foundry
​
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, or unknown
if the type cannot be determined as one of those.
script
​
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. However, GDI
fonts support only a subset of the known scripts: greek
, hangul
, kana
, kanbun
, bopomofo
, tibetan
, yi
, mongolian
, hebrew
, arabic
, and thai
.
antialias
​
Specifies the antialiasing method. The value none
means no antialiasing, 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 w32-find-non-USB-fonts
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:
(w32-find-non-USB-fonts)
Alternatively, you can run this function manually via M-:
(see Lisp Eval) at any time. On a system that has many fonts installed, running 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 non-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 facility.)
The variable w32-use-w32-font-dialog
controls the way fonts can be selected via S-mouse-1
(mouse-appearance-menu
). If 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 determined by w32-fixed-font-alist
.