diff options
-rw-r--r-- | _spacemacs.d/config/aly-firacode-config.el | 163 |
1 files changed, 163 insertions, 0 deletions
diff --git a/_spacemacs.d/config/aly-firacode-config.el b/_spacemacs.d/config/aly-firacode-config.el new file mode 100644 index 0000000..fa810b8 --- /dev/null +++ b/_spacemacs.d/config/aly-firacode-config.el @@ -0,0 +1,163 @@ +;;; aly-firacode-config.el --- FiraCode font configurations +;; -*- mode: emacs-lisp -*- +;; vim: set ts=8 sw=2 tw=0 fenc=utf-8 ft=lisp: +;; +;; Aaron LI +;; Created: 2016-10-06 +;; Updated: 2016-10-06 +;; + +;;; Commentary: +;; FiraCode: Monospaced font with programming liggatures +;; https://github.com/tonsky/FiraCode +;; +;; Credit: +;; https://github.com/tonsky/FiraCode/wiki/Setting-up-Emacs +;; +;; NOTE: +;; Besides the "Fira Code" fonts, the "Fira Code Symbol" font should also +;; be installed: +;; https://github.com/tonsky/FiraCode/files/412440/FiraCode-Regular-Symbol.zip +;; + +;;; 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 + +(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) + ("\\(;;\\)" #Xe129) + ("\\(/\\*\\)" #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) + ;; This ended up being hard to do properly, so leaving it out... + ;; ("\\(x\\)" #Xe16b) + ("[^:=]\\(:\\)[^:=]" #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) + + +(provide 'aly-firacode-config) + +;;; aly-firacode-config.el ends here |