5

I've configured prettify-symbols-mode as below. However, only in the scratch buffer is any drawing performed. Further, lambda (λ) is the only multi-character token drawn as a unicode glyph. Is something missing or incorrectly set in the prettify configuration?

;; Globally prettify symbols
(global-prettify-symbols-mode 1)
(setq prettify-symbols-alist '(("lambda" . 955)
                               ("->" . 8594)
                               ("->>" . 21A0)
                               ("=>" . 8658)
                               ("map" . 8614)
                               ("/=" . 2260)
                               ("==" . 2261)
                               ("<=" . 2264)
                               (">=" . 2265)
                               ("=<<" . 226A)
                               (">>=" . 226B)
                               ("<=<" . 21A2)
                               (">=>" . 21A3)
                               ("&&" . 2227)
                               ("||" . 2228)
                               ("not" . 00AC)))

Update

(defun configure-prettify-symbols-alist ()
  "Set prettify symbols alist."
  (setq prettify-symbols-alist '(("lambda" . ?λ)
                                 ("->" . ?→)
                                 ("->>" . ?↠)
                                 ("=>" . ?⇒)
                                 ("map" . ?↦)
                                 ("/=" . ?≠)
                                 ("!=" . ?≠)
                                 ("==" . ?≡)
                                 ("<=" . ?≤)
                                 (">=" . ?≥)
                                 ("=<<" . ?=≪)
                                 (">>=" . ?≫=)
                                 ("<=<" . ?↢)
                                 (">=>" . ?↣)
                                 ("&&" . ?∧)
                                 ("||" . ?∨)
                                 ("not" . ?¬))))
  • 2
    I believe phils gave you the right answer, but note also that 21A2 is wrong (as are all the other codes). You need to tell Emacs that you're writing your codes in hexadecimal. You can write ?\u21A2 or just ?↢ which will also be more readable ;-) – Stefan Dec 11 '18 at 14:20
  • @Stefan thanks for pointing out the error and sharing the helpful tip. I updated the configuration to use glyphs directly, but now I receive the error: Invalid read syntax: "?". Any ideas on this issue? – Ari Dec 11 '18 at 20:35
  • 2
    Your new problem is ?=≪ and ?≫=. ?x is the read syntax for a single character x, and =≪ and ≫= are each two characters. If you remove those, it should work. – phils Dec 11 '18 at 21:09
  • 2
    For those, you could try ("=<<" . (?= (Br . Bl) ?≪)) and (">>=" . (?≫ (Br . Bl) ?=)) respectively. Refer to emacs.stackexchange.com/q/34808/454 – phils Dec 11 '18 at 21:16
  • Thanks, the above suggestion resolved the issue. As a follow-up, do you know of any documentation on "reference-point-alist" aside from this? – Ari Dec 11 '18 at 23:52
5

prettify-symbols-alist is a variable defined in ‘prog-mode.el’.

Automatically becomes buffer-local when set.

So your setq sets it only for a single buffer.

While setq-default could be used to set a default value, what you should do is use the appropriate major mode hooks to setq the value to a sensible value for each of the modes you are interested in.

This is partly because global-prettify-symbols-mode only enables the mode in buffers which have a buffer-local value for prettify-symbols-alist -- setting a default value doesn't trigger it.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.