;;; 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 '((t)) "An alist containing a mapping of major modes to its value for `prettify-symbols-alist'.") ;;;###autodef (defun set-pretty-symbols! (modes &rest rest) "Associates string patterns with icons in certain major-modes. MODES is a major mode symbol or a list of them. PLIST is a property list whose keys must match keys in `+pretty-code-symbols', and whose values are strings representing the text to be replaced with that symbol. If the car of PLIST is nil, then unset any pretty symbols previously defined for MODES. The following properties are special: :alist ALIST Appends ALIST to `prettify-symbols-alist' literally, without mapping text to `+pretty-code-symbols'. :merge BOOL If non-nil, merge with previously defined `prettify-symbols-alist', otherwise overwrite it. For example, the rule for emacs-lisp-mode is very simple: (set-pretty-symbols! 'emacs-lisp-mode :lambda \"lambda\") This will replace any instances of \"lambda\" in emacs-lisp-mode with the symbol assicated with :lambda in `+pretty-code-symbols'. Pretty symbols can be unset for emacs-lisp-mode with: (set-pretty-symbols! 'emacs-lisp-mode nil)" (declare (indent defun)) (dolist (mode (doom-enlist modes)) (if (null (car-safe rest)) (delq (assq mode +pretty-code-symbols-alist) +pretty-code-symbols-alist) (let (results merge key alist) (while rest (setq key (pop rest)) (pcase key (:merge (setq merge (pop rest))) (: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 (delq (assq mode +pretty-code-symbols-alist) +pretty-code-symbols-alist)) (push (cons mode results) +pretty-code-symbols-alist)))))