In the last months I collected some packages and settings to add eye candy to Org buffers
mostly with the help of Unicode tricks. I like to result and want to share as it may be
useful for others as well. Here are the settings I built with some explanations. Like the
rest of my Emacs config this uses use-package
.
The default fontset setting ensures that all unicode symbols and the like can be displayed. It’s also the basis for some of the eye-candy later. I check first if the Symbola font is present.
(when (member "Symbola" (font-family-list))
(set-fontset-font "fontset-default" nil
(font-spec :size 20 :name "Symbola")))
I also specify Symbola as the font for all unicode characters
(when (member "Symbola" (font-family-list))
(set-fontset-font t 'unicode "Symbola" nil 'prepend))
I use utf8-encoding everywhere and set it explicitly rather than relying on Emacs defaults
(prefer-coding-system 'utf-8)
(set-default-coding-systems 'utf-8)
(set-terminal-coding-system 'utf-8)
(set-keyboard-coding-system 'utf-8)
(setq default-buffer-file-coding-system 'utf-8)
And now on to the Org mode specific settings.
I want indentation
(setq org-startup-indented t
org-src-tab-acts-natively t)
I like visual-pitch-mode
and visual-line-mode
for org files
(add-hook 'org-mode-hook
(lambda ()
(variable-pitch-mode 1)
visual-line-mode))
To start the look of the Org mode buffers let’s first use some general settings:
- don’t display the emphasis markers
- change the face of a headline if it is marked DONE
- hide the stars
- show entities as UTF8 characters.
- odd levels only
I feel this makes for a cleaner look of the buffer.
(setq org-hide-emphasis-markers t
org-fontify-done-headline t
org-hide-leading-stars t
org-pretty-entities t
org-odd-levels-only t)
The next is a setting to automatically change list bullets. I work quite a lot with bulleted list and I think it emphasises the structure better.
(setq org-list-demote-modify-bullet
(quote (("+" . "-")
("-" . "+")
("*" . "-")
("1." . "-")
("1)" . "-")
("A)" . "-")
("B)" . "-")
("a)" . "-")
("b)" . "-")
("A." . "-")
("B." . "-")
("a." . "-")
("b." . "-"))))
Here is the first package to convert stars into nice looking bullets. Since I only use odd-levels I added a specific one for all even levels to show the odd levels as intended.
(use-package org-bullets
:custom
(org-bullets-bullet-list '("◉" "☯" "○" "☯" "✸" "☯" "✿" "☯" "✜" "☯" "◆" "☯" "▶"))
(org-ellipsis "⤵")
:hook (org-mode . org-bullets-mode))
From https://zzamboni.org/post/beautifying-org-mode-in-emacs/ I collected the setting to show bullets instead of a dash in bulleted lists.
(font-lock-add-keywords 'org-mode
'(("^ *\\([-]\\) "
(0 (prog1 () (compose-region (match-beginning 1) (match-end 1) "•"))))))
(font-lock-add-keywords 'org-mode
'(("^ *\\([+]\\) "
(0 (prog1 () (compose-region (match-beginning 1) (match-end 1) "◦"))))))
The next setting prettifies src blocks. Inspired by a comment in i use markdown rather
than org-mode for my notes : emacs I looked at the now builtin mode prettify-symbols-mode
.
The configuration follows the example given in New in Emacs 25.1: Have
prettify-symbols-mode reveal the symbol at point · En…. This approach can also be used
to provides some kind of ligatures.
(setq-default prettify-symbols-alist '(("#+BEGIN_SRC" . "†")
("#+END_SRC" . "†")
("#+begin_src" . "†")
("#+end_src" . "†")
(">=" . "≥")
("=>" . "⇨")))
(setq prettify-symbols-unprettify-at-point 'right-edge)
(add-hook 'org-mode-hook 'prettify-symbols-mode)
Even though I prefer variable-pitch
I want fixed-pitch
for src blocks.
(custom-theme-set-faces
'user
'(variable-pitch ((t (:family "Source Sans Pro" :height 120 :weight light))))
'(fixed-pitch ((t ( :family "Consolas" :slant normal :weight normal :height 0.9 :width normal)))))
(custom-theme-set-faces
'user
'(org-block ((t (:inherit fixed-pitch))))
'(org-document-info-keyword ((t (:inherit (shadow fixed-pitch)))))
'(org-property-value ((t (:inherit fixed-pitch))) t)
'(org-special-keyword ((t (:inherit (font-lock-comment-face fixed-pitch)))))
'(org-tag ((t (:inherit (shadow fixed-pitch) :weight bold))))
'(org-verbatim ((t (:inherit (shadow fixed-pitch))))))
pretty-tags
is a package to replace the tags by unicode symbols. The name needs to be
exactly as in the buffer for this to work.
(use-package org-pretty-tags
:demand t
:config
(setq org-pretty-tags-surrogate-strings
(quote
(("TOPIC" . "☆")
("PROJEKT" . "💡")
("SERVICE" . "✍")
("Blog" . "✍")
("music" . "♬")
("security" . "🔥"))))
(org-pretty-tags-global-mode))
There’s also a package to show fancy priorities instead of the standard ones.
(use-package org-fancy-priorities
:diminish
:demand t
:defines org-fancy-priorities-list
:hook (org-mode . org-fancy-priorities-mode)
:config
(unless (char-displayable-p ?❗)
(setq org-fancy-priorities-list '("HIGH" "MID" "LOW" "OPTIONAL"))))
I like to display an outline numbering as overlays on Org mode headlines. The numbering matches how it would appear when exporting the org file. This file is in the org-mode git repo but not (yet?) part of official orgmode
(use-package org-num
:load-path "lisp/"
:after org
:hook (org-mode . org-num-mode))