Emacs tweaks: Export Org checkboxes using UTF-8 symbols

UPDATE 2014-03-28: Newer versions of org have the org-html-checkbox-type variable, which you can set to unicode. Use M-x customize-variable org-html-checkbox-type to see if you have it.

This snippet turns - [X] into ☑ and - [ ] into ☐.

(defun sacha/org-html-checkbox (checkbox)
  "Format CHECKBOX into HTML."
  (case checkbox (on "<span class=\"check\">&#x2611;</span>") ; checkbox (checked)
        (off "<span class=\"checkbox\">&#x2610;</span>")
        (trans "<code>[-]</code>")
        (t "")))
(defadvice org-html-checkbox (around sacha activate)
  (setq ad-return-value (sacha/org-html-checkbox (ad-get-arg 0))))

To find this code, I searched ox-html.el for [. Eventually I found org-html-checkbox, which is directly called by org-html-format-list-item instead of being a function variable that you can change. So that meant I needed to override the behaviour of org-html-checkbox through defadvice. You can see above how I wrap advice around org-html-checkbox and replace the return value with my own function. For more about advice, read the Emacs Lisp Intro manual.

To find the hex codes for the UTF-8 characters, I searched Google for UTF-8 checkbox and found BALLOT BOX WITH CHECK. I used the hex code so that I didn’t have to worry about encoding issues. I tested it by updating one of my weekly reviews. Tada!

Inspired by Grant from Wisdom and Wonder.

  • Grant Rettke

    That works perfectly. Thank you for that!

  • Leu

    Hi, thank you for your post,it is really attractive, but why my org-mode does not possess that variable? Of course, the function does not work, too.

    • http://sachachua.com sachac

      If you’re using the Org built into Emacs 24, that’s still version 7, which could explain why that doesn’t work. You can install Org from MELPA in order to upgrade to a newer version. You will need to start with emacs -q, then follow the instructions from MELPA’s getting started guide (http://melpa.milkbox.net/#/getting-started) to load package and add MELPA to your sources list. Then you can use M-x package-install to install org. Hope that helps!

      • Leu

        Many thanks. I will try as you said, and I think it will work absolutely!

  • robertsms

    I use the latest version of Org 8.2.6, but still cannot find org-html-checkbox-type variable. Could you give me some advise?

    • http://sachachua.com Sacha Chua

      It’s defined in ox-html.el, which might not be loaded until you export something in HTML form or add (require 'ox-html) to your config. Note that if you’ve got Org 8.2.6 loaded from packages (since it’s not built into Emacs yet), you’ll need to add (require 'package) (package-initialize) beforehand or use something like (eval-after-load ...), since packages aren’t usually loaded until after ~/.emacs.d/init.el has been processed.