doomemacs/modules/ui/unicode/README.org
Henrik Lissner 6f40ad55f5
docs: discourage after! and use-package! use
There's little reason for users to use these macros in their private
configs over plain ol' `with-eval-after-load` and `use-package`, unless
they're writing their own modules.

It's my fault for signal boosting them in documentation and whenever I'm
asked for help, because beginners now believe they are somehow
required for Doom to work correctly (there are guides out there
telling beginners that migrating to Doom involves replacing all
instances of `with-eval-after-load` and `use-package` in their
pre-existing configs with `after!` and `use-package!` -- which was never
true).

What's more, I plan to replace `use-package`, internally, so the
`use-package!` macro won't exist for much longer.
2026-02-09 04:29:47 -05: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 ~(with-eval-after-load '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
(with-eval-after-load '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
(with-eval-after-load '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