aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAaron LI <aaronly.me@outlook.com>2016-10-06 13:57:09 +0800
committerAaron LI <aaronly.me@outlook.com>2016-10-06 13:57:09 +0800
commitbf903db626e9a196126b5ea27c56e4d8b410d84b (patch)
tree5a98a11a42afcc61dfc5619cda205112504f47ca
parent3ae5600713b46982f798931a97d95d7f90b9b7ac (diff)
downloaddotfiles-bf903db626e9a196126b5ea27c56e4d8b410d84b.tar.bz2
spacemacs: add `firacode' config, a monospace font with ligatures
-rw-r--r--_spacemacs.d/config/aly-firacode-config.el163
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