org-mode Face Lift

December 25th, 2014  |  Published in etc  |  2 Comments

Menubar and usr local bin emacs q Dropbox org omnifocus org usr local bin emacs zsh 159×34 and Init File GNU Emacs Manual and Preview of org mode Face Lift

I realized a couple of days ago that part of the reason OmniFocus and Things feel better compared to org-mode is that they’ve got a much more pleasant visual design: There’s way more room, screen elements are better differentiated, and they present with a variable-width font. So I did some poking around in Cocoa Emacs to see if I could clean up org-mode a little. There’s no particular master plan here, just some things that made org-mode look nicer.

If you’re looking for the quickest wins, the first three (picking a better theme, hiding leading stars, and using org-bullets) make a big difference right away and work in both Cocoa and console Emacs. They don’t involve any fiddling with faces. The fourth (opening up the line height) works on Cocoa Emacs and definitely helps a busy file feel a little more scannable; and it’s also fiddle-free.

A Nicer Theme

The flat-ui theme gives Emacs a more muted palette that’s similar to the one OmniFocus uses. Stick it in your .emacs.d/themes and invoke it with:

(load-file "~/.emacs.d/themes/flatui-theme.el")
(load-theme 'flatui t)

Hide Leading Stars to Declutter

You can turn off the display of all the asterisks in a heading but the last one:

(setq org-hide-leading-stars t)

Use org-bullets

org-bullets gives you the ability to change the way the asterisks used in org-mode present on the screen. The defaults aren’t great. I ended up using normal bullets for level 1 and 2 headings (which are equivalent to folders and projects in my own org hierarchy) and open circles for lower levels (which are usually todos for me).

Downplay “DONE” and Similar States

I set the face for org-done to bright black and the weight to thin to help push completed items to the background. I often squirrel notes away under information gathering todos, so I don’t like to completely archive a todo until the project is complete. By muting the display of done items, they’re still there and searchable, but they don’t compete with active TODO items when I’m scanning my list.

Open Up Line Height

It helps to open things up between lines a little:

(setq line-spacing '0.25)

Differentiate With Size and Weight

You don’t need to go bananas. I gave the highest heading levels a small bump in size (:height 1.2 for level 1 headings, :height 1.1 for level 2) and helped them stand out by setting their weight to semi-bold. I sized metadata faces down to :height 0.8 (org-tag, org-date, org-special-keyword) and also made the tags face less dark, which reduces the sense of clutter and makes tags more scannable.

In the process of changing these faces, I learned a new trick I can’t believe I’d missed in the past: Place the cursor over a given element in an org file and use the command customize-face, and Emacs will present the face of the current text you’re on as the default argument. That makes it easy to visually identify what you want to change and quickly jump to its customization page.

Use Variable Width for Headings

… and maybe the body.

I explicitly set the typeface for headings to Helvetica Neue, and I’ve been using this hook for org-mode:

(add-hook 'org-mode-hook (lambda () (variable-pitch-mode t)))

It sets the body type for any org-mode buffer to variable width. The drawback of variable width type is that it breaks some indentation (since Emacs still thinks in terms of fixed-width characters). The advantage is that it’s a little more pleasant to read. I haven’t made up my mind about it yet.

If you do end up using a variable-width font for everything, don’t forget to explicitly set the face for org-table to a fixed-width choice.

All that gets you to here:

Menubar and omnifocus org and usr local bin emacsclient t Dropbox org omnifocus org emacs zsh 159×34 and Emacs Set Line Spacing and org mode Face Lift

Review It in a Terminal Window

Because it ought to be able to work there, too.

Menubar and usr local bin emacsclient t Dropbox org omnifocus org emacs zsh 159×34 and Preview of org mode Face Lift and org mode Face Lift

In a Gist

If you’d like these to play with, I put them in a gist for easy cut-n-paste inside a custom-set-faces block in your own init.el:


  1. NoonianAtall says:

    April 4th, 2015 at 4:58 pm (#)

    Nice tips, thanks. I’d already done a lot of that to mine, but I like the way you deemphasized the tags and done items. I also like the way Helvetica Neue looks, but I’m not on a Mac, so I don’t have that. I found some similar alternatives, but they aren’t quite the same… And it’s still hard to tear me away from solarized-dark… :)

  2. lmichelbacher says:

    February 17th, 2016 at 8:49 am (#)

    Nice suggestions!

    For org-bullet, I played around with BULLET, BLACK CIRCLE, WHITE CIRCLE, etc. but found the sizing to be a pain (the defaults were way too big).

    Which characters and customizations (weight, size, etc.) did you use for org-bullets?

Leave a Response

© Michael Hall, licensed under a Creative Commons Attribution-ShareAlike 3.0 United States license.