🏆 I provide private lessons on Emacs, Linux, and Life in general: https://protesilaos.com/coach/. Lessons continue throughout the year.

Emacs: custom faces for Org emphasis styles (org-emphasis-alist)

Raw link: https://www.youtube.com/watch?v=ld1kAq_DswY

In this video presentation, I demonstrate how to define Emacs “faces” for the purposes of configuring the user option org-emphasis-alist. In short: you can add more colours or alternative styles to your org-mode buffers for the different styles of emphasis that the Org notation supports.

This video can also be described as an introduction to using the defface macro, as I explain all you need to know to get started. A face is a construct that holds display attributes, such as the colour of the text or a background value, as well as typographic properties like a bold weight and a slant. Faces can evaluate conditions to determine which set of attributes to apply. In practical terms, this means that we do not need different faces for light and dark themes: one definition with the appropriate checks will suffice.

Below is the code I used for the demo:

(setq org-emphasis-alist
      '(("*" bold)
        ("/" italic)
        ("_" underline)
        ("=" org-verbatim verbatim)
        ("~" org-code verbatim)
        ("+" (:strike-through t))))

(defface my-org-emphasis-bold
  '((default :inherit bold)
    (((class color) (min-colors 88) (background light))
     :foreground "#a60000")
    (((class color) (min-colors 88) (background dark))
     :foreground "#ff8059"))
  "My bold emphasis for Org.")

(defface my-org-emphasis-italic
  '((default :inherit italic)
    (((class color) (min-colors 88) (background light))
     :foreground "#005e00")
    (((class color) (min-colors 88) (background dark))
     :foreground "#44bc44"))
  "My italic emphasis for Org.")

(defface my-org-emphasis-underline
  '((default :inherit underline)
    (((class color) (min-colors 88) (background light))
     :foreground "#813e00")
    (((class color) (min-colors 88) (background dark))
     :foreground "#d0bc00"))
  "My underline emphasis for Org.")

(defface my-org-emphasis-strike-through
  '((((class color) (min-colors 88) (background light))
     :strike-through "#972500" :foreground "#505050")
    (((class color) (min-colors 88) (background dark))
     :strike-through "#ef8b50" :foreground "#a8a8a8"))
  "My strike-through emphasis for Org.")