Support for multiple ligature'd fonts

Refactors the ligature configuration to support more than just Iosevka
(uses Fira Code as the second font).
This commit is contained in:
Josh Seba 2018-07-05 19:37:06 -07:00
parent 15f66f4b52
commit a7cba67fd6
6 changed files with 467 additions and 358 deletions

View file

@ -0,0 +1,27 @@
;;; ui/pretty-code/autoload.el -*- lexical-binding: t; -*-
;;;###autoload
(defvar +pretty-code-enabled-modes t
"List of major modes in which `prettify-symbols-mode' should be enabled.
If t, enable it everywhere. If the first element is 'not, enable it in any mode
besides what is listed.")
;;;###autoload
(defun +pretty-code|init-pretty-symbols ()
"Enabled `prettify-symbols-mode'.
If the current major mode is disabled in `+pretty-code-enabled-modes', this
function does nothing. Otherwise, it sets the value of
`prettify-code-symbols-alist' according to `+pretty-code-symbols-alist' for the
current major mode."
(when (or (eq +pretty-code-enabled-modes 't)
(if (eq (car +pretty-code-enabled-modes 'not))
(not (memq major-mode (cdr +pretty-code-enabled-modes)))
(memq major-mode +pretty-code-enabled-modes)))
(setq prettify-symbols-alist
(append (alist-get major-mode +pretty-code-symbols-alist)
(default-value 'prettify-symbols-alist)))
(when prettify-symbols-mode
(prettify-symbols-mode -1))
(prettify-symbols-mode +1)))

View file

@ -0,0 +1,67 @@
;;; ui/pretty-code/settings.el -*- lexical-binding: t; -*-
;;;###autoload
(defvar +pretty-code-symbols
'(;; org
:name "»"
:src_block "»"
:src_block_end " "
;; Functional
:lambda "λ"
:def "ƒ"
:composition ""
:map ""
;; Types
:null ""
:true "𝕋"
:false "𝔽"
:int ""
:float ""
:str "𝕊"
:bool "𝔹"
;; Flow
:not ""
:in ""
:not-in ""
:and ""
:or ""
:for ""
:some ""
:return ""
:yield ""
;; Other
:tuple ""
:pipe "" ;; FIXME: find a non-private char
:dot "")
"Options plist for `set-pretty-symbols!'.
This should not contain any symbols from the Unicode Private Area! There is no
universal way of getting the correct symbol as that area varies from font to
font.")
;;;###autoload
(defvar +pretty-code-symbols-alist nil
"An alist containing a mapping of major modes to its value for
`prettify-symbols-alist'.")
;;;###autoload
(defun set-pretty-symbols! (modes &rest rest)
(dolist (mode (doom-enlist modes))
(if (null (car-safe rest))
(setq var nil)
(let (results merge key alist)
(while rest
(setq key (pop rest))
(pcase key
(:merge (setq merge t))
(:alist (setq results (append (pop rest) results)))
(_
(unless (plist-member +pretty-code-symbols key)
(user-error "Invalid keyword in set-pretty-symbols!: %s" key))
(let* ((sym (pop rest))
(char (plist-get +pretty-code-symbols key)))
(push (cons sym char) results)))))
(unless merge
(assq-delete-all mode +pretty-code-symbols-alist))
(push (cons mode results) +pretty-code-symbols-alist)))))