Move :ui pretty-code to :ui ligatures
Includes a major refactor of the module.
This commit is contained in:
parent
ed264dcdb2
commit
7081d833f6
32 changed files with 899 additions and 920 deletions
|
@ -47,7 +47,8 @@ run before `doom-init-modules-hook'. Relevant to `doom-module-init-file'.")
|
||||||
(:ui (doom-modeline (:ui modeline))
|
(:ui (doom-modeline (:ui modeline))
|
||||||
(fci (:ui fill-column))
|
(fci (:ui fill-column))
|
||||||
(evil-goggles (:ui ophints))
|
(evil-goggles (:ui ophints))
|
||||||
(tabbar (:ui tabs)))
|
(tabbar (:ui tabs))
|
||||||
|
(pretty-code (:ui ligatures)))
|
||||||
(:app (email (:email mu4e))
|
(:app (email (:email mu4e))
|
||||||
(notmuch (:email notmuch)))
|
(notmuch (:email notmuch)))
|
||||||
(:lang (perl (:lang raku))))
|
(:lang (perl (:lang raku))))
|
||||||
|
|
|
@ -492,7 +492,7 @@ What can you do about it?
|
||||||
but can be a bit of a hassle to set up. There are packages available for
|
but can be a bit of a hassle to set up. There are packages available for
|
||||||
[[https://aur.archlinux.org/packages/emacs-native-comp-git/][Arch Linux]], [[https://github.com/flatwhatson/guix-channel][Guix]] and [[https://github.com/nix-community/emacs-overlay][Nix users]]. [[https://www.emacswiki.org/emacs/GccEmacs][More information available on EmacsWiki]].
|
[[https://aur.archlinux.org/packages/emacs-native-comp-git/][Arch Linux]], [[https://github.com/flatwhatson/guix-channel][Guix]] and [[https://github.com/nix-community/emacs-overlay][Nix users]]. [[https://www.emacswiki.org/emacs/GccEmacs][More information available on EmacsWiki]].
|
||||||
3. Disable some of Doom's slowest modules. The biggest offenders tend to be:
|
3. Disable some of Doom's slowest modules. The biggest offenders tend to be:
|
||||||
=:ui tabs=, =:ui indent-guides=, =:ui pretty-code=, =:ui word-wrap= and =:ui
|
=:ui tabs=, =:ui indent-guides=, =:ui ligatures, =:ui word-wrap= and =:ui
|
||||||
vc-gutter=.
|
vc-gutter=.
|
||||||
4. Turn off line numbers ~(setq display-line-numbers-type nil)~. It's known to
|
4. Turn off line numbers ~(setq display-line-numbers-type nil)~. It's known to
|
||||||
slow down scrolling, in particular.
|
slow down scrolling, in particular.
|
||||||
|
@ -1213,7 +1213,7 @@ Here are a few common causes for random crashes:
|
||||||
|
|
||||||
Or disable the =:ui doom-dashboard= & =:tools magit= modules (see [[https://github.com/hlissner/doom-emacs/issues/1170][#1170]]).
|
Or disable the =:ui doom-dashboard= & =:tools magit= modules (see [[https://github.com/hlissner/doom-emacs/issues/1170][#1170]]).
|
||||||
+ Ligatures and some fonts can cause Emacs to crash. You may want to try a
|
+ Ligatures and some fonts can cause Emacs to crash. You may want to try a
|
||||||
different font, or disable the =:ui pretty-code= module.
|
different font, or disable the =:ui ligatures module.
|
||||||
|
|
||||||
** Can't load my theme; ~unable to find theme file for X~ errors
|
** Can't load my theme; ~unable to find theme file for X~ errors
|
||||||
This means Emacs can't find the X-theme.el file for the theme you want to load.
|
This means Emacs can't find the X-theme.el file for the theme you want to load.
|
||||||
|
|
|
@ -201,13 +201,13 @@ Aesthetic modules that affect the Emacs interface or user experience.
|
||||||
+ [[file:../modules/ui/hl-todo/README.org][hl-todo]] - TODO
|
+ [[file:../modules/ui/hl-todo/README.org][hl-todo]] - TODO
|
||||||
+ [[file:../modules/ui/hydra/README.org][hydra]] - TODO
|
+ [[file:../modules/ui/hydra/README.org][hydra]] - TODO
|
||||||
+ indent-guides - TODO
|
+ indent-guides - TODO
|
||||||
|
+ [[file:/mnt/projects/conf/doom-emacs/modules/ui/ligatures/README.org][ligatures]] =+extra +fira +hasklig +iosevka +pragmata-pro= - Ligature support for Emacs
|
||||||
+ [[file:../modules/ui/minimap/README.org][minimap]] - TODO
|
+ [[file:../modules/ui/minimap/README.org][minimap]] - TODO
|
||||||
+ [[file:../modules/ui/modeline/README.org][modeline]] =+light= - TODO
|
+ [[file:../modules/ui/modeline/README.org][modeline]] =+light= - TODO
|
||||||
+ [[file:../modules/ui/nav-flash/README.org][nav-flash]] - TODO
|
+ [[file:../modules/ui/nav-flash/README.org][nav-flash]] - TODO
|
||||||
+ [[file:../modules/ui/neotree/README.org][neotree]] - TODO
|
+ [[file:../modules/ui/neotree/README.org][neotree]] - TODO
|
||||||
+ [[file:../modules/ui/ophints/README.org][ophints]] - TODO
|
+ [[file:../modules/ui/ophints/README.org][ophints]] - TODO
|
||||||
+ [[file:../modules/ui/popup/README.org][popup]] =+all +defaults= - Makes temporary/disposable windows less intrusive
|
+ [[file:../modules/ui/popup/README.org][popup]] =+all +defaults= - Makes temporary/disposable windows less intrusive
|
||||||
+ [[file:../modules//ui/pretty-code/README.org][pretty-code]] =+fira +hasklig +iosevka +pragmata-pro= - TODO
|
|
||||||
+ [[file:../modules/ui/tabs/README.org][tabs]] - TODO
|
+ [[file:../modules/ui/tabs/README.org][tabs]] - TODO
|
||||||
+ treemacs - TODO
|
+ treemacs - TODO
|
||||||
+ [[file:../modules/ui/unicode/README.org][unicode]] - TODO
|
+ [[file:../modules/ui/unicode/README.org][unicode]] - TODO
|
||||||
|
|
|
@ -34,13 +34,13 @@
|
||||||
hl-todo ; highlight TODO/FIXME/NOTE/DEPRECATED/HACK/REVIEW
|
hl-todo ; highlight TODO/FIXME/NOTE/DEPRECATED/HACK/REVIEW
|
||||||
;;hydra
|
;;hydra
|
||||||
;;indent-guides ; highlighted indent columns
|
;;indent-guides ; highlighted indent columns
|
||||||
|
;;ligatures ; ligatures and symbols to make your code pretty again
|
||||||
;;minimap ; show a map of the code on the side
|
;;minimap ; show a map of the code on the side
|
||||||
modeline ; snazzy, Atom-inspired modeline, plus API
|
modeline ; snazzy, Atom-inspired modeline, plus API
|
||||||
;;nav-flash ; blink cursor line after big motions
|
;;nav-flash ; blink cursor line after big motions
|
||||||
;;neotree ; a project drawer, like NERDTree for vim
|
;;neotree ; a project drawer, like NERDTree for vim
|
||||||
ophints ; highlight the region an operation acts on
|
ophints ; highlight the region an operation acts on
|
||||||
(popup +defaults) ; tame sudden yet inevitable temporary windows
|
(popup +defaults) ; tame sudden yet inevitable temporary windows
|
||||||
;;pretty-code ; ligatures or substitute text with pretty symbols
|
|
||||||
;;tabs ; a tab bar for Emacs
|
;;tabs ; a tab bar for Emacs
|
||||||
;;treemacs ; a project drawer, like neotree but cooler
|
;;treemacs ; a project drawer, like neotree but cooler
|
||||||
;;unicode ; extended unicode support for various languages
|
;;unicode ; extended unicode support for various languages
|
||||||
|
|
|
@ -51,7 +51,7 @@ This is ignored by ccls.")
|
||||||
(set-rotate-patterns! 'c++-mode
|
(set-rotate-patterns! 'c++-mode
|
||||||
:symbols '(("public" "protected" "private")
|
:symbols '(("public" "protected" "private")
|
||||||
("class" "struct")))
|
("class" "struct")))
|
||||||
(set-pretty-symbols! '(c-mode c++-mode)
|
(set-ligatures! '(c-mode c++-mode)
|
||||||
;; Functional
|
;; Functional
|
||||||
;; :def "void "
|
;; :def "void "
|
||||||
;; Types
|
;; Types
|
||||||
|
|
|
@ -7,7 +7,7 @@
|
||||||
(when (and (featurep! +flutter) IS-LINUX)
|
(when (and (featurep! +flutter) IS-LINUX)
|
||||||
(when-let (path (doom-glob "/opt/flutter/bin/cache/dart-sdk"))
|
(when-let (path (doom-glob "/opt/flutter/bin/cache/dart-sdk"))
|
||||||
(setq flutter-sdk-path path)))
|
(setq flutter-sdk-path path)))
|
||||||
(set-pretty-symbols! '(dart-mode)
|
(set-ligatures! '(dart-mode)
|
||||||
;; Functional
|
;; Functional
|
||||||
:def "Function"
|
:def "Function"
|
||||||
:lambda "() =>"
|
:lambda "() =>"
|
||||||
|
|
|
@ -14,7 +14,7 @@
|
||||||
;; a subset of them (defined below).
|
;; a subset of them (defined below).
|
||||||
(provide 'smartparens-elixir)
|
(provide 'smartparens-elixir)
|
||||||
:config
|
:config
|
||||||
(set-pretty-symbols! 'elixir-mode
|
(set-ligatures! 'elixir-mode
|
||||||
;; Functional
|
;; Functional
|
||||||
:def "def"
|
:def "def"
|
||||||
:lambda "fn"
|
:lambda "fn"
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
(set-company-backend! 'elm-mode 'company-elm))
|
(set-company-backend! 'elm-mode 'company-elm))
|
||||||
|
|
||||||
(set-repl-handler! 'elm-mode #'run-elm-interactive)
|
(set-repl-handler! 'elm-mode #'run-elm-interactive)
|
||||||
(set-pretty-symbols! 'elm-mode
|
(set-ligatures! 'elm-mode
|
||||||
:null "null"
|
:null "null"
|
||||||
:true "true" :false "false"
|
:true "true" :false "false"
|
||||||
:int "Int" :str "String"
|
:int "Int" :str "String"
|
||||||
|
|
|
@ -33,7 +33,7 @@ employed so that flycheck still does *some* helpful linting.")
|
||||||
:definition #'+emacs-lisp-lookup-definition
|
:definition #'+emacs-lisp-lookup-definition
|
||||||
:documentation #'+emacs-lisp-lookup-documentation)
|
:documentation #'+emacs-lisp-lookup-documentation)
|
||||||
(set-docsets! '(emacs-lisp-mode lisp-interaction-mode) "Emacs Lisp")
|
(set-docsets! '(emacs-lisp-mode lisp-interaction-mode) "Emacs Lisp")
|
||||||
(set-pretty-symbols! 'emacs-lisp-mode :lambda "lambda")
|
(set-ligatures! 'emacs-lisp-mode :lambda "lambda")
|
||||||
(set-rotate-patterns! 'emacs-lisp-mode
|
(set-rotate-patterns! 'emacs-lisp-mode
|
||||||
:symbols '(("t" "nil")
|
:symbols '(("t" "nil")
|
||||||
("let" "let*")
|
("let" "let*")
|
||||||
|
|
|
@ -7,7 +7,7 @@
|
||||||
"MarionetteJS" "MomentJS" "NodeJS" "PrototypeJS" "React" "RequireJS"
|
"MarionetteJS" "MomentJS" "NodeJS" "PrototypeJS" "React" "RequireJS"
|
||||||
"SailsJS" "UnderscoreJS" "VueJS" "ZeptoJS")
|
"SailsJS" "UnderscoreJS" "VueJS" "ZeptoJS")
|
||||||
|
|
||||||
(set-pretty-symbols! '(js2-mode rjsx-mode web-mode)
|
(set-ligatures! '(js2-mode rjsx-mode web-mode)
|
||||||
;; Functional
|
;; Functional
|
||||||
:def "function"
|
:def "function"
|
||||||
:lambda "() =>"
|
:lambda "() =>"
|
||||||
|
@ -95,7 +95,7 @@
|
||||||
:config
|
:config
|
||||||
(set-electric! 'typescript-mode
|
(set-electric! 'typescript-mode
|
||||||
:chars '(?\} ?\)) :words '("||" "&&"))
|
:chars '(?\} ?\)) :words '("||" "&&"))
|
||||||
(set-pretty-symbols! 'typescript-mode
|
(set-ligatures! 'typescript-mode
|
||||||
;; Functional
|
;; Functional
|
||||||
:def "function"
|
:def "function"
|
||||||
:lambda "() =>"
|
:lambda "() =>"
|
||||||
|
|
|
@ -87,7 +87,7 @@ tools.
|
||||||
| =utop-eval-region= | =SPC c e= | evaluate selected region in =utop= |
|
| =utop-eval-region= | =SPC c e= | evaluate selected region in =utop= |
|
||||||
|
|
||||||
** Hacks
|
** Hacks
|
||||||
+ =set-pretty-symbols!= is called with the full tuareg prettify symbol list, this
|
+ =set-ligatures!= is called with the full tuareg prettify symbol list, this
|
||||||
can cause columns to change as certain keywords are shortened (e.g. =fun=
|
can cause columns to change as certain keywords are shortened (e.g. =fun=
|
||||||
becomes \lambda.
|
becomes \lambda.
|
||||||
+ =tuareg-opam-update-env= is called the first time =tuareg= is loaded
|
+ =tuareg-opam-update-env= is called the first time =tuareg= is loaded
|
||||||
|
|
|
@ -10,7 +10,7 @@
|
||||||
|
|
||||||
(after! tuareg
|
(after! tuareg
|
||||||
;; tuareg-mode has the prettify symbols itself
|
;; tuareg-mode has the prettify symbols itself
|
||||||
(set-pretty-symbols! 'tuareg-mode :alist
|
(set-ligatures! 'tuareg-mode :alist
|
||||||
(append tuareg-prettify-symbols-basic-alist
|
(append tuareg-prettify-symbols-basic-alist
|
||||||
tuareg-prettify-symbols-extra-alist))
|
tuareg-prettify-symbols-extra-alist))
|
||||||
;; harmless if `prettify-symbols-mode' isn't active
|
;; harmless if `prettify-symbols-mode' isn't active
|
||||||
|
|
|
@ -183,7 +183,7 @@ This forces it to read the background before rendering."
|
||||||
;; Automatic indent detection in org files is meaningless
|
;; Automatic indent detection in org files is meaningless
|
||||||
(add-to-list 'doom-detect-indentation-excluded-modes 'org-mode)
|
(add-to-list 'doom-detect-indentation-excluded-modes 'org-mode)
|
||||||
|
|
||||||
(set-pretty-symbols! 'org-mode
|
(set-ligatures! 'org-mode
|
||||||
:name "#+NAME:"
|
:name "#+NAME:"
|
||||||
:name "#+name:"
|
:name "#+name:"
|
||||||
:src_block "#+BEGIN_SRC"
|
:src_block "#+BEGIN_SRC"
|
||||||
|
|
|
@ -21,7 +21,7 @@
|
||||||
(set-repl-handler! 'php-mode #'php-boris)
|
(set-repl-handler! 'php-mode #'php-boris)
|
||||||
(set-lookup-handlers! 'php-mode :documentation #'php-search-documentation)
|
(set-lookup-handlers! 'php-mode :documentation #'php-search-documentation)
|
||||||
(set-formatter! 'php-mode #'php-cs-fixer-fix)
|
(set-formatter! 'php-mode #'php-cs-fixer-fix)
|
||||||
(set-pretty-symbols! 'php-mode
|
(set-ligatures! 'php-mode
|
||||||
;; Functional
|
;; Functional
|
||||||
:lambda "function()"
|
:lambda "function()"
|
||||||
:def "function"
|
:def "function"
|
||||||
|
|
|
@ -31,7 +31,7 @@ called.")
|
||||||
(set-repl-handler! 'python-mode #'+python/open-repl :persist t)
|
(set-repl-handler! 'python-mode #'+python/open-repl :persist t)
|
||||||
(set-docsets! 'python-mode "Python 3" "NumPy" "SciPy")
|
(set-docsets! 'python-mode "Python 3" "NumPy" "SciPy")
|
||||||
|
|
||||||
(set-pretty-symbols! 'python-mode
|
(set-ligatures! 'python-mode
|
||||||
;; Functional
|
;; Functional
|
||||||
:def "def"
|
:def "def"
|
||||||
:lambda "lambda"
|
:lambda "lambda"
|
||||||
|
|
|
@ -16,7 +16,7 @@
|
||||||
:definition #'+racket-lookup-definition
|
:definition #'+racket-lookup-definition
|
||||||
:documentation #'+racket-lookup-documentation)
|
:documentation #'+racket-lookup-documentation)
|
||||||
(set-docsets! 'racket-mode "Racket")
|
(set-docsets! 'racket-mode "Racket")
|
||||||
(set-pretty-symbols! 'racket-mode
|
(set-ligatures! 'racket-mode
|
||||||
:lambda "lambda"
|
:lambda "lambda"
|
||||||
:map "map"
|
:map "map"
|
||||||
:dot ".")
|
:dot ".")
|
||||||
|
|
|
@ -69,7 +69,7 @@
|
||||||
|
|
||||||
(use-package! racer
|
(use-package! racer
|
||||||
:unless (featurep! +lsp)
|
:unless (featurep! +lsp)
|
||||||
:hook (rustic-mode . racer-mode)
|
:hook (rustic-mode-local-vars . racer-mode)
|
||||||
:init
|
:init
|
||||||
;; HACK Fix #2132: `racer' depends on `rust-mode', which tries to modify
|
;; HACK Fix #2132: `racer' depends on `rust-mode', which tries to modify
|
||||||
;; `auto-mode-alist'. We make extra sure that doesn't stick, especially
|
;; `auto-mode-alist'. We make extra sure that doesn't stick, especially
|
||||||
|
|
|
@ -18,7 +18,7 @@
|
||||||
(when (featurep! +lsp)
|
(when (featurep! +lsp)
|
||||||
(add-hook 'scala-mode-local-vars-hook #'lsp!))
|
(add-hook 'scala-mode-local-vars-hook #'lsp!))
|
||||||
|
|
||||||
(set-pretty-symbols! 'scala-mode
|
(set-ligatures! 'scala-mode
|
||||||
;; Functional
|
;; Functional
|
||||||
:def "def"
|
:def "def"
|
||||||
:composition "compose"
|
:composition "compose"
|
||||||
|
|
|
@ -16,7 +16,7 @@
|
||||||
:config
|
:config
|
||||||
(set-electric! 'sh-mode :words '("else" "elif" "fi" "done" "then" "do" "esac" ";;"))
|
(set-electric! 'sh-mode :words '("else" "elif" "fi" "done" "then" "do" "esac" ";;"))
|
||||||
(set-repl-handler! 'sh-mode #'+sh/open-repl)
|
(set-repl-handler! 'sh-mode #'+sh/open-repl)
|
||||||
(set-pretty-symbols! 'sh-mode
|
(set-ligatures! 'sh-mode
|
||||||
;; Functional
|
;; Functional
|
||||||
:def "function"
|
:def "function"
|
||||||
;; Types
|
;; Types
|
||||||
|
|
123
modules/ui/ligatures/+fira.el
Normal file
123
modules/ui/ligatures/+fira.el
Normal file
|
@ -0,0 +1,123 @@
|
||||||
|
;;; ui/ligatures/+fira.el -*- lexical-binding: t; -*-
|
||||||
|
|
||||||
|
(+ligatures--def-font fira
|
||||||
|
("Fira Code Symbol"
|
||||||
|
:range '(#Xe100 . #Xe16f)
|
||||||
|
:url "https://github.com/tonsky/FiraCode/raw/13234c0/distr/ttf/%s"
|
||||||
|
:files '("FiraCode-Bold.ttf"
|
||||||
|
"FiraCode-Light.ttf"
|
||||||
|
"FiraCode-Medium.ttf"
|
||||||
|
"FiraCode-Regular.ttf"
|
||||||
|
"FiraCode-Retina.ttf"))
|
||||||
|
("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)
|
||||||
|
("x" . #Xe16b)
|
||||||
|
(":" . #Xe16c)
|
||||||
|
("+" . #Xe16d)
|
||||||
|
("+" . #Xe16e)
|
||||||
|
("*" . #Xe16f))
|
62
modules/ui/ligatures/+hasklig.el
Normal file
62
modules/ui/ligatures/+hasklig.el
Normal file
|
@ -0,0 +1,62 @@
|
||||||
|
;;; ui/ligatures/+hasklig.el -*- lexical-binding: t; -*-
|
||||||
|
|
||||||
|
(+ligatures--def-font hasklig
|
||||||
|
("Hasklig"
|
||||||
|
:range '(#Xe100 . #Xe129)
|
||||||
|
:url "https://github.com/jsravn/hasklig-emacs/raw/33354a3/%s"
|
||||||
|
:files '("Hasklig-Black.otf"
|
||||||
|
"Hasklig-BlackIt.otf"
|
||||||
|
"Hasklig-Bold.otf"
|
||||||
|
"Hasklig-BoldIt.otf"
|
||||||
|
"Hasklig-ExtraLight.otf"
|
||||||
|
"Hasklig-ExtraLightIt.otf"
|
||||||
|
"Hasklig-It.otf"
|
||||||
|
"Hasklig-Light.otf"
|
||||||
|
"Hasklig-LightIt.otf"
|
||||||
|
"Hasklig-Medium.otf"
|
||||||
|
"Hasklig-MediumIt.otf"
|
||||||
|
"Hasklig-Regular.otf"
|
||||||
|
"Hasklig-Semibold.otf"
|
||||||
|
"Hasklig-SemiboldIt.otf"))
|
||||||
|
("&&" . #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))
|
244
modules/ui/ligatures/+iosevka.el
Normal file
244
modules/ui/ligatures/+iosevka.el
Normal file
|
@ -0,0 +1,244 @@
|
||||||
|
;;; ui/ligatures/+iosevka.el -*- lexical-binding: t; -*-
|
||||||
|
|
||||||
|
(+ligatures--def-font iosevka
|
||||||
|
("Iosevka"
|
||||||
|
:range '(#Xe100 . #Xe1cc)
|
||||||
|
:url "https://github.com/jsravn/iosevka-emacs/raw/20fc2c4/%s"
|
||||||
|
:files '("iosevka-custom-lightoblique.ttf"
|
||||||
|
"iosevka-custom-thinoblique.ttf"
|
||||||
|
"iosevka-custom-mediumitalic.ttf"
|
||||||
|
"iosevka-custom-light.ttf"
|
||||||
|
"iosevka-custom-heavy.ttf"
|
||||||
|
"iosevka-custom-bolditalic.ttf"
|
||||||
|
"iosevka-custom-bold.ttf"
|
||||||
|
"iosevka-custom-lightitalic.ttf"
|
||||||
|
"iosevka-custom-thin.ttf"
|
||||||
|
"iosevka-custom-extralight.ttf"
|
||||||
|
"iosevka-custom-oblique.ttf"
|
||||||
|
"iosevka-custom-italic.ttf"
|
||||||
|
"iosevka-custom-heavyoblique.ttf"
|
||||||
|
"iosevka-custom-heavyitalic.ttf"
|
||||||
|
"iosevka-custom-extralightitalic.ttf"
|
||||||
|
"iosevka-custom-thinitalic.ttf"
|
||||||
|
"iosevka-custom-medium.ttf"
|
||||||
|
"iosevka-custom-mediumoblique.ttf"
|
||||||
|
"iosevka-custom-extralightoblique.ttf"
|
||||||
|
"iosevka-custom-boldoblique.ttf"
|
||||||
|
"iosevka-custom-regular.ttf"))
|
||||||
|
;; Double-ended hyphen arrows
|
||||||
|
("<->" . #Xe100)
|
||||||
|
("<-->" . #Xe101)
|
||||||
|
("<--->" . #Xe102)
|
||||||
|
("<---->" . #Xe103)
|
||||||
|
("<----->" . #Xe104)
|
||||||
|
;; Double-ended equals arrows
|
||||||
|
("<=>" . #Xe105)
|
||||||
|
("<==>" . #Xe106)
|
||||||
|
("<===>" . #Xe107)
|
||||||
|
("<====>" . #Xe108)
|
||||||
|
("<=====>" . #Xe109)
|
||||||
|
;; Double-ended asterisk operators
|
||||||
|
("<**>" . #Xe10a)
|
||||||
|
("<***>" . #Xe10b)
|
||||||
|
("<****>" . #Xe10c)
|
||||||
|
("<*****>" . #Xe10d)
|
||||||
|
;; HTML comments
|
||||||
|
("<!--" . #Xe10e)
|
||||||
|
("<!---" . #Xe10f)
|
||||||
|
;; Three-char ops with discards
|
||||||
|
("<$" . #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)
|
||||||
|
;; Colons
|
||||||
|
("::" . #Xe146)
|
||||||
|
(":::" . #Xe147)
|
||||||
|
("::::" . #Xe148)
|
||||||
|
;; Arrow-like operators
|
||||||
|
("->" . #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)
|
||||||
|
("==>=" . #Xe16b)
|
||||||
|
("==>==" . #Xe16c)
|
||||||
|
("==>>" . #Xe16d)
|
||||||
|
("==>>=" . #Xe16e)
|
||||||
|
("==>>==" . #Xe16f)
|
||||||
|
("==>>>" . #Xe170)
|
||||||
|
("==>>>=" . #Xe171)
|
||||||
|
("==>>>==" . #Xe172)
|
||||||
|
(">=" . #Xe173)
|
||||||
|
(">==" . #Xe174)
|
||||||
|
(">>=" . #Xe175)
|
||||||
|
(">>==" . #Xe176)
|
||||||
|
(">>>=" . #Xe177)
|
||||||
|
(">>>==" . #Xe178)
|
||||||
|
("<-" . #Xe179)
|
||||||
|
("-<-" . #Xe17a)
|
||||||
|
("--<-" . #Xe17b)
|
||||||
|
("<<-" . #Xe17c)
|
||||||
|
("-<<-" . #Xe17d)
|
||||||
|
("--<<-" . #Xe17e)
|
||||||
|
("<<<-" . #Xe17f)
|
||||||
|
("-<<<-" . #Xe180)
|
||||||
|
("--<<<-" . #Xe181)
|
||||||
|
("<--" . #Xe182)
|
||||||
|
("-<--" . #Xe183)
|
||||||
|
("--<--" . #Xe184)
|
||||||
|
("<<--" . #Xe185)
|
||||||
|
("-<<--" . #Xe186)
|
||||||
|
("--<<--" . #Xe187)
|
||||||
|
("<<<--" . #Xe188)
|
||||||
|
("-<<<--" . #Xe189)
|
||||||
|
("--<<<--" . #Xe18a)
|
||||||
|
("-<" . #Xe18b)
|
||||||
|
("--<" . #Xe18c)
|
||||||
|
("-<<" . #Xe18d)
|
||||||
|
("--<<" . #Xe18e)
|
||||||
|
("-<<<" . #Xe18f)
|
||||||
|
("--<<<" . #Xe190)
|
||||||
|
("<=" . #Xe191)
|
||||||
|
("=<=" . #Xe192)
|
||||||
|
("==<=" . #Xe193)
|
||||||
|
("<<=" . #Xe194)
|
||||||
|
("=<<=" . #Xe195)
|
||||||
|
("==<<=" . #Xe196)
|
||||||
|
("<<<=" . #Xe197)
|
||||||
|
("=<<<=" . #Xe198)
|
||||||
|
("==<<<=" . #Xe199)
|
||||||
|
("<==" . #Xe19a)
|
||||||
|
("=<==" . #Xe19b)
|
||||||
|
("==<==" . #Xe19c)
|
||||||
|
("<<==" . #Xe19d)
|
||||||
|
("=<<==" . #Xe19e)
|
||||||
|
("==<<==" . #Xe19f)
|
||||||
|
("<<<==" . #Xe1a0)
|
||||||
|
("=<<<==" . #Xe1a1)
|
||||||
|
("==<<<==" . #Xe1a2)
|
||||||
|
("=<" . #Xe1a3)
|
||||||
|
("==<" . #Xe1a4)
|
||||||
|
("=<<" . #Xe1a5)
|
||||||
|
("==<<" . #Xe1a6)
|
||||||
|
("=<<<" . #Xe1a7)
|
||||||
|
("==<<<" . #Xe1a8)
|
||||||
|
;; Monadic operators
|
||||||
|
(">=>" . #Xe1a9)
|
||||||
|
(">->" . #Xe1aa)
|
||||||
|
(">-->" . #Xe1ab)
|
||||||
|
(">==>" . #Xe1ac)
|
||||||
|
("<=<" . #Xe1ad)
|
||||||
|
("<-<" . #Xe1ae)
|
||||||
|
("<--<" . #Xe1af)
|
||||||
|
("<==<" . #Xe1b0)
|
||||||
|
;; Composition operators
|
||||||
|
(">>" . #Xe1b1)
|
||||||
|
(">>>" . #Xe1b2)
|
||||||
|
("<<" . #Xe1b3)
|
||||||
|
("<<<" . #Xe1b4)
|
||||||
|
;; Lens operators
|
||||||
|
(":+" . #Xe1b5)
|
||||||
|
(":-" . #Xe1b6)
|
||||||
|
(":=" . #Xe1b7)
|
||||||
|
("+:" . #Xe1b8)
|
||||||
|
("-:" . #Xe1b9)
|
||||||
|
("=:" . #Xe1ba)
|
||||||
|
("=^" . #Xe1bb)
|
||||||
|
("=+" . #Xe1bc)
|
||||||
|
("=-" . #Xe1bd)
|
||||||
|
("=*" . #Xe1be)
|
||||||
|
("=/" . #Xe1bf)
|
||||||
|
("=%" . #Xe1c0)
|
||||||
|
("^=" . #Xe1c1)
|
||||||
|
("+=" . #Xe1c2)
|
||||||
|
("-=" . #Xe1c3)
|
||||||
|
("*=" . #Xe1c4)
|
||||||
|
("/=" . #Xe1c5)
|
||||||
|
("%=" . #Xe1c6)
|
||||||
|
;; Logical
|
||||||
|
("/\\" . #Xe1c7)
|
||||||
|
("\\/" . #Xe1c8)
|
||||||
|
;; Semigroup/monoid operators
|
||||||
|
("<>" . #Xe1c9)
|
||||||
|
("<+" . #Xe1ca)
|
||||||
|
("<+>" . #Xe1cb)
|
||||||
|
("+>" . #Xe1cc))
|
249
modules/ui/ligatures/+pragmata-pro.el
Normal file
249
modules/ui/ligatures/+pragmata-pro.el
Normal file
|
@ -0,0 +1,249 @@
|
||||||
|
;;; ui/ligatures/+pragmata-pro.el -*- lexical-binding: t; -*-
|
||||||
|
|
||||||
|
(+ligatures--def-font pragmata-pro
|
||||||
|
("PragmataPro")
|
||||||
|
;; Double-ended hyphen arrows
|
||||||
|
("[ERROR]" . #XE2C0)
|
||||||
|
("[DEBUG]" . #XE2C1)
|
||||||
|
("[INFO]" . #XE2C2)
|
||||||
|
("[WARN]" . #XE2C3)
|
||||||
|
("[WARNING]" . #XE2C4)
|
||||||
|
("[ERR]" . #XE2C5)
|
||||||
|
("[FATAL]" . #XE2C6)
|
||||||
|
("[TRACE]" . #XE2C7)
|
||||||
|
("[FIXME]" . #XE2C8)
|
||||||
|
("[TODO]" . #XE2C9)
|
||||||
|
("[BUG]" . #XE2CA)
|
||||||
|
("[NOTE]" . #XE2CB)
|
||||||
|
("[HACK]" . #XE2CC)
|
||||||
|
("[MARK]" . #XE2CD)
|
||||||
|
("# ERROR" . #XE2F0)
|
||||||
|
("# DEBUG" . #XE2F1)
|
||||||
|
("# INFO" . #XE2F2)
|
||||||
|
("# WARN" . #XE2F3)
|
||||||
|
("# WARNING" . #XE2F4)
|
||||||
|
("# ERR" . #XE2F5)
|
||||||
|
("# FATAL" . #XE2F6)
|
||||||
|
("# TRACE" . #XE2F7)
|
||||||
|
("# FIXME" . #XE2F8)
|
||||||
|
("# TODO" . #XE2F9)
|
||||||
|
("# BUG" . #XE2FA)
|
||||||
|
("# NOTE" . #XE2FB)
|
||||||
|
("# HACK" . #XE2FC)
|
||||||
|
("# MARK" . #XE2FD)
|
||||||
|
("// ERROR" . #XE2E0)
|
||||||
|
("// DEBUG" . #XE2E1)
|
||||||
|
("// INFO" . #XE2E2)
|
||||||
|
("// WARN" . #XE2E3)
|
||||||
|
("// WARNING". #XE2E4)
|
||||||
|
("// ERR" . #XE2E5)
|
||||||
|
("// FATAL" . #XE2E6)
|
||||||
|
("// TRACE" . #XE2E7)
|
||||||
|
("// FIXME" . #XE2E8)
|
||||||
|
("// TODO" . #XE2E9)
|
||||||
|
("// BUG" . #XE2EA)
|
||||||
|
("// NOTE" . #XE2EB)
|
||||||
|
("// HACK" . #XE2EC)
|
||||||
|
("// MARK" . #XE2ED)
|
||||||
|
("!!" . #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)
|
||||||
|
("<!" . #XE9E3)
|
||||||
|
("<@" . #XE9E4)
|
||||||
|
("<#" . #XE9E5)
|
||||||
|
("<%" . #XE9E6)
|
||||||
|
("<^" . #XE9E7)
|
||||||
|
("<&" . #XE9E8)
|
||||||
|
("<?" . #XE9E9)
|
||||||
|
("<." . #XE9EA)
|
||||||
|
("</" . #XE9EB)
|
||||||
|
("<\\" . #XE9EC)
|
||||||
|
("<\"" . #XE9ED)
|
||||||
|
("<:" . #XE9EE)
|
||||||
|
("<->" . #XE9EF)
|
||||||
|
("<!--" . #XE9F0)
|
||||||
|
("<--" . #XE9F1)
|
||||||
|
("<~<" . #XE9F2)
|
||||||
|
("<==>" . #XE9F3)
|
||||||
|
("<|-" . #XE9F4)
|
||||||
|
("<<|" . #XE9F5)
|
||||||
|
("<-<" . #XE9F7)
|
||||||
|
("<-->" . #XE9F8)
|
||||||
|
("<<==" . #XE9F9)
|
||||||
|
("<==" . #XE9FA)
|
||||||
|
("=<<" . #XEA00)
|
||||||
|
("==" . #XEA01)
|
||||||
|
("===" . #XEA02)
|
||||||
|
("==>" . #XEA03)
|
||||||
|
("=>" . #XEA04)
|
||||||
|
("=~" . #XEA05)
|
||||||
|
("=>>" . #XEA06)
|
||||||
|
("=/=" . #XEA07)
|
||||||
|
("=~=" . #XEA08)
|
||||||
|
("==>>" . #XEA09)
|
||||||
|
("≡≡" . #XEA10)
|
||||||
|
("≡≡≡" . #XEA11)
|
||||||
|
("≡:≡" . #XEA12)
|
||||||
|
(">-" . #XEA20)
|
||||||
|
(">=" . #XEA21)
|
||||||
|
(">>" . #XEA22)
|
||||||
|
(">>-" . #XEA23)
|
||||||
|
(">>=" . #XEA24)
|
||||||
|
(">>>" . #XEA25)
|
||||||
|
(">=>" . #XEA26)
|
||||||
|
(">>^" . #XEA27)
|
||||||
|
(">>|" . #XEA28)
|
||||||
|
(">!=" . #XEA29)
|
||||||
|
(">->" . #XEA2A)
|
||||||
|
("??" . #XEA40)
|
||||||
|
("?~" . #XEA41)
|
||||||
|
("?=" . #XEA42)
|
||||||
|
("?>" . #XEA43)
|
||||||
|
("???" . #XEA44)
|
||||||
|
("?." . #XEA45)
|
||||||
|
("^=" . #XEA48)
|
||||||
|
("^." . #XEA49)
|
||||||
|
("^?" . #XEA4A)
|
||||||
|
("^.." . #XEA4B)
|
||||||
|
("^<<" . #XEA4C)
|
||||||
|
("^>>" . #XEA4D)
|
||||||
|
("^>" . #XEA4E)
|
||||||
|
("\\\\" . #XEA50)
|
||||||
|
("\\>" . #XEA51)
|
||||||
|
("\\/-" . #XEA52)
|
||||||
|
("@>" . #XEA57)
|
||||||
|
("|=" . #XEA60)
|
||||||
|
("||" . #XEA61)
|
||||||
|
("|>" . #XEA62)
|
||||||
|
("|||" . #XEA63)
|
||||||
|
("|+|" . #XEA64)
|
||||||
|
("|->" . #XEA65)
|
||||||
|
("|-->" . #XEA66)
|
||||||
|
("|=>" . #XEA67)
|
||||||
|
("|==>" . #XEA68)
|
||||||
|
("|>-" . #XEA69)
|
||||||
|
("|<<" . #XEA6A)
|
||||||
|
("||>" . #XEA6B)
|
||||||
|
("|>>" . #XEA6C)
|
||||||
|
("|-" . #XEA6D)
|
||||||
|
("||-" . #XEA6E)
|
||||||
|
("~=" . #XEA70)
|
||||||
|
("~>" . #XEA71)
|
||||||
|
("~~>" . #XEA72)
|
||||||
|
("~>>" . #XEA73)
|
||||||
|
("[[" . #XEA80)
|
||||||
|
("]]" . #XEA81)
|
||||||
|
("\">" . #XEA90)
|
||||||
|
("_|_" . #XEA97))
|
|
@ -1,4 +1,4 @@
|
||||||
#+TITLE: ui/pretty-code
|
#+TITLE: ui/ligatures
|
||||||
#+DATE: June 16, 2018
|
#+DATE: June 16, 2018
|
||||||
#+SINCE: v2.0.9
|
#+SINCE: v2.0.9
|
||||||
#+STARTUP: inlineimages nofold
|
#+STARTUP: inlineimages nofold
|
||||||
|
@ -10,28 +10,31 @@
|
||||||
- [[#font-ligatures-module-flags][Font ligatures module flags]]
|
- [[#font-ligatures-module-flags][Font ligatures module flags]]
|
||||||
- [[#plugins][Plugins]]
|
- [[#plugins][Plugins]]
|
||||||
- [[#prerequisites][Prerequisites]]
|
- [[#prerequisites][Prerequisites]]
|
||||||
- [[#ligatures][Ligatures]]
|
- [[#mutsuharus-emacs-mac-port-or-emacs-28-with-harfbuzz-support][Mutsuharu's emacs-mac port or Emacs 28+ with Harfbuzz support]]
|
||||||
- [[#emacs-mac-port-or-emacs-28][Emacs-mac port or Emacs 28+]]
|
|
||||||
- [[#not-emacs-mac-and-emacs--27][Not Emacs-mac and Emacs <= 27]]
|
- [[#not-emacs-mac-and-emacs--27][Not Emacs-mac and Emacs <= 27]]
|
||||||
- [[#features][Features]]
|
- [[#features][Features]]
|
||||||
- [[#mathematical-symbols-replacement][Mathematical symbols replacement]]
|
- [[#mathematical-symbols-replacement][Mathematical symbols replacement]]
|
||||||
- [[#coding-ligatures][Coding ligatures]]
|
- [[#coding-ligatures][Coding ligatures]]
|
||||||
- [[#configuration][Configuration]]
|
- [[#configuration][Configuration]]
|
||||||
- [[#set-pretty-symbols][~set-pretty-symbols!~]]
|
- [[#set-ligatures][~set-ligatures!~]]
|
||||||
- [[#troubleshooting][Troubleshooting]]
|
- [[#troubleshooting][Troubleshooting]]
|
||||||
|
|
||||||
* Description
|
* Description
|
||||||
This module enables ligatures and/or arbitrary symbol substitutions with
|
This module enables ligatures and arbitrary symbol substitutions with
|
||||||
~prettify-symbols-mode~.
|
~mac-auto-operator-composition-mode~ (on supported macOS systems) or composition
|
||||||
|
tables (harfbuzz on Emacs 28), falling back on ~prettify-symbols-mode~
|
||||||
|
otherwise.
|
||||||
|
|
||||||
** Maintainers
|
** Maintainers
|
||||||
This module has no dedicated maintainers.
|
This module has no dedicated maintainers.
|
||||||
|
|
||||||
** Module Flags
|
** Module Flags
|
||||||
|
+ =+extra= Enables extra symbol substitutions in certain modes, for example
|
||||||
|
~lambda~ in lisps are replaced with ~λ~.
|
||||||
|
|
||||||
*** Font ligatures module flags
|
*** Font ligatures module flags
|
||||||
Those flags are ignored on emacs-mac and on other platforms if running emacs 28+
|
This module provides four flags for enabling fall-back ligature support for a
|
||||||
with harfbuzz feature. In those cases, ligatures are handled without needing the
|
particular font. They are:
|
||||||
extra configuration provided by those flags.
|
|
||||||
|
|
||||||
+ =+fira= Enables =Fira Code= ligatures. This requires Fira Code Symbol and a
|
+ =+fira= Enables =Fira Code= ligatures. This requires Fira Code Symbol and a
|
||||||
patched version of Fira Code (see below).
|
patched version of Fira Code (see below).
|
||||||
|
@ -42,32 +45,35 @@ extra configuration provided by those flags.
|
||||||
+ =+pragmata-pro= Enable =Pragmata Pro= ligatures. This requires the [[https://www.fsd.it/shop/fonts/pragmatapro/][Pragmata
|
+ =+pragmata-pro= Enable =Pragmata Pro= ligatures. This requires the [[https://www.fsd.it/shop/fonts/pragmatapro/][Pragmata
|
||||||
Pro font]].
|
Pro font]].
|
||||||
|
|
||||||
|
#+begin_quote
|
||||||
|
All these flags are ignored _if_ you're sporting either a) Emacs 28+ with
|
||||||
|
Harfbuzz support (which can compose ligatures natively), or b) Mitsuharu's
|
||||||
|
=emacs-mac= build on macOS (which uses ~mac-auto-operator-composition-mode~).
|
||||||
|
#+end_quote
|
||||||
|
|
||||||
** Plugins
|
** Plugins
|
||||||
This module installs no packages.
|
This module installs no packages.
|
||||||
|
|
||||||
* Prerequisites
|
* Prerequisites
|
||||||
** Ligatures
|
This module requires one of three setups for ligatures to work:
|
||||||
For ligatures to work, you must either:
|
|
||||||
|
|
||||||
- Have a recent enough version of Emacs which will compose ligatures
|
- A recent enough version of Emacs which will compose ligatures automatically
|
||||||
automatically, or
|
(Emacs 28 with Harfbuzz support), or
|
||||||
- Use one of our font-specific configurations.
|
- Mitsuharu's =emacs-mac= build on macOS (available on homebrew), or
|
||||||
|
- A patched font for Doom's fallback ligature support.
|
||||||
|
|
||||||
*** Emacs-mac port or Emacs 28+
|
** Mutsuharu's emacs-mac port or Emacs 28+ with Harfbuzz support
|
||||||
Ligatures are handled without needing additional configuration. If this doesn't
|
Ligatures should be handled without any additional configuration.
|
||||||
work, report a bug with your current version of emacs and the ligatures which
|
|
||||||
aren't working.
|
|
||||||
|
|
||||||
*** Not Emacs-mac and Emacs <= 27
|
** Not Emacs-mac and Emacs <= 27
|
||||||
1. Enable one of the four ligature font flags: =+fira=, =+hasklig=, =+iosevka=
|
1. Enable one of the four ligature font flags: =+fira=, =+hasklig=, =+iosevka=
|
||||||
or =+pragmata-pro=.
|
or =+pragmata-pro=.
|
||||||
2. Install the patched version of the associated font with ~M-x
|
2. Install the patched version of the associated font with ~M-x
|
||||||
+pretty-code/install-patched-font~. Note: Pragmata Pro cannot be installed
|
+ligatures/install-patched-font~. Note: Pragmata Pro cannot be installed this
|
||||||
this way because it is a non-free font and must be purchased and installed
|
way because it is a non-free font and must be purchased and installed
|
||||||
manually.
|
manually.
|
||||||
|
|
||||||
* TODO Features
|
* TODO Features
|
||||||
# An in-depth list of features, how to use them, and their dependencies.
|
|
||||||
** TODO Mathematical symbols replacement
|
** TODO Mathematical symbols replacement
|
||||||
** Coding ligatures
|
** Coding ligatures
|
||||||
This module includes configuration to compose combinations like =->= or =::=
|
This module includes configuration to compose combinations like =->= or =::=
|
||||||
|
@ -80,8 +86,8 @@ emacs, this is implemented in two different ways :
|
||||||
with the correct symbol. The mapping between =->=-like sequences and unicode
|
with the correct symbol. The mapping between =->=-like sequences and unicode
|
||||||
values in the font are font-specific ; therefore =+fira=, =+iosevka=... files
|
values in the font are font-specific ; therefore =+fira=, =+iosevka=... files
|
||||||
and specific fonts are necessary for it to work.
|
and specific fonts are necessary for it to work.
|
||||||
- composition-function-table method :: regexes are used to match all the usual
|
- composition-function-table method :: regexps are used to match all the usual
|
||||||
sequences which are composed into ligatures. These regexes are passed to emacs
|
sequences which are composed into ligatures. These regexps are passed to emacs
|
||||||
directly, which asks Harfbuzz to shape it. Ligatures are obtained
|
directly, which asks Harfbuzz to shape it. Ligatures are obtained
|
||||||
automatically depending on the capabilities of the font, and no font-specific
|
automatically depending on the capabilities of the font, and no font-specific
|
||||||
configuration is necessary.
|
configuration is necessary.
|
||||||
|
@ -96,9 +102,7 @@ Even though harfbuzz has been included in emacs 27, there is currently a [[https
|
||||||
emacs 27.
|
emacs 27.
|
||||||
|
|
||||||
* TODO Configuration
|
* TODO Configuration
|
||||||
# How to configure this module, including common problems and how to address them.
|
** TODO ~set-ligatures!~
|
||||||
|
|
||||||
** TODO ~set-pretty-symbols!~
|
|
||||||
|
|
||||||
* TODO Troubleshooting
|
* TODO Troubleshooting
|
||||||
# Common issues and their solution, or places to look for help.
|
# Common issues and their solution, or places to look for help.
|
58
modules/ui/ligatures/autoload/install.el
Normal file
58
modules/ui/ligatures/autoload/install.el
Normal file
|
@ -0,0 +1,58 @@
|
||||||
|
;;; ui/ligatures/autoload/install.el -*- lexical-binding: t; -*-
|
||||||
|
;;;###if (or (featurep! +fira) (featurep! +hasklig) (featurep! +iosevka))
|
||||||
|
|
||||||
|
(defun +ligatures--install-font (prefix name url-format fonts-alist &optional extra-fonts)
|
||||||
|
"Install fonts to the local system.
|
||||||
|
|
||||||
|
If PREFIX is nil, will prompt whether or not to download. NAME is informational
|
||||||
|
only. URL-FORMAT is a format string that should be a url and have a single %s,
|
||||||
|
which is expanded for each font in FONTS-ALIST. FONTS-ALIST should be the
|
||||||
|
filename of each font. It is used as the source and destination filename."
|
||||||
|
(unless (or prefix
|
||||||
|
(yes-or-no-p
|
||||||
|
(format "This will download and install the %s fonts, continue?"
|
||||||
|
name)))
|
||||||
|
(user-error "Aborted"))
|
||||||
|
(let* ((font-dest
|
||||||
|
(cond (IS-LINUX
|
||||||
|
(expand-file-name
|
||||||
|
"fonts/" (or (getenv "XDG_DATA_HOME")
|
||||||
|
"~/.local/share")))
|
||||||
|
(IS-MAC
|
||||||
|
(expand-file-name "~/Library/Fonts/"))))
|
||||||
|
(known-dest-p (stringp font-dest))
|
||||||
|
(font-dest (or font-dest (read-directory-name "Font installation directory: " "~/"))))
|
||||||
|
(unless (file-directory-p font-dest)
|
||||||
|
(mkdir font-dest t))
|
||||||
|
(dolist (font fonts-alist)
|
||||||
|
(url-copy-file (format url-format font)
|
||||||
|
(expand-file-name font font-dest)
|
||||||
|
t))
|
||||||
|
(when known-dest-p
|
||||||
|
(message "Font downloaded, updating font cache... <fc-cache -f -v> ")
|
||||||
|
(shell-command-to-string "fc-cache -f -v"))
|
||||||
|
(if IS-WINDOW
|
||||||
|
(when (y-or-n-p "The %S font was downloaded, but Windows users must install them manually.\n\nShow files in windows explorer?")
|
||||||
|
(call-process "explorer.exe" nil nil nil font-dest))
|
||||||
|
(message "Successfully %s %S fonts to %S!"
|
||||||
|
(if known-dest-p "installed" "downloaded")
|
||||||
|
name font-dest))))
|
||||||
|
|
||||||
|
;;;###autoload
|
||||||
|
(defun +ligatures/install-patched-font (font-id &optional arg)
|
||||||
|
"Install the font FONT-ID on your system.
|
||||||
|
FONT-ID must be a key from `+ligatures--font-alist'.
|
||||||
|
If PREFIX is non-nil, don't ask for confirmation and install it."
|
||||||
|
(interactive
|
||||||
|
(list
|
||||||
|
(car (cl-find (completing-read
|
||||||
|
"Install font: "
|
||||||
|
(mapcar #'cadr +ligatures--font-alist))
|
||||||
|
+ligatures--font-alist
|
||||||
|
:key #'cadr
|
||||||
|
:test #'equal))
|
||||||
|
current-prefix-arg))
|
||||||
|
(cl-destructuring-bind (font-name &keys _range url files)
|
||||||
|
(or (alist-get font-id +ligatures--font-alist)
|
||||||
|
(user-error "%S is not a valid font" font-id))
|
||||||
|
(+ligatures--install-font prefix font-name url files)))
|
|
@ -1,16 +1,15 @@
|
||||||
;;; ui/pretty-code/autoload/pretty-code.el -*- lexical-binding: t; -*-
|
;;; ui/ligatures/autoload/ligatures.el -*- lexical-binding: t; -*-
|
||||||
|
|
||||||
;;;###autoload
|
;; DEPRECATED
|
||||||
(defvar +pretty-code-symbols-alist '((t))
|
;;;###autodef
|
||||||
"An alist containing a mapping of major modes to its value for
|
(define-obsolete-function-alias 'set-pretty-symbols! 'set-ligatures! "3.0.0")
|
||||||
`prettify-symbols-alist'.")
|
|
||||||
|
|
||||||
;;;###autodef
|
;;;###autodef
|
||||||
(defun set-pretty-symbols! (modes &rest plist)
|
(defun set-ligatures! (modes &rest plist)
|
||||||
"Associates string patterns with icons in certain major-modes.
|
"Associates string patterns with icons in certain major-modes.
|
||||||
|
|
||||||
MODES is a major mode symbol or a list of them.
|
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',
|
PLIST is a property list whose keys must match keys in `+ligatures-classes',
|
||||||
and whose values are strings representing the text to be replaced with that
|
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
|
symbol. If the car of PLIST is nil, then unset any pretty symbols previously
|
||||||
defined for MODES.
|
defined for MODES.
|
||||||
|
@ -19,33 +18,33 @@ This function accepts one special property:
|
||||||
|
|
||||||
:alist ALIST
|
:alist ALIST
|
||||||
Appends ALIST to `prettify-symbols-alist' literally, without mapping text to
|
Appends ALIST to `prettify-symbols-alist' literally, without mapping text to
|
||||||
`+pretty-code-symbols'.
|
`+ligatures-classes'.
|
||||||
|
|
||||||
For example, the rule for emacs-lisp-mode is very simple:
|
For example, the rule for emacs-lisp-mode is very simple:
|
||||||
|
|
||||||
(set-pretty-symbols! 'emacs-lisp-mode
|
(set-ligatures! 'emacs-lisp-mode
|
||||||
:lambda \"lambda\")
|
:lambda \"lambda\")
|
||||||
|
|
||||||
This will replace any instances of \"lambda\" in emacs-lisp-mode with the symbol
|
This will replace any instances of \"lambda\" in emacs-lisp-mode with the symbol
|
||||||
assicated with :lambda in `+pretty-code-symbols'.
|
assicated with :lambda in `+ligatures-classes'.
|
||||||
|
|
||||||
Pretty symbols can be unset for emacs-lisp-mode with:
|
Pretty symbols can be unset for emacs-lisp-mode with:
|
||||||
|
|
||||||
(set-pretty-symbols! 'emacs-lisp-mode nil)"
|
(set-ligatures! 'emacs-lisp-mode nil)"
|
||||||
(declare (indent defun))
|
(declare (indent defun))
|
||||||
(if (null (car-safe plist))
|
(if (null (car-safe plist))
|
||||||
(dolist (mode (doom-enlist modes))
|
(dolist (mode (doom-enlist modes))
|
||||||
(assq-delete-all mode +pretty-code-symbols-alist))
|
(assq-delete-all mode +ligatures-extra-alist))
|
||||||
(let (results)
|
(let (results)
|
||||||
(while plist
|
(while plist
|
||||||
(let ((key (pop plist)))
|
(let ((key (pop plist)))
|
||||||
(if (eq key :alist)
|
(if (eq key :alist)
|
||||||
(prependq! results (pop plist))
|
(prependq! results (pop plist))
|
||||||
(when-let (char (plist-get +pretty-code-symbols key))
|
(when-let (char (plist-get +ligatures-classes key))
|
||||||
(push (cons (pop plist) char) results)))))
|
(push (cons (pop plist) char) results)))))
|
||||||
(dolist (mode (doom-enlist modes))
|
(dolist (mode (doom-enlist modes))
|
||||||
(setf (alist-get mode +pretty-code-symbols-alist)
|
(setf (alist-get mode +ligatures-extra-alist)
|
||||||
(if-let (old-results (alist-get mode +pretty-code-symbols-alist))
|
(if-let (old-results (alist-get mode +ligatures-extra-alist))
|
||||||
(dolist (cell results old-results)
|
(dolist (cell results old-results)
|
||||||
(setf (alist-get (car cell) old-results) (cdr cell)))
|
(setf (alist-get (car cell) old-results) (cdr cell)))
|
||||||
results))))))
|
results))))))
|
|
@ -1,6 +1,6 @@
|
||||||
;;; ui/pretty-code/config.el -*- lexical-binding: t; -*-
|
;;; ui/ligatures/config.el -*- lexical-binding: t; -*-
|
||||||
|
|
||||||
(defvar +pretty-code-symbols
|
(defvar +ligatures-classes
|
||||||
'(;; org
|
'(;; org
|
||||||
:name "»"
|
:name "»"
|
||||||
:src_block "»"
|
:src_block "»"
|
||||||
|
@ -38,23 +38,13 @@
|
||||||
:tuple "⨂"
|
:tuple "⨂"
|
||||||
:pipe "" ;; FIXME: find a non-private char
|
:pipe "" ;; FIXME: find a non-private char
|
||||||
:dot "•")
|
:dot "•")
|
||||||
"Options plist for `set-pretty-symbols!'.
|
"Options plist for `set-ligatures!'.
|
||||||
|
|
||||||
This should not contain any symbols from the Unicode Private Area! There is no
|
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
|
universal way of getting the correct symbol as that area varies from font to
|
||||||
font.")
|
font.")
|
||||||
|
|
||||||
(defvar +pretty-code-enabled-modes t
|
(defvar +ligatures-composition-alist
|
||||||
"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.")
|
|
||||||
|
|
||||||
(defvar +pretty-code-symbols-alist '((t))
|
|
||||||
"An alist containing a mapping of major modes to its value for
|
|
||||||
`prettify-symbols-alist'.")
|
|
||||||
|
|
||||||
;;; Automatic font-specific ligatures
|
|
||||||
(defvar +prog-ligatures-alist
|
|
||||||
'((?! . "\\(?:!\\(?:==\\|[!=]\\)\\)") ; (regexp-opt '("!!" "!=" "!=="))
|
'((?! . "\\(?:!\\(?:==\\|[!=]\\)\\)") ; (regexp-opt '("!!" "!=" "!=="))
|
||||||
(?# . "\\(?:#\\(?:###?\\|_(\\|[#(:=?[_{]\\)\\)") ; (regexp-opt '("##" "###" "####" "#(" "#:" "#=" "#?" "#[" "#_" "#_(" "#{"))
|
(?# . "\\(?:#\\(?:###?\\|_(\\|[#(:=?[_{]\\)\\)") ; (regexp-opt '("##" "###" "####" "#(" "#:" "#=" "#?" "#[" "#_" "#_(" "#{"))
|
||||||
(?$ . "\\(?:\\$>>?\\)") ; (regexp-opt '("$>" "$>>"))
|
(?$ . "\\(?:\\$>>?\\)") ; (regexp-opt '("$>" "$>>"))
|
||||||
|
@ -83,27 +73,42 @@ besides what is listed.")
|
||||||
(?_ . "\\(?:_\\(?:|?_\\)\\)") ; (regexp-opt '("_|_" "__"))
|
(?_ . "\\(?:_\\(?:|?_\\)\\)") ; (regexp-opt '("_|_" "__"))
|
||||||
(?\( . "\\(?:(\\*\\)") ; (regexp-opt '("(*"))
|
(?\( . "\\(?:(\\*\\)") ; (regexp-opt '("(*"))
|
||||||
(?~ . "\\(?:~\\(?:~>\\|[=>@~-]\\)\\)")) ; (regexp-opt '("~-" "~=" "~>" "~@" "~~" "~~>"))
|
(?~ . "\\(?:~\\(?:~>\\|[=>@~-]\\)\\)")) ; (regexp-opt '("~-" "~=" "~>" "~@" "~~" "~~>"))
|
||||||
"An alist of all ligatures used by `+prog-ligatures-modes'.
|
"An alist of all ligatures used by `+ligatures-extras-in-modes'.
|
||||||
|
|
||||||
The car is the character ASCII number, cdr is a regex which will call
|
The car is the character ASCII number, cdr is a regex which will call
|
||||||
`font-shape-gstring' when matched.
|
`font-shape-gstring' when matched.
|
||||||
|
|
||||||
Because of the underlying code in :ui pretty-code module, the regex should match
|
Because of the underlying code in :ui ligatures module, the regex should match a
|
||||||
a string starting with the character contained in car.
|
string starting with the character contained in car.
|
||||||
|
|
||||||
This variable is used only if you built Emacs with Harfbuzz on a version >= 28")
|
This variable is used only if you built Emacs with Harfbuzz on a version >= 28")
|
||||||
|
|
||||||
(defvar +prog-ligatures-modes '(not org-mode)
|
(defvar +ligatures-extra-alist '((t))
|
||||||
"List of major modes in which ligatures should be enabled.
|
"An alist mapping major modes to `prettify-symbols-alist' values.")
|
||||||
|
|
||||||
If t, enable it everywhere. Fundamental mode, and modes derived from special-mode,
|
(defvar +ligatures-in-modes
|
||||||
comint-mode, eshell-mode and term-mode are *still* excluded.
|
'(not special-mode comint-mode eshell-mode term-mode vterm-mode)
|
||||||
|
"List of major modes where ligatures should be enabled.
|
||||||
|
|
||||||
|
If t, enable it everywhere (except `fundamental-mode').
|
||||||
If the first element is 'not, enable it in any mode besides what is listed.
|
If the first element is 'not, enable it in any mode besides what is listed.
|
||||||
|
If nil, don't enable ligatures anywhere.")
|
||||||
|
|
||||||
If nil, fallback to the prettify-symbols based replacement (add +font features to pretty-code).")
|
(defvar +ligatures-extras-in-modes t
|
||||||
|
"List of major modes where extra ligatures should be enabled.
|
||||||
|
|
||||||
(defun +pretty-code--correct-symbol-bounds (ligature-alist)
|
Extra ligatures are mode-specific substituions, defined in `+ligatures-classes'
|
||||||
|
and assigned with `set-ligatures!'. This variable controls where these are
|
||||||
|
enabled.
|
||||||
|
|
||||||
|
If t, enable it everywhere (except `fundamental-mode').
|
||||||
|
If the first element is 'not, enable it in any mode besides what is listed.
|
||||||
|
If nil, don't enable these extra ligatures anywhere (though it's more
|
||||||
|
efficient to remove the `+extra' flag from the :ui ligatures module instead).")
|
||||||
|
|
||||||
|
(defvar +ligatures--init-font-hook nil)
|
||||||
|
|
||||||
|
(defun +ligatures--correct-symbol-bounds (ligature-alist)
|
||||||
"Prepend non-breaking spaces to a ligature.
|
"Prepend non-breaking spaces to a ligature.
|
||||||
|
|
||||||
This way `compose-region' (called by `prettify-symbols-mode') will use the
|
This way `compose-region' (called by `prettify-symbols-mode') will use the
|
||||||
|
@ -115,86 +120,94 @@ correct width of the symbols instead of the width measured by `char-width'."
|
||||||
len (1- len)))
|
len (1- len)))
|
||||||
(cons (car ligature-alist) acc)))
|
(cons (car ligature-alist) acc)))
|
||||||
|
|
||||||
(defun +pretty-code-init-pretty-symbols-h ()
|
(defun +ligatures--enable-p (modes)
|
||||||
"Enable `prettify-symbols-mode'.
|
"Return t if ligatures should be enabled in this buffer depending on MODES."
|
||||||
|
(unless (eq major-mode 'fundamental-mode)
|
||||||
|
(or (eq modes t)
|
||||||
|
(if (eq (car modes) 'not)
|
||||||
|
(not (apply #'derived-mode-p (cdr modes)))
|
||||||
|
(apply #'derived-mode-p modes)))))
|
||||||
|
|
||||||
If in fundamental-mode, or a mode derived from special, comint, eshell or term
|
(defun +ligatures-init-buffer-h ()
|
||||||
modes, this function does nothing.
|
"Set up ligatures for the current buffer.
|
||||||
|
|
||||||
Otherwise it builds `prettify-code-symbols-alist' according to
|
Extra ligatures are mode-specific substituions, defined in
|
||||||
`+pretty-code-symbols-alist' for the current major-mode."
|
`+ligatures-classes', assigned with `set-ligatures!', and made possible
|
||||||
(unless (or (eq major-mode 'fundamental-mode)
|
with `prettify-symbols-mode'. This variable controls where these are enabled.
|
||||||
(eq (get major-mode 'mode-class) 'special)
|
See `+ligatures-extras-in-modes' to control what major modes this function can
|
||||||
(derived-mode-p 'comint-mode 'eshell-mode 'term-mode))
|
and cannot run in."
|
||||||
(when (or (eq +pretty-code-enabled-modes t)
|
(when after-init-time
|
||||||
(if (eq (car +pretty-code-enabled-modes) 'not)
|
(when (+ligatures--enable-p +ligatures-in-modes)
|
||||||
(not (memq major-mode (cdr +pretty-code-enabled-modes)))
|
(if (boundp '+ligature--composition-table)
|
||||||
(memq major-mode +pretty-code-enabled-modes)))
|
(setq-local composition-function-table +ligature--composition-table)
|
||||||
(setq prettify-symbols-alist
|
(run-hooks '+ligatures--init-font-hook)
|
||||||
(append (cdr (assq major-mode +pretty-code-symbols-alist))
|
(setq +ligatures--init-font-hook nil)))
|
||||||
(default-value 'prettify-symbols-alist)))
|
(when (and (featurep! +extra)
|
||||||
(when prettify-symbols-mode
|
(+ligatures--enable-p +ligatures-extras-in-modes))
|
||||||
(prettify-symbols-mode -1))
|
(prependq! prettify-symbols-alist (alist-get major-mode +ligatures-extra-alist)))
|
||||||
|
(when prettify-symbols-alist
|
||||||
|
(if prettify-symbols-mode (prettify-symbols-mode -1))
|
||||||
(prettify-symbols-mode +1))))
|
(prettify-symbols-mode +1))))
|
||||||
|
|
||||||
(defun +pretty-code-init-ligatures-h ()
|
|
||||||
"Enable ligatures.
|
|
||||||
|
|
||||||
If in fundamental-mode, or a mode derived from special, comint, eshell or term
|
|
||||||
modes, this function does nothing.
|
|
||||||
|
|
||||||
Otherwise it sets the buffer-local composition table to a composition table enhanced with
|
|
||||||
`+prog-ligatures-alist' ligatures regexes."
|
|
||||||
(unless (or (eq major-mode 'fundamental-mode)
|
|
||||||
(eq (get major-mode 'mode-class) 'special)
|
|
||||||
(derived-mode-p 'comint-mode 'eshell-mode 'term-mode))
|
|
||||||
(when (or (eq +prog-ligatures-modes t)
|
|
||||||
(if (eq (car +prog-ligatures-modes) 'not)
|
|
||||||
(not (memq major-mode (cdr +prog-ligatures-modes)))
|
|
||||||
(memq major-mode +prog-ligatures-modes)))
|
|
||||||
(setq-local composition-function-table composition-ligature-table))))
|
|
||||||
|
|
||||||
|
|
||||||
;;
|
;;
|
||||||
;;; Bootstrap
|
;;; Bootstrap
|
||||||
|
|
||||||
(add-hook 'after-change-major-mode-hook #'+pretty-code-init-pretty-symbols-h)
|
|
||||||
|
|
||||||
;;;###package prettify-symbols
|
;;;###package prettify-symbols
|
||||||
;; When you get to the right edge, it goes back to how it normally prints
|
;; When you get to the right edge, it goes back to how it normally prints
|
||||||
(setq prettify-symbols-unprettify-at-point 'right-edge)
|
(setq prettify-symbols-unprettify-at-point 'right-edge)
|
||||||
|
|
||||||
|
(add-hook! 'doom-init-ui-hook :append
|
||||||
|
(defun +ligatures-init-h ()
|
||||||
|
(add-hook 'after-change-major-mode-hook #'+ligatures-init-buffer-h)))
|
||||||
|
|
||||||
(cond
|
(cond
|
||||||
;; The emacs-mac build of Emacs appear to have built-in support for ligatures,
|
;; The emacs-mac build of Emacs appears to have built-in support for ligatures,
|
||||||
;; using the same composition-function-table method
|
;; using the same composition-function-table method
|
||||||
;; https://bitbucket.org/mituharu/emacs-mac/src/26c8fd9920db9d34ae8f78bceaec714230824dac/lisp/term/mac-win.el?at=master#lines-345:805
|
;; https://bitbucket.org/mituharu/emacs-mac/src/26c8fd9920db9d34ae8f78bceaec714230824dac/lisp/term/mac-win.el?at=master#lines-345:805
|
||||||
;; so use that instead if this module is enabled.
|
;; so use that instead if this module is enabled.
|
||||||
((and IS-MAC (fboundp 'mac-auto-operator-composition-mode))
|
((and IS-MAC (fboundp 'mac-auto-operator-composition-mode))
|
||||||
(mac-auto-operator-composition-mode))
|
(add-hook 'doom-init-ui-hook #'mac-auto-operator-composition-mode 'append))
|
||||||
|
|
||||||
;; Harfbuzz and Mac builds do not need font-specific ligature support
|
;; Harfbuzz and Mac builds do not need font-specific ligature support
|
||||||
;; if they are above emacs-27
|
;; if they are above emacs-27.
|
||||||
((and EMACS28+
|
((and EMACS28+
|
||||||
(or (featurep 'ns)
|
(or (featurep 'ns)
|
||||||
(string-match-p "HARFBUZZ" system-configuration-features))
|
(string-match-p "HARFBUZZ" system-configuration-features))
|
||||||
+prog-ligatures-modes
|
(featurep 'composite)) ; Emacs loads `composite' at startup
|
||||||
(require 'composite nil t))
|
(defvar +ligature--composition-table (make-char-table nil))
|
||||||
(defvar composition-ligature-table (make-char-table nil))
|
(add-hook! 'doom-init-ui-hook :append
|
||||||
|
(defun +ligature-init-composition-table-h ()
|
||||||
|
(dolist (char-regexp +ligatures-composition-alist)
|
||||||
|
(set-char-table-range
|
||||||
|
+ligature--composition-table
|
||||||
|
(car char-regexp) `([,(cdr char-regexp) 0 font-shape-gstring])))
|
||||||
|
(set-char-table-parent +ligature--composition-table composition-function-table)
|
||||||
|
(add-hook 'after-change-major-mode-hook #'+ligatures-init-buffer-composition-table-h))))
|
||||||
|
|
||||||
(dolist (char-regexp +prog-ligatures-alist)
|
;; Fallback ligature support for certain, patched fonts. Install them with
|
||||||
(set-char-table-range composition-ligature-table (car char-regexp)
|
;; `+ligatures/install-patched-font'
|
||||||
`([,(cdr char-regexp) 0 font-shape-gstring])))
|
((defmacro +ligatures--def-font (id font-plist &rest alist)
|
||||||
(unless doom-reloading-p
|
(declare (indent 2))
|
||||||
(set-char-table-parent composition-ligature-table composition-function-table))
|
(let ((alist-var (intern (format "+ligatures-%s-font-alist" id)))
|
||||||
|
(setup-fn (intern (format "+ligatures-init-%s-font-h" id))))
|
||||||
|
`(progn
|
||||||
|
(setf (alist-get ',id +ligatures--font-alist) (list ,@font-plist))
|
||||||
|
(defvar ,alist-var ',alist ,(format "Name of the %s ligature font." id))
|
||||||
|
(defun ,setup-fn (&rest _)
|
||||||
|
(cl-destructuring-bind (name &key _url files range)
|
||||||
|
(or (alist-get ',id +ligatures--font-alist)
|
||||||
|
(error "No ligature font called %s" ',id))
|
||||||
|
(when range
|
||||||
|
(set-fontset-font t range name nil 'prepend))
|
||||||
|
(setq-default prettify-symbols-alist
|
||||||
|
(append (default-value 'prettify-symbols-alist)
|
||||||
|
(mapcar #'+ligatures--correct-symbol-bounds ,alist-var)))))
|
||||||
|
(add-hook '+ligatures--init-font-hook #',setup-fn))))
|
||||||
|
|
||||||
(add-hook 'after-change-major-mode-hook #'+pretty-code-init-ligatures-h))
|
(defvar +ligatures--font-alist ())
|
||||||
|
|
||||||
;; Font-specific ligature support
|
(cond ((featurep! +fira) (load! "+fira"))
|
||||||
((featurep! +fira)
|
((featurep! +iosevka) (load! "+iosevka"))
|
||||||
(load! "+fira"))
|
((featurep! +hasklig) (load! "+hasklig"))
|
||||||
((featurep! +iosevka)
|
((featurep! +pragmata-pro) (load! "+pragmata-pro")))))
|
||||||
(load! "+iosevka"))
|
|
||||||
((featurep! +hasklig)
|
|
||||||
(load! "+hasklig"))
|
|
||||||
((featurep! +pragmata-pro)
|
|
||||||
(load! "+pragmata-pro")))
|
|
|
@ -1,127 +0,0 @@
|
||||||
;;; ui/pretty-code/+fira.el -*- lexical-binding: t; -*-
|
|
||||||
|
|
||||||
(defvar +pretty-code-fira-code-font-name "Fira Code Symbol"
|
|
||||||
"Name of the fira code ligature font.")
|
|
||||||
|
|
||||||
(defvar +pretty-code-fira-code-font-ligatures
|
|
||||||
'(("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)
|
|
||||||
("x" . #Xe16b)
|
|
||||||
(":" . #Xe16c)
|
|
||||||
("+" . #Xe16d)
|
|
||||||
("+" . #Xe16e)
|
|
||||||
("*" . #Xe16f)))
|
|
||||||
|
|
||||||
(defun +pretty-code-setup-fira-ligatures-h ()
|
|
||||||
(set-fontset-font t '(#Xe100 . #Xe16f) +pretty-code-fira-code-font-name nil 'prepend)
|
|
||||||
(setq-default prettify-symbols-alist
|
|
||||||
(append prettify-symbols-alist
|
|
||||||
(mapcar #'+pretty-code--correct-symbol-bounds
|
|
||||||
+pretty-code-fira-code-font-ligatures))))
|
|
||||||
|
|
||||||
(add-hook 'doom-init-ui-hook #'+pretty-code-setup-fira-ligatures-h)
|
|
|
@ -1,58 +0,0 @@
|
||||||
;;; ui/pretty-code/+hasklig.el -*- lexical-binding: t; -*-
|
|
||||||
|
|
||||||
(defvar +pretty-code-hasklig-font-name "Hasklig"
|
|
||||||
"Name of the hasklig ligature font.")
|
|
||||||
|
|
||||||
(defvar +pretty-code-hasklig-font-ligatures
|
|
||||||
'(("&&" . #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)))
|
|
||||||
|
|
||||||
|
|
||||||
(defun +pretty-code-setup-hasklig-ligatures-h ()
|
|
||||||
(set-fontset-font t '(#Xe100 . #Xe129) +pretty-code-hasklig-font-name nil 'prepend)
|
|
||||||
(setq-default prettify-symbols-alist
|
|
||||||
(append prettify-symbols-alist
|
|
||||||
(mapcar #'+pretty-code--correct-symbol-bounds
|
|
||||||
+pretty-code-hasklig-font-ligatures))))
|
|
||||||
|
|
||||||
(add-hook 'doom-init-ui-hook #'+pretty-code-setup-hasklig-ligatures-h)
|
|
|
@ -1,232 +0,0 @@
|
||||||
;;; ui/pretty-code/+iosevka.el -*- lexical-binding: t; -*-
|
|
||||||
|
|
||||||
(defvar +pretty-code-iosevka-font-name "Iosevka"
|
|
||||||
"Name of the iosevka ligature font.")
|
|
||||||
|
|
||||||
(defvar +pretty-code-iosevka-font-ligatures
|
|
||||||
'(;; Double-ended hyphen arrows
|
|
||||||
("<->" . #Xe100)
|
|
||||||
("<-->" . #Xe101)
|
|
||||||
("<--->" . #Xe102)
|
|
||||||
("<---->" . #Xe103)
|
|
||||||
("<----->" . #Xe104)
|
|
||||||
;; Double-ended equals arrows
|
|
||||||
("<=>" . #Xe105)
|
|
||||||
("<==>" . #Xe106)
|
|
||||||
("<===>" . #Xe107)
|
|
||||||
("<====>" . #Xe108)
|
|
||||||
("<=====>" . #Xe109)
|
|
||||||
;; Double-ended asterisk operators
|
|
||||||
("<**>" . #Xe10a)
|
|
||||||
("<***>" . #Xe10b)
|
|
||||||
("<****>" . #Xe10c)
|
|
||||||
("<*****>" . #Xe10d)
|
|
||||||
;; HTML comments
|
|
||||||
("<!--" . #Xe10e)
|
|
||||||
("<!---" . #Xe10f)
|
|
||||||
;; Three-char ops with discards
|
|
||||||
("<$" . #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)
|
|
||||||
;; Colons
|
|
||||||
("::" . #Xe146)
|
|
||||||
(":::" . #Xe147)
|
|
||||||
("::::" . #Xe148)
|
|
||||||
;; Arrow-like operators
|
|
||||||
("->" . #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)
|
|
||||||
("==>=" . #Xe16b)
|
|
||||||
("==>==" . #Xe16c)
|
|
||||||
("==>>" . #Xe16d)
|
|
||||||
("==>>=" . #Xe16e)
|
|
||||||
("==>>==" . #Xe16f)
|
|
||||||
("==>>>" . #Xe170)
|
|
||||||
("==>>>=" . #Xe171)
|
|
||||||
("==>>>==" . #Xe172)
|
|
||||||
(">=" . #Xe173)
|
|
||||||
(">==" . #Xe174)
|
|
||||||
(">>=" . #Xe175)
|
|
||||||
(">>==" . #Xe176)
|
|
||||||
(">>>=" . #Xe177)
|
|
||||||
(">>>==" . #Xe178)
|
|
||||||
("<-" . #Xe179)
|
|
||||||
("-<-" . #Xe17a)
|
|
||||||
("--<-" . #Xe17b)
|
|
||||||
("<<-" . #Xe17c)
|
|
||||||
("-<<-" . #Xe17d)
|
|
||||||
("--<<-" . #Xe17e)
|
|
||||||
("<<<-" . #Xe17f)
|
|
||||||
("-<<<-" . #Xe180)
|
|
||||||
("--<<<-" . #Xe181)
|
|
||||||
("<--" . #Xe182)
|
|
||||||
("-<--" . #Xe183)
|
|
||||||
("--<--" . #Xe184)
|
|
||||||
("<<--" . #Xe185)
|
|
||||||
("-<<--" . #Xe186)
|
|
||||||
("--<<--" . #Xe187)
|
|
||||||
("<<<--" . #Xe188)
|
|
||||||
("-<<<--" . #Xe189)
|
|
||||||
("--<<<--" . #Xe18a)
|
|
||||||
("-<" . #Xe18b)
|
|
||||||
("--<" . #Xe18c)
|
|
||||||
("-<<" . #Xe18d)
|
|
||||||
("--<<" . #Xe18e)
|
|
||||||
("-<<<" . #Xe18f)
|
|
||||||
("--<<<" . #Xe190)
|
|
||||||
("<=" . #Xe191)
|
|
||||||
("=<=" . #Xe192)
|
|
||||||
("==<=" . #Xe193)
|
|
||||||
("<<=" . #Xe194)
|
|
||||||
("=<<=" . #Xe195)
|
|
||||||
("==<<=" . #Xe196)
|
|
||||||
("<<<=" . #Xe197)
|
|
||||||
("=<<<=" . #Xe198)
|
|
||||||
("==<<<=" . #Xe199)
|
|
||||||
("<==" . #Xe19a)
|
|
||||||
("=<==" . #Xe19b)
|
|
||||||
("==<==" . #Xe19c)
|
|
||||||
("<<==" . #Xe19d)
|
|
||||||
("=<<==" . #Xe19e)
|
|
||||||
("==<<==" . #Xe19f)
|
|
||||||
("<<<==" . #Xe1a0)
|
|
||||||
("=<<<==" . #Xe1a1)
|
|
||||||
("==<<<==" . #Xe1a2)
|
|
||||||
("=<" . #Xe1a3)
|
|
||||||
("==<" . #Xe1a4)
|
|
||||||
("=<<" . #Xe1a5)
|
|
||||||
("==<<" . #Xe1a6)
|
|
||||||
("=<<<" . #Xe1a7)
|
|
||||||
("==<<<" . #Xe1a8)
|
|
||||||
;; Monadic operators
|
|
||||||
(">=>" . #Xe1a9)
|
|
||||||
(">->" . #Xe1aa)
|
|
||||||
(">-->" . #Xe1ab)
|
|
||||||
(">==>" . #Xe1ac)
|
|
||||||
("<=<" . #Xe1ad)
|
|
||||||
("<-<" . #Xe1ae)
|
|
||||||
("<--<" . #Xe1af)
|
|
||||||
("<==<" . #Xe1b0)
|
|
||||||
;; Composition operators
|
|
||||||
(">>" . #Xe1b1)
|
|
||||||
(">>>" . #Xe1b2)
|
|
||||||
("<<" . #Xe1b3)
|
|
||||||
("<<<" . #Xe1b4)
|
|
||||||
;; Lens operators
|
|
||||||
(":+" . #Xe1b5)
|
|
||||||
(":-" . #Xe1b6)
|
|
||||||
(":=" . #Xe1b7)
|
|
||||||
("+:" . #Xe1b8)
|
|
||||||
("-:" . #Xe1b9)
|
|
||||||
("=:" . #Xe1ba)
|
|
||||||
("=^" . #Xe1bb)
|
|
||||||
("=+" . #Xe1bc)
|
|
||||||
("=-" . #Xe1bd)
|
|
||||||
("=*" . #Xe1be)
|
|
||||||
("=/" . #Xe1bf)
|
|
||||||
("=%" . #Xe1c0)
|
|
||||||
("^=" . #Xe1c1)
|
|
||||||
("+=" . #Xe1c2)
|
|
||||||
("-=" . #Xe1c3)
|
|
||||||
("*=" . #Xe1c4)
|
|
||||||
("/=" . #Xe1c5)
|
|
||||||
("%=" . #Xe1c6)
|
|
||||||
;; Logical
|
|
||||||
("/\\" . #Xe1c7)
|
|
||||||
("\\/" . #Xe1c8)
|
|
||||||
;; Semigroup/monoid operators
|
|
||||||
("<>" . #Xe1c9)
|
|
||||||
("<+" . #Xe1ca)
|
|
||||||
("<+>" . #Xe1cb)
|
|
||||||
("+>" . #Xe1cc))
|
|
||||||
"Defines the character mappings for ligatures for Iosevka.")
|
|
||||||
|
|
||||||
(defun +pretty-code-setup-iosevka-ligatures-h ()
|
|
||||||
(set-fontset-font t '(#Xe100 . #Xe1cc) +pretty-code-iosevka-font-name nil 'prepend)
|
|
||||||
(setq-default prettify-symbols-alist
|
|
||||||
(append prettify-symbols-alist
|
|
||||||
+pretty-code-iosevka-font-ligatures)))
|
|
||||||
|
|
||||||
(add-hook 'doom-init-ui-hook #'+pretty-code-setup-iosevka-ligatures-h)
|
|
|
@ -1,259 +0,0 @@
|
||||||
;;; 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
|
|
||||||
'(("[ERROR]" . #XE2C0)
|
|
||||||
("[DEBUG]" . #XE2C1)
|
|
||||||
("[INFO]" . #XE2C2)
|
|
||||||
("[WARN]" . #XE2C3)
|
|
||||||
("[WARNING]" . #XE2C4)
|
|
||||||
("[ERR]" . #XE2C5)
|
|
||||||
("[FATAL]" . #XE2C6)
|
|
||||||
("[TRACE]" . #XE2C7)
|
|
||||||
("[FIXME]" . #XE2C8)
|
|
||||||
("[TODO]" . #XE2C9)
|
|
||||||
("[BUG]" . #XE2CA)
|
|
||||||
("[NOTE]" . #XE2CB)
|
|
||||||
("[HACK]" . #XE2CC)
|
|
||||||
("[MARK]" . #XE2CD)
|
|
||||||
("# ERROR" . #XE2F0)
|
|
||||||
("# DEBUG" . #XE2F1)
|
|
||||||
("# INFO" . #XE2F2)
|
|
||||||
("# WARN" . #XE2F3)
|
|
||||||
("# WARNING" . #XE2F4)
|
|
||||||
("# ERR" . #XE2F5)
|
|
||||||
("# FATAL" . #XE2F6)
|
|
||||||
("# TRACE" . #XE2F7)
|
|
||||||
("# FIXME" . #XE2F8)
|
|
||||||
("# TODO" . #XE2F9)
|
|
||||||
("# BUG" . #XE2FA)
|
|
||||||
("# NOTE" . #XE2FB)
|
|
||||||
("# HACK" . #XE2FC)
|
|
||||||
("# MARK" . #XE2FD)
|
|
||||||
("// ERROR" . #XE2E0)
|
|
||||||
("// DEBUG" . #XE2E1)
|
|
||||||
("// INFO" . #XE2E2)
|
|
||||||
("// WARN" . #XE2E3)
|
|
||||||
("// WARNING". #XE2E4)
|
|
||||||
("// ERR" . #XE2E5)
|
|
||||||
("// FATAL" . #XE2E6)
|
|
||||||
("// TRACE" . #XE2E7)
|
|
||||||
("// FIXME" . #XE2E8)
|
|
||||||
("// TODO" . #XE2E9)
|
|
||||||
("// BUG" . #XE2EA)
|
|
||||||
("// NOTE" . #XE2EB)
|
|
||||||
("// HACK" . #XE2EC)
|
|
||||||
("// MARK" . #XE2ED)
|
|
||||||
("!!" . #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)
|
|
||||||
("<!" . #XE9E3)
|
|
||||||
("<@" . #XE9E4)
|
|
||||||
("<#" . #XE9E5)
|
|
||||||
("<%" . #XE9E6)
|
|
||||||
("<^" . #XE9E7)
|
|
||||||
("<&" . #XE9E8)
|
|
||||||
("<?" . #XE9E9)
|
|
||||||
("<." . #XE9EA)
|
|
||||||
("</" . #XE9EB)
|
|
||||||
("<\\" . #XE9EC)
|
|
||||||
("<\"" . #XE9ED)
|
|
||||||
("<:" . #XE9EE)
|
|
||||||
("<->" . #XE9EF)
|
|
||||||
("<!--" . #XE9F0)
|
|
||||||
("<--" . #XE9F1)
|
|
||||||
("<~<" . #XE9F2)
|
|
||||||
("<==>" . #XE9F3)
|
|
||||||
("<|-" . #XE9F4)
|
|
||||||
("<<|" . #XE9F5)
|
|
||||||
("<-<" . #XE9F7)
|
|
||||||
("<-->" . #XE9F8)
|
|
||||||
("<<==" . #XE9F9)
|
|
||||||
("<==" . #XE9FA)
|
|
||||||
("=<<" . #XEA00)
|
|
||||||
("==" . #XEA01)
|
|
||||||
("===" . #XEA02)
|
|
||||||
("==>" . #XEA03)
|
|
||||||
("=>" . #XEA04)
|
|
||||||
("=~" . #XEA05)
|
|
||||||
("=>>" . #XEA06)
|
|
||||||
("=/=" . #XEA07)
|
|
||||||
("=~=" . #XEA08)
|
|
||||||
("==>>" . #XEA09)
|
|
||||||
("≡≡" . #XEA10)
|
|
||||||
("≡≡≡" . #XEA11)
|
|
||||||
("≡:≡" . #XEA12)
|
|
||||||
(">-" . #XEA20)
|
|
||||||
(">=" . #XEA21)
|
|
||||||
(">>" . #XEA22)
|
|
||||||
(">>-" . #XEA23)
|
|
||||||
(">>=" . #XEA24)
|
|
||||||
(">>>" . #XEA25)
|
|
||||||
(">=>" . #XEA26)
|
|
||||||
(">>^" . #XEA27)
|
|
||||||
(">>|" . #XEA28)
|
|
||||||
(">!=" . #XEA29)
|
|
||||||
(">->" . #XEA2A)
|
|
||||||
("??" . #XEA40)
|
|
||||||
("?~" . #XEA41)
|
|
||||||
("?=" . #XEA42)
|
|
||||||
("?>" . #XEA43)
|
|
||||||
("???" . #XEA44)
|
|
||||||
("?." . #XEA45)
|
|
||||||
("^=" . #XEA48)
|
|
||||||
("^." . #XEA49)
|
|
||||||
("^?" . #XEA4A)
|
|
||||||
("^.." . #XEA4B)
|
|
||||||
("^<<" . #XEA4C)
|
|
||||||
("^>>" . #XEA4D)
|
|
||||||
("^>" . #XEA4E)
|
|
||||||
("\\\\" . #XEA50)
|
|
||||||
("\\>" . #XEA51)
|
|
||||||
("\\/-" . #XEA52)
|
|
||||||
("@>" . #XEA57)
|
|
||||||
("|=" . #XEA60)
|
|
||||||
("||" . #XEA61)
|
|
||||||
("|>" . #XEA62)
|
|
||||||
("|||" . #XEA63)
|
|
||||||
("|+|" . #XEA64)
|
|
||||||
("|->" . #XEA65)
|
|
||||||
("|-->" . #XEA66)
|
|
||||||
("|=>" . #XEA67)
|
|
||||||
("|==>" . #XEA68)
|
|
||||||
("|>-" . #XEA69)
|
|
||||||
("|<<" . #XEA6A)
|
|
||||||
("||>" . #XEA6B)
|
|
||||||
("|>>" . #XEA6C)
|
|
||||||
("|-" . #XEA6D)
|
|
||||||
("||-" . #XEA6E)
|
|
||||||
("~=" . #XEA70)
|
|
||||||
("~>" . #XEA71)
|
|
||||||
("~~>" . #XEA72)
|
|
||||||
("~>>" . #XEA73)
|
|
||||||
("[[" . #XEA80)
|
|
||||||
("]]" . #XEA81)
|
|
||||||
("\">" . #XEA90)
|
|
||||||
("_|_" . #XEA97))
|
|
||||||
"Defines the character mappings for ligatures for Pragmata Pro.")
|
|
||||||
|
|
||||||
(defun +pretty-code-setup-pragmata-pro-ligatures-h ()
|
|
||||||
(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-h)
|
|
|
@ -1,98 +0,0 @@
|
||||||
;;; ui/pretty-code/autoload/install.el -*- lexical-binding: t; -*-
|
|
||||||
;;;###if (or (featurep! +fira) (featurep! +hasklig) (featurep! +iosevka))
|
|
||||||
|
|
||||||
(defvar +pretty-code-font-alist
|
|
||||||
'(("Fira Code"
|
|
||||||
:url "https://github.com/tonsky/FiraCode/raw/13234c0/distr/ttf/%s"
|
|
||||||
:files ("FiraCode-Bold.ttf"
|
|
||||||
"FiraCode-Light.ttf"
|
|
||||||
"FiraCode-Medium.ttf"
|
|
||||||
"FiraCode-Regular.ttf"
|
|
||||||
"FiraCode-Retina.ttf"))
|
|
||||||
("Hasklig"
|
|
||||||
:url "https://github.com/jsravn/hasklig-emacs/raw/33354a3/%s"
|
|
||||||
:files ("Hasklig-Black.otf"
|
|
||||||
"Hasklig-BlackIt.otf"
|
|
||||||
"Hasklig-Bold.otf"
|
|
||||||
"Hasklig-BoldIt.otf"
|
|
||||||
"Hasklig-ExtraLight.otf"
|
|
||||||
"Hasklig-ExtraLightIt.otf"
|
|
||||||
"Hasklig-It.otf"
|
|
||||||
"Hasklig-Light.otf"
|
|
||||||
"Hasklig-LightIt.otf"
|
|
||||||
"Hasklig-Medium.otf"
|
|
||||||
"Hasklig-MediumIt.otf"
|
|
||||||
"Hasklig-Regular.otf"
|
|
||||||
"Hasklig-Semibold.otf"
|
|
||||||
"Hasklig-SemiboldIt.otf"))
|
|
||||||
("Iosevka"
|
|
||||||
:url "https://github.com/jsravn/iosevka-emacs/raw/20fc2c4/%s"
|
|
||||||
:files ("iosevka-custom-lightoblique.ttf"
|
|
||||||
"iosevka-custom-thinoblique.ttf"
|
|
||||||
"iosevka-custom-mediumitalic.ttf"
|
|
||||||
"iosevka-custom-light.ttf"
|
|
||||||
"iosevka-custom-heavy.ttf"
|
|
||||||
"iosevka-custom-bolditalic.ttf"
|
|
||||||
"iosevka-custom-bold.ttf"
|
|
||||||
"iosevka-custom-lightitalic.ttf"
|
|
||||||
"iosevka-custom-thin.ttf"
|
|
||||||
"iosevka-custom-extralight.ttf"
|
|
||||||
"iosevka-custom-oblique.ttf"
|
|
||||||
"iosevka-custom-italic.ttf"
|
|
||||||
"iosevka-custom-heavyoblique.ttf"
|
|
||||||
"iosevka-custom-heavyitalic.ttf"
|
|
||||||
"iosevka-custom-extralightitalic.ttf"
|
|
||||||
"iosevka-custom-thinitalic.ttf"
|
|
||||||
"iosevka-custom-medium.ttf"
|
|
||||||
"iosevka-custom-mediumoblique.ttf"
|
|
||||||
"iosevka-custom-extralightoblique.ttf"
|
|
||||||
"iosevka-custom-boldoblique.ttf"
|
|
||||||
"iosevka-custom-regular.ttf")))
|
|
||||||
"An alist of font metadata for `+pretty-code/install-font'.")
|
|
||||||
|
|
||||||
(defun +pretty-code--install-font (prefix name url-format fonts-alist &optional extra-fonts)
|
|
||||||
"Install fonts to the local system.
|
|
||||||
|
|
||||||
If PREFIX is nil, will prompt whether or not to download. NAME is informational
|
|
||||||
only. URL-FORMAT is a format string that should be a url and have a single %s,
|
|
||||||
which is expanded for each font in FONTS-ALIST. FONTS-ALIST should be the
|
|
||||||
filename of each font. It is used as the source and destination filename."
|
|
||||||
(unless (or prefix
|
|
||||||
(yes-or-no-p
|
|
||||||
(format "This will download and install the %s fonts, continue?"
|
|
||||||
name)))
|
|
||||||
(user-error "Aborted"))
|
|
||||||
(let* ((font-dest
|
|
||||||
(cond (IS-LINUX
|
|
||||||
(expand-file-name
|
|
||||||
"fonts/" (or (getenv "XDG_DATA_HOME")
|
|
||||||
"~/.local/share")))
|
|
||||||
(IS-MAC
|
|
||||||
(expand-file-name "~/Library/Fonts/"))))
|
|
||||||
(known-dest-p (stringp font-dest))
|
|
||||||
(font-dest (or font-dest (read-directory-name "Font installation directory: " "~/"))))
|
|
||||||
(unless (file-directory-p font-dest)
|
|
||||||
(mkdir font-dest t))
|
|
||||||
(dolist (font fonts-alist)
|
|
||||||
(url-copy-file (format url-format font)
|
|
||||||
(expand-file-name font font-dest)
|
|
||||||
t))
|
|
||||||
(when known-dest-p
|
|
||||||
(message "Font downloaded, updating font cache... <fc-cache -f -v> ")
|
|
||||||
(shell-command-to-string "fc-cache -f -v"))
|
|
||||||
(message "Successfully %s `%s' fonts to `%s'!"
|
|
||||||
(if known-dest-p "installed" "downloaded")
|
|
||||||
name font-dest)))
|
|
||||||
|
|
||||||
;;;###autoload
|
|
||||||
(defun +pretty-code/install-patched-font (font-name &optional prefix)
|
|
||||||
"Install FONT-NAME on your system.
|
|
||||||
When PREFIX is non-nil, ignore the prompt and just install it."
|
|
||||||
(interactive
|
|
||||||
(list (completing-read
|
|
||||||
"Install font: "
|
|
||||||
(mapcar #'car +pretty-code-font-alist))))
|
|
||||||
(if-let (font-files (cdr (assoc font-name +pretty-code-font-alist)))
|
|
||||||
(cl-destructuring-bind (&key url files) font-files
|
|
||||||
(+pretty-code--install-font prefix font-name url files))
|
|
||||||
(user-error "%S is not a valid font")))
|
|
Loading…
Add table
Add a link
Reference in a new issue