O emacs, por enquanto, não suporta ligaduras (no OSX há suporte, mas não em outras plataformas). No entanto, o emacs 24.4+ suporta, prettify-symbols-mode
que de certa forma é melhor do que o suporte normal de ligaduras.
Esse modo permite substituir para exibir qualquer regex com qualquer glifo. Pessoalmente, estou usando esse trecho para obter as ligaduras do código Fira para trabalhar no emacs no linux. (EDIT: infelizmente o link agora está inoperante, a política do stackoverflow para sempre copiar inline é obviamente a boa ...)
O link que eu coloquei originalmente está morto e não tenho certeza exatamente o que ele continha, mas acho que esses links devem ser bons:
https://github.com/tonsky/FiraCode/wiki/Emacs-instructions#using-prettify-symbols e https://github.com/tonsky/FiraCode/issues/312#issuecomment-262878734
Dado o problema do link morto, estou colocando o código em linha desta vez:
(defun fira-code-mode--make-alist (list)
"Generate prettify-symbols alist from LIST."
(let ((idx -1))
(mapcar
(lambda (s)
(setq idx (1+ idx))
(let* ((code (+ #Xe100 idx))
(width (string-width s))
(prefix ())
(suffix '(?\s (Br . Br)))
(n 1))
(while (< n width)
(setq prefix (append prefix '(?\s (Br . Bl))))
(setq n (1+ n)))
(cons s (append prefix suffix (list (decode-char 'ucs code))))))
list)))
(defconst fira-code-mode--ligatures
'("www" "**" "***" "**/" "*>" "*/" "\\\\" "\\\\\\"
"{-" "[]" "::" ":::" ":=" "!!" "!=" "!==" "-}"
"--" "---" "-->" "->" "->>" "-<" "-<<" "-~"
"#{" "#[" "##" "###" "####" "#(" "#?" "#_" "#_("
".-" ".=" ".." "..<" "..." "?=" "??" ";;" "/*"
"/**" "/=" "/==" "/>" "//" "///" "&&" "||" "||="
"|=" "|>" "^=" "$>" "++" "+++" "+>" "=:=" "=="
"===" "==>" "=>" "=>>" "<=" "=<<" "=/=" ">-" ">="
">=>" ">>" ">>-" ">>=" ">>>" "<*" "<*>" "<|" "<|>"
"<$" "<$>" "<!--" "<-" "<--" "<->" "<+" "<+>" "<="
"<==" "<=>" "<=<" "<>" "<<" "<<-" "<<=" "<<<" "<~"
"<~~" "</" "</>" "~@" "~-" "~=" "~>" "~~" "~~>" "%%"
"x" ":" "+" "+" "*"))
(defvar fira-code-mode--old-prettify-alist)
(defun fira-code-mode--enable ()
"Enable Fira Code ligatures in current buffer."
(setq-local fira-code-mode--old-prettify-alist prettify-symbols-alist)
(setq-local prettify-symbols-alist (append (fira-code-mode--make-alist fira-code-mode--ligatures) fira-code-mode--old-prettify-alist))
(prettify-symbols-mode t))
(defun fira-code-mode--disable ()
"Disable Fira Code ligatures in current buffer."
(setq-local prettify-symbols-alist fira-code-mode--old-prettify-alist)
(prettify-symbols-mode -1))
(define-minor-mode fira-code-mode
"Fira Code ligatures minor mode"
:lighter " Fira Code"
(setq-local prettify-symbols-unprettify-at-point 'right-edge)
(if fira-code-mode
(fira-code-mode--enable)
(fira-code-mode--disable)))
(defun fira-code-mode--setup ()
"Setup Fira Code Symbols"
(set-fontset-font t '(#Xe100 . #Xe16f) "Fira Code Symbol"))
(provide 'fira-code-mode)
Eu disse que, de certa forma, isso é melhor do que as ligaduras normais. Isso é porque é "a la carte". Você pode misturar e combinar, pegue apenas os símbolos que desejar. Você pode dizer, eu quero o ";;" ligadura, EXCETO se o próximo caractere for novamente ";" nesse caso, eu não quero ... E sobre misturar e combinar ... Estou usando a fonte 'Fira Mono', junto com as ligaduras 'Fira Code'. Você não precisa comprar a fonte inteira.
É pior do que as ligaduras puras, porque não funciona imediatamente e exige que a fonte seja ajustada de uma certa maneira para torná-la possível.