doomemacs/modules/ui/unicode/README.org
Liam Hupfer 4499ce7b0a refactor: doom-unicode-font -> doom-symbol-font
No font supports all of Unicode or anywhere near it. It’s not even
really possible with current font formats. Therefore, rename
`doom-unicode-font` to `doom-symbol-font`. Only set it as a fallback for
characters in the `symbol` and `mathematical` scripts.
2023-10-07 02:33:45 +02:00

138 lines
7 KiB
Org Mode

#+title: :ui unicode
#+subtitle: Extended unicode support for various languages
#+created: June 08, 2020
#+since: 2.0.0
* Description :unfold:
This module extends Doom's ability to display non-English unicode. It is
primarily useful for non-English Emacs users, for whom Doom's built-in unicode
support in insufficient.
This module relies on the [[https://github.com/rolandwalker/unicode-fonts][unicode-fonts]] package. It tries to setup the default
emacs fontset to cover as many unicode glyphs as possible by scanning all
available glyphs from all available fonts.
When this module is enabled:
- Emacs will prefer to use the ~doom-symbol-font~ font to display non-latin
glyphs if it provides coverage for them.
- The first time you run Emacs a unicode cache will be generated -- this will
take a while!
- The cache will be regenerated every time Emacs is made aware of new fonts or
you change the font configuration e.g. by modifying ~doom-symbol-font~.
- The cache will be stored and should not be regenerated unless font-related
configuration or the versions of relevant packages changes.
** Maintainers
*This module needs a maintainer.* [[doom-contrib-maintainer:][Become a maintainer?]]
** Module flags
/This module has no flags./
** Packages
- [[doom-package:unicode-fonts]]
** Hacks
/No hacks documented for this module./
** TODO Changelog
# This section will be machine generated. Don't edit it by hand.
/This module does not have a changelog yet./
* Installation
[[id:01cffea4-3329-45e2-a892-95a384ab2338][Enable this module in your ~doom!~ block.]]
/This module has no external requirements./
* TODO Usage
#+begin_quote
󱌣 This module has no usage documentation yet. [[doom-contrib-module:][Write some?]]
#+end_quote
* TODO Configuration
#+begin_quote
󱌣 /This module's configuration documentation is incomplete./ [[doom-contrib-module:][Complete it?]]
#+end_quote
The first font that will be analyzed to see if it contains the glyphs of
non-latin characters will be ~doom-symbol-font~:
#+begin_src emacs-lisp
;; in $DOOMDIR/config.el
(setq doom-symbol-font (font-spec :family "JuliaMono"))
#+end_src
If your ~doom-font~ provides good unicode coverage use:
#+begin_src emacs-lisp
;; in $DOOMDIR/config.el
(setq doom-symbol-font doom-font)
#+end_src
If your font does not provide some glyphs, this package will try its best to
find another font that does.
** Getting fonts with good coverage
A list of fonts with good unicode coverage can be found on the page of the
[[https://github.com/rolandwalker/unicode-fonts#minimum-useful-fonts][unicode-fonts]] package.
** Advanced configuration
Consult the [[https://github.com/rolandwalker/unicode-fonts][unicode-fonts]] package documentation for a description of more
advanced configuration. The configuration should be placed, as usual, in
=$DOOMDIR/config.el= wrapped in an ~(after! unicode-fonts)~ block. The variable
~unicode-fonts-blocks~ contains a list of all unicode block names and their
character ranges. The default fonts to search for glyphs are in the variable
~unicode-fonts-block-font-mapping~.
If you want to use the font =Symbola= for =Miscellaneous Symbols= by default
use:
#+begin_src emacs-lisp
;; in $DOOMDIR/config.el
(after! unicode-fonts
(push "Symbola" (cadr (assoc "Miscellaneous Symbols" unicode-fonts-block-font-mapping))))
#+end_src
If you want to redefine several blocks an efficient way would be:
#+begin_src emacs-lisp
(after! unicode-fonts
(dolist (unicode-block '("Mathematical Alphanumeric Symbols"
"Mathematical Operators"
"Miscellaneous Mathematical Symbols-A"
"Miscellaneous Mathematical Symbols-B"
"Miscellaneous Symbols"
"Miscellaneous Symbols and Arrows"
"Miscellaneous Symbols and Pictographs"))
(push "DejaVu Math TeX Gyre" (cadr (assoc unicode-block unicode-fonts-block-font-mapping)))))
#+end_src
You can find a list of fonts available to emacs using ~M-x counsel-fonts~.
* Troubleshooting
[[doom-report:][Report an issue?]]
** TODO Emacs daemon mode ([[doom-ref:][#3328]])
This module may fail to setup fonts when emacs is run in a daemon session.
** Common error: ~void-variable \.\.\.~ ([[doom-ref:][#7164]])
Users for this module may see the error similar to:
#+begin_src
Debugger entered--Lisp error: (void-variable \.\.\.)
(progn (set-fontset-font "fontset-default" '(64256 . 64335) (font-spec :name "Arial Unicode MS:" :registry "iso10646-1")) (set-fontset-font "fontset-default" '(65856 . 65935) (font-spec :name "Apple Symbols:" :registry "iso10646-1")) (set-fontset-font "fontset-default" '(1536 . 1791) (font-spec :name "Courier New:" :registry "iso10646-1")) (set-fontset-font "fontset-default" '(1536 . 1791) (font-spec :name "Geeza Pro:" :registry "iso10646-1") nil 'append) (set-fontset-font "fontset-default" '(1536 . 1791) (font-spec :name "Baghdad:" :registry "iso10646-1") nil 'append) (set-fontset-font "fontset-default" '(1536 . 1791) (font-spec :name "Damascus:" :registry "iso10646-1") nil 'append) (set-fontset-font "fontset-default" '(1536 . 1791) (font-spec :name "Al Bayan:" :registry "iso10646-1") nil 'append) (set-fontset-font "fontset-default" '(1536 . 1791) (font-spec :name "Arial Unicode MS:" :registry "iso10646-1") nil 'append) (set-fontset-font "fontset-default" '(1536 . 1791) (font-spec :name "Nadeem:" :registry "iso10646-1") nil 'append) \.\.\.)
eval((progn (set-fontset-font "fontset-default" '(64256 . 64335) (font-spec :name "Arial Unicode MS:" :registry "iso10646-1")) (set-fontset-font "fontset-default" '(65856 . 65935) (font-spec :name "Apple Symbols:" :registry "iso10646-1")) (set-fontset-font "fontset-default" '(1536 . 1791) (font-spec :name "Courier New:" :registry "iso10646-1")) (set-fontset-font "fontset-default" '(1536 . 1791) (font-spec :name "Geeza Pro:" :registry "iso10646-1") nil 'append) (set-fontset-font "fontset-default" '(1536 . 1791) (font-spec :name "Baghdad:" :registry "iso10646-1") nil 'append) (set-fontset-font "fontset-default" '(1536 . 1791) (font-spec :name "Damascus:" :registry "iso10646-1") nil 'append) (set-fontset-font "fontset-default" '(1536 . 1791) (font-spec :name "Al Bayan:" :registry "iso10646-1") nil 'append) (set-fontset-font "fontset-default" '(1536 . 1791) (font-spec :name "Arial Unicode MS:" :registry "iso10646-1") nil 'append) (set-fontset-font "fontset-default" '(1536 . 1791) (font-spec :name "Nadeem:" :registry "iso10646-1") nil 'append) \.\.\.))
unicode-fonts--setup-1("fontset-default" nil)
unicode-fonts-setup()
#+end_src
This is a known issue with an unidentified cause. See
[[doom-ref:][rolandwalker/unicode-fonts#36]]. A workaround is to delete your
unicode-fonts cache and restart Emacs:
#+begin_src bash
# $EMACSDIR == where you cloned Doom Emacs
rm -f $EMACSDIR/.local/cache/pcache/unicode-fonts
#+end_src
* Frequently asked questions
/This module has no FAQs yet./ [[doom-suggest-faq:][Ask one?]]
* TODO Appendix
#+begin_quote
󱌣 This module has no appendix yet. [[doom-contrib-module:][Write one?]]
#+end_quote