diff --git a/modules/ui/pretty-code/+fira.el b/modules/ui/pretty-code/+fira.el index 276f8bffd..24b2982af 100644 --- a/modules/ui/pretty-code/+fira.el +++ b/modules/ui/pretty-code/+fira.el @@ -112,18 +112,6 @@ ("~~>" . #Xe169) ("%%" . #Xe16a))) -(defun +pretty-code--correct-symbol-bounds (ligature-alist) - "Prepend non-breaking spaces to a ligature. - -This way `compose-region' (called by `prettify-symbols-mode') will use the -correct width of the symbols instead of the width measured by `char-width'." - (let ((len (length (car ligature-alist))) - (acc (list (cdr ligature-alist)))) - (while (> len 1) - (setq acc (cons #X00a0 (cons '(Br . Bl) acc)) - len (1- len))) - (cons (car ligature-alist) acc))) - (defun +pretty-code|setup-fira-ligatures () (set-fontset-font t '(#Xe100 . #Xe16f) +pretty-code-fira-code-font-name) (setq-default prettify-symbols-alist diff --git a/modules/ui/pretty-code/+pragmata-pro.el b/modules/ui/pretty-code/+pragmata-pro.el new file mode 100644 index 000000000..eafa4cedd --- /dev/null +++ b/modules/ui/pretty-code/+pragmata-pro.el @@ -0,0 +1,207 @@ +;;; ui/pretty-code/+pragmata-pro.el -*- lexical-binding: t; -*- + +(defvar +pretty-code-pragmata-pro-font-name "PragmataPro" + "Name of the Pragmata Pro ligature font.") + +(defvar +pretty-code-pragmata-pro-font-ligatures + '(("!!" . #XE900) + ("!=" . #XE901) + ("!==" . #XE902) + ("!!!" . #XE903) + ("!≡" . #XE904) + ("!≡≡" . #XE905) + ("!>" . #XE906) + ("!=<" . #XE907) + ("#(" . #XE920) + ("#_" . #XE921) + ("#{" . #XE922) + ("#?" . #XE923) + ("#>" . #XE924) + ("##" . #XE925) + ("#_(" . #XE926) + ("%=" . #XE930) + ("%>" . #XE931) + ("%>%" . #XE932) + ("%<%" . #XE933) + ("&%" . #XE940) + ("&&" . #XE941) + ("&*" . #XE942) + ("&+" . #XE943) + ("&-" . #XE944) + ("&/" . #XE945) + ("&=" . #XE946) + ("&&&" . #XE947) + ("&>" . #XE948) + ("$>" . #XE955) + ("***" . #XE960) + ("*=" . #XE961) + ("*/" . #XE962) + ("*>" . #XE963) + ("++" . #XE970) + ("+++" . #XE971) + ("+=" . #XE972) + ("+>" . #XE973) + ("++=" . #XE974) + ("--" . #XE980) + ("-<" . #XE981) + ("-<<" . #XE982) + ("-=" . #XE983) + ("->" . #XE984) + ("->>" . #XE985) + ("---" . #XE986) + ("-->" . #XE987) + ("-+-" . #XE988) + ("-\\/" . #XE989) + ("-|>" . #XE98A) + ("-<|" . #XE98B) + (".." . #XE990) + ("..." . #XE991) + ("..<" . #XE992) + (".>" . #XE993) + (".~" . #XE994) + (".=" . #XE995) + ("/*" . #XE9A0) + ("//" . #XE9A1) + ("/>" . #XE9A2) + ("/=" . #XE9A3) + ("/==" . #XE9A4) + ("///" . #XE9A5) + ("/**" . #XE9A6) + (":::" . #XE9AF) + ("::" . #XE9B0) + (":=" . #XE9B1) + (":≡" . #XE9B2) + (":>" . #XE9B3) + (":=>" . #XE9B4) + (":(" . #XE9B5) + (":-(" . #XE9B6) + (":)" . #XE9B7) + (":-)" . #XE9B8) + (":/" . #XE9B9) + (":\\" . #XE9BA) + (":3" . #XE9BB) + (":D" . #XE9BC) + (":P" . #XE9BD) + (":>:" . #XE9BE) + (":<:" . #XE9BF) + ("<$>" . #XE9C0) + ("<*" . #XE9C1) + ("<*>" . #XE9C2) + ("<+>" . #XE9C3) + ("<-" . #XE9C4) + ("<<" . #XE9C5) + ("<<<" . #XE9C6) + ("<<=" . #XE9C7) + ("<=" . #XE9C8) + ("<=>" . #XE9C9) + ("<>" . #XE9CA) + ("<|>" . #XE9CB) + ("<<-" . #XE9CC) + ("<|" . #XE9CD) + ("<=<" . #XE9CE) + ("<~" . #XE9CF) + ("<~~" . #XE9D0) + ("<<~" . #XE9D1) + ("<$" . #XE9D2) + ("<+" . #XE9D3) + ("" . #XE9D4) + ("<@>" . #XE9D5) + ("<#>" . #XE9D6) + ("<%>" . #XE9D7) + ("<^>" . #XE9D8) + ("<&>" . #XE9D9) + ("" . #XE9DA) + ("<.>" . #XE9DB) + ("" . #XE9DC) + ("<\\>" . #XE9DD) + ("<\">" . #XE9DE) + ("<:>" . #XE9DF) + ("<~>" . #XE9E0) + ("<**>" . #XE9E1) + ("<<^" . #XE9E2) + ("" . #XE9EF) + ("" . #XEA66) + ("|=>" . #XEA67) + ("|==>" . #XEA68) + ("|>-" . #XEA69) + ("|<<" . #XEA6A) + ("||>" . #XEA6B) + ("|>>" . #XEA6C) + ("~=" . #XEA70) + ("~>" . #XEA71) + ("~~>" . #XEA72) + ("~>>" . #XEA73) + ("[[" . #XEA80) + ("]]" . #XEA81) + ("\">" . #XEA90)) + "Defines the character mappings for ligatures for Pragmata Pro.") + +(defun +pretty-code|setup-pragmata-pro-ligatures () + (setq-default prettify-symbols-alist + (append prettify-symbols-alist + (mapcar #'+pretty-code--correct-symbol-bounds + +pretty-code-pragmata-pro-font-ligatures)))) + +(add-hook 'doom-init-ui-hook #'+pretty-code|setup-pragmata-pro-ligatures) diff --git a/modules/ui/pretty-code/autoload.el b/modules/ui/pretty-code/autoload.el index 38793fb7a..bd7a0a3e0 100644 --- a/modules/ui/pretty-code/autoload.el +++ b/modules/ui/pretty-code/autoload.el @@ -44,6 +44,19 @@ font.") "An alist containing a mapping of major modes to its value for `prettify-symbols-alist'.") +;;;###autodef +(defun +pretty-code--correct-symbol-bounds (ligature-alist) + "Prepend non-breaking spaces to a ligature. + +This way `compose-region' (called by `prettify-symbols-mode') will use the +correct width of the symbols instead of the width measured by `char-width'." + (let ((len (length (car ligature-alist))) + (acc (list (cdr ligature-alist)))) + (while (> len 1) + (setq acc (cons #X00a0 (cons '(Br . Bl) acc)) + len (1- len))) + (cons (car ligature-alist) acc))) + ;;;###autodef (defun set-pretty-symbols! (modes &rest rest) "Associates string patterns with icons in certain major-modes. diff --git a/modules/ui/pretty-code/config.el b/modules/ui/pretty-code/config.el index 6b474e6a6..73428d474 100644 --- a/modules/ui/pretty-code/config.el +++ b/modules/ui/pretty-code/config.el @@ -3,7 +3,9 @@ (cond ((featurep! +fira) (load! "+fira")) ((featurep! +iosevka) - (load! "+iosevka"))) + (load! "+iosevka")) + ((featurep! +pragmata-pro) + (load! "+pragmata-pro"))) (defvar +pretty-code-enabled-modes t "List of major modes in which `prettify-symbols-mode' should be enabled.