Created
December 13, 2018 14:07
-
-
Save Althorion/9848043ce1b0dd9fe04a4b923aa46298 to your computer and use it in GitHub Desktop.
Emacs ligatures
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
;; The next line may not be needed | |
(set-default-font "Source Code Pro for Powerline 13") | |
;; Fira code | |
;; This works when using emacs --daemon + emacsclient | |
(add-hook 'after-make-frame-functions (lambda (frame) (set-fontset-font t '(#Xe100 . #Xe16f) "Fira Code Symbol"))) | |
;; This works when using emacs without server/client | |
(set-fontset-font t '(#Xe100 . #Xe16f) "Fira Code Symbol") | |
;; I haven't found one statement that makes both of the above situations work, so I use both for now | |
(defconst fira-code-font-lock-keywords-alist | |
(mapcar (lambda (regex-char-pair) | |
`(,(car regex-char-pair) | |
(0 (prog1 () | |
(compose-region (match-beginning 1) | |
(match-end 1) | |
;; The first argument to concat is a string containing a literal tab | |
,(concat " " (list (decode-char 'ucs (cadr regex-char-pair))))))))) | |
'(("\\(www\\)" #Xe100) | |
("[^/]\\(\\*\\*\\)[^/]" #Xe101) | |
("\\(\\*\\*\\*\\)" #Xe102) | |
("\\(\\*\\*/\\)" #Xe103) | |
("\\(\\*>\\)" #Xe104) | |
("[^*]\\(\\*/\\)" #Xe105) | |
("\\(\\\\\\\\\\)" #Xe106) | |
("\\(\\\\\\\\\\\\\\)" #Xe107) | |
("\\({-\\)" #Xe108) | |
("\\(\\[\\]\\)" #Xe109) | |
("\\(::\\)" #Xe10a) | |
("\\(:::\\)" #Xe10b) | |
("[^=]\\(:=\\)" #Xe10c) | |
("\\(!!\\)" #Xe10d) | |
("\\(!=\\)" #Xe10e) | |
("\\(!==\\)" #Xe10f) | |
("\\(-}\\)" #Xe110) | |
("\\(--\\)" #Xe111) | |
("\\(---\\)" #Xe112) | |
("\\(-->\\)" #Xe113) | |
("[^-]\\(->\\)" #Xe114) | |
("\\(->>\\)" #Xe115) | |
("\\(-<\\)" #Xe116) | |
("\\(-<<\\)" #Xe117) | |
("\\(-~\\)" #Xe118) | |
("\\(#{\\)" #Xe119) | |
("\\(#\\[\\)" #Xe11a) | |
("\\(##\\)" #Xe11b) | |
("\\(###\\)" #Xe11c) | |
("\\(####\\)" #Xe11d) | |
("\\(#(\\)" #Xe11e) | |
("\\(#\\?\\)" #Xe11f) | |
("\\(#_\\)" #Xe120) | |
("\\(#_(\\)" #Xe121) | |
("\\(\\.-\\)" #Xe122) | |
("\\(\\.=\\)" #Xe123) | |
("\\(\\.\\.\\)" #Xe124) | |
("\\(\\.\\.<\\)" #Xe125) | |
("\\(\\.\\.\\.\\)" #Xe126) | |
("\\(\\?=\\)" #Xe127) | |
("\\(\\?\\?\\)" #Xe128) | |
;; ("\\(;;\\)" #Xe892) | |
("\\(;;\\)" #Xe892) | |
("\\(/\\*\\)" #Xe12a) | |
("\\(/\\*\\*\\)" #Xe12b) | |
("\\(/=\\)" #Xe12c) | |
("\\(/==\\)" #Xe12d) | |
("\\(/>\\)" #Xe12e) | |
("\\(//\\)" #Xe12f) | |
("\\(///\\)" #Xe130) | |
("\\(&&\\)" #Xe131) | |
("\\(||\\)" #Xe132) | |
("\\(||=\\)" #Xe133) | |
("[^|]\\(|=\\)" #Xe134) | |
("\\(|>\\)" #Xe135) | |
("\\(\\^=\\)" #Xe136) | |
("\\(\\$>\\)" #Xe137) | |
("\\(\\+\\+\\)" #Xe138) | |
("\\(\\+\\+\\+\\)" #Xe139) | |
("\\(\\+>\\)" #Xe13a) | |
("\\(=:=\\)" #Xe13b) | |
("[^!/]\\(==\\)[^>]" #Xe13c) | |
("\\(===\\)" #Xe13d) | |
("\\(==>\\)" #Xe13e) | |
("[^=]\\(=>\\)" #Xe13f) | |
("\\(=>>\\)" #Xe140) | |
("\\(<=\\)" #Xe141) | |
("\\(=<<\\)" #Xe142) | |
("\\(=/=\\)" #Xe143) | |
("\\(>-\\)" #Xe144) | |
("\\(>=\\)" #Xe145) | |
("\\(>=>\\)" #Xe146) | |
("[^-=]\\(>>\\)" #Xe147) | |
("\\(>>-\\)" #Xe148) | |
("\\(>>=\\)" #Xe149) | |
("\\(>>>\\)" #Xe14a) | |
("\\(<\\*\\)" #Xe14b) | |
("\\(<\\*>\\)" #Xe14c) | |
("\\(<|\\)" #Xe14d) | |
("\\(<|>\\)" #Xe14e) | |
("\\(<\\$\\)" #Xe14f) | |
("\\(<\\$>\\)" #Xe150) | |
("\\(<!--\\)" #Xe151) | |
("\\(<-\\)" #Xe152) | |
("\\(<--\\)" #Xe153) | |
("\\(<->\\)" #Xe154) | |
("\\(<\\+\\)" #Xe155) | |
("\\(<\\+>\\)" #Xe156) | |
("\\(<=\\)" #Xe157) | |
("\\(<==\\)" #Xe158) | |
("\\(<=>\\)" #Xe159) | |
("\\(<=<\\)" #Xe15a) | |
("\\(<>\\)" #Xe15b) | |
("[^-=]\\(<<\\)" #Xe15c) | |
("\\(<<-\\)" #Xe15d) | |
("\\(<<=\\)" #Xe15e) | |
("\\(<<<\\)" #Xe15f) | |
("\\(<~\\)" #Xe160) | |
("\\(<~~\\)" #Xe161) | |
("\\(</\\)" #Xe162) | |
("\\(</>\\)" #Xe163) | |
("\\(~@\\)" #Xe164) | |
("\\(~-\\)" #Xe165) | |
("\\(~=\\)" #Xe166) | |
("\\(~>\\)" #Xe167) | |
("[^<]\\(~~\\)" #Xe168) | |
("\\(~~>\\)" #Xe169) | |
("\\(%%\\)" #Xe16a) | |
;; ("\\(x\\)" #Xe16b) This ended up being hard to do properly so i'm leaving it out. | |
("[^:=]\\(:\\)[^:=]" #Xe16c) | |
("[^\\+<>]\\(\\+\\)[^\\+<>]" #Xe16d) | |
("[^\\*/<>]\\(\\*\\)[^\\*/<>]" #Xe16f)))) | |
(defun add-fira-code-symbol-keywords () | |
(font-lock-add-keywords nil fira-code-font-lock-keywords-alist)) | |
(add-hook 'prog-mode-hook | |
#'add-fira-code-symbol-keywords) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment