Next: , Previous: , Up: Advanced customization   [Index]

7.9 DIY Font configurations for Org and others

[ Consider using the fontaine package from GNU ELPA (by Protesilaos) for all font-related configurations. ]

The themes are designed to optionally cope well with mixed font configurations. This mostly concerns org-mode and markdown-mode, though expect to find it elsewhere like in Info-mode.

Option for font mixing.

In practice it means that the user can safely opt for a more prose-friendly proportionately spaced typeface as their default, while spacing-sensitive elements like tables and inline code always use a monospaced font, by inheriting from the fixed-pitch face.

Users can try the built-in M-x variable-pitch-mode to see the effect in action.

To make everything use your desired font families, you need to configure the variable-pitch (proportional spacing) and fixed-pitch (monospaced) faces respectively. It may also be convenient to set your main typeface by configuring the default face the same way.

Put something like this in your initialization file (also consider reading the doc string of set-face-attribute):

;; Main typeface
(set-face-attribute 'default nil :family "DejaVu Sans Mono" :height 110)

;; Proportionately spaced typeface
(set-face-attribute 'variable-pitch nil :family "DejaVu Serif" :height 1.0)

;; Monospaced typeface
(set-face-attribute 'fixed-pitch nil :family "DejaVu Sans Mono" :height 1.5)

Or employ the face-attribute function to read an existing value, such as if you want to make fixed-pitch use the font family of the default face:

(set-face-attribute 'fixed-pitch nil :family (face-attribute 'default :family))

The next section shows how to make those work in a more elaborate setup that is robust to changes between the Modus themes.

Configure bold and italic faces.

Note the differences in the :height property. The default face must specify an absolute value, which is the point size Ă— 10. So if you want to use a font at point size ‘11’, you set the height to ‘110’.1 Whereas every other face must either not specify a height or have a value that is relative to the default, represented as a floating point. If you use an integer, then that means an absolute height. This is of paramount importance: it ensures that all fonts can scale gracefully when using something like the text-scale-adjust command which only operates on the base font size (i.e. the default face’s absolute height).

Note for EWW and Elfeed fonts.


Footnotes

(1)

:height values do not need to be rounded to multiples of ten: the likes of ‘115’ are perfectly valid—some typefaces will change to account for those finer increments.

Next: DIY Configure bold and italic faces, Previous: DIY Remap face with local value, Up: Advanced customization   [Index]