emacs unterstützt derzeit keine Ligaturen (unter OSX gibt es eine gewisse Unterstützung, aber nicht auf anderen Plattformen). Allerdings unterstützt Emacs 24.4+, prettify-symbols-mode
was in gewisser Hinsicht besser ist als die Unterstützung normaler Ligaturen.
In diesem Modus können Sie beliebige reguläre Ausdrücke mit beliebigen Glyphen ersetzen. Ich persönlich verwende dieses Snippet , um Fira-Code-Ligaturen in Emacs unter Linux zum Laufen zu bringen. (EDIT: leider ist der link jetzt tot, die politik von stackoverflow immer inline zu kopieren ist offensichtlich die gute ...)
Der Link, den ich ursprünglich gesetzt habe, ist tot und ich bin nicht sicher, was er genau enthielt, aber ich denke, diese Links sollten gut sein:
https://github.com/tonsky/FiraCode/wiki/Emacs-instructions#using-prettify-symbols and https://github.com/tonsky/FiraCode/issues/312#issuecomment-262878734
In Anbetracht des Problems mit toten Links setze ich den Code diesmal in die Zeile:
(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)
Ich sagte, dass dies in gewisser Hinsicht besser ist als normale Ligaturen. Das liegt daran, dass es "a la carte" ist. Sie können mischen und anpassen, nur die Symbole, die Sie mögen. Man kann sagen, ich möchte das ";;" Ligatur, AUSSER wenn das nächste Zeichen wieder ";" ist In diesem Fall möchte ich es nicht ... Und was das Mischen und Zuordnen betrifft ... Ich verwende die Schriftart 'Fira Mono' zusammen mit den Ligaturen 'Fira Code'. Sie müssen nicht die gesamte Schrift einkaufen.
Es ist schlimmer als reine Ligaturen, weil es nicht sofort funktioniert und die Schriftart auf eine bestimmte Weise optimiert werden muss, um dies zu ermöglichen.