A peek at Emacs 24.4: prettify-symbols-mode
Emacs 24.4 ships with a new minor mode called
prettify-symbols-mode
. Its purpose is to replace the standard text
representation of various identifiers/symbols with a (arguably) more
aesthetically pleasing representation (often a single unicode
character would replace several ascii characters).
A classic example would be lambda
from various Lisp dialects that many people
prefer to replace with the greek letter λ
(small lambda). prettify-symbols-mode
allows you
to achieve this by relying on a simple mapping expressed in the form of an alist
that
each major mode must initialize (prettify-symbols-alist
).
Simply put - major modes have to provide the configuration for prettify-symbols-mode
.
Lisp modes do this via lisp--prettify-symbols-alist
:
(defconst lisp--prettify-symbols-alist
'(("lambda" . ?λ)))
This means that out of the box only lambda
will get replaced.
You can, of course, add more mappings for different major modes:
(add-hook 'emacs-lisp-mode-hook
(lambda ()
(push '(">=" . ?≥) prettify-symbols-alist)))
Let’s see the mode in action. Consider this bit of Emacs Lisp code:
(lambda (x y)
(if (>= x y)
(something)
(something-else)))
After you do M-x prettify-symbols-mode
you’ll end up with:
(λ (x y)
(if (≥ x y)
(something)
(something-else)))
To enable this for a particular mode use (add-hook 'some-mode-hook 'prettify-symbols-mode)
.
If you’d like to enable it globally just add the following to your config:
(global-prettify-symbols-mode +1)
By the way, sky is the limit for symbol prettification. One fairly extreme example would be
vim’s plugin haskell-conceal+ that goes to great
lengths to bring proper mathematical notation to Haskell code. We can achieve more or less the same effect
with prettify-symbols-mode
, but one have to ask themselves where should we draw the border between
tasteful and distasteful prettifications.