;;; 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) ("\\(