7

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" . ?¬))))
Ari
  • 339
  • 2
  • 6
  • 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
  • 3
    For those, you could try `("=<<" . (?= (Br . Bl) ?≪))` and `(">>=" . (?≫ (Br . Bl) ?=))` respectively. Refer to https://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](http://doc.endlessparentheses.com/Var/reference-point-alist)? – Ari Dec 11 '18 at 23:52
  • Your link seems to be a less-well-formatted version of `C-h v reference-point-alist` – phils Dec 12 '18 at 04:43
  • That aside, no, I can't see any other documentation. I think what's there is reasonable though? The drawings make things pretty clear. Basically the two values determine which part of one character aligns with which part of the next. What is it that you're trying to figure out? – phils Dec 12 '18 at 04:48
  • I agree the documentation is reasonable enough. However, I am interested in better understanding these ligature workarounds and their respective costs/benefits: [prettify symbols](https://github.com/tonsky/FiraCode/wiki/Emacs-instructions#using-prettify-symbols) & [composition char table](https://github.com/tonsky/FiraCode/wiki/Emacs-instructions#using-composition-char-table). – Ari Dec 13 '18 at 22:02

1 Answers1

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.

phils
  • 48,657
  • 3
  • 76
  • 115