Alexander-Miller/treemacs@a6f9e9f1ce -> Alexander-Miller/treemacs@63e2bc207a Silex/docker.el@9bcefbe54d -> Silex/docker.el@4fc69969b1 akermu/emacs-libvterm@2b1392cb2b -> akermu/emacs-libvterm@2681120b77 bdarcus/bibtex-actions@6e3a194c3a -> bdarcus/bibtex-actions@08c6ca0e5b dash-docs-el/dash-docs@dafc8fc9f1 -> dash-docs-el/dash-docs@29848b6b34 dgutov/diff-hl@992559f98a -> dgutov/diff-hl@40c89a7b0d dimitri/switch-window@2801d9b3a9 -> dimitri/switch-window@8d9fe251d8 editorconfig/editorconfig-emacs@e10fa22b13 -> editorconfig/editorconfig-emacs@2ab86dc9a8 ema2159/centaur-tabs@9c7c936e4e -> ema2159/centaur-tabs@8b4249c405 emacs-circe/circe@d6f1fa1864 -> emacs-circe/circe@77e16de3b9 emacs-lsp/lsp-treemacs@905cc74726 -> emacs-lsp/lsp-treemacs@d82df44d63 emacsorphanage/osx-trash@0f1dc052d0 -> emacsorphanage/osx-trash@af74a2055a emacsorphanage/quickrun@35e91f4b6c -> emacsorphanage/quickrun@78317951cd flycheck/flycheck@21d52264aa -> flycheck/flycheck@784f184cdd hlissner/emacs-doom-themes@9e2680b918 -> hlissner/emacs-doom-themes@65fb964f36 https://git.savannah.gnu.org/git/emms.git@6e0aaaf4c559 -> https://git.savannah.gnu.org/git/emms.git@c42fab572846 ideasman42/emacs-spell-fu@1abcb5594e -> ideasman42/emacs-spell-fu@10823ae58f ideasman42/emacs-undo-fu@e0ad06b5ef -> ideasman42/emacs-undo-fu@34b27c01da joostkremers/writeroom-mode@b648b34017 -> joostkremers/writeroom-mode@7f4ec92404 kidd/org-gcal.el@4c2616a4f8 -> kidd/org-gcal.el@80e6f9501f magnars/expand-region.el@4b8322774d -> magnars/expand-region.el@95a773bd8f millejoh/emacs-ipython-notebook@09af85821e -> millejoh/emacs-ipython-notebook@0600c286bd mohkale/consult-eglot@a6aeb6fa07 -> mohkale/consult-eglot@28a09cc839 noctuid/link-hint.el@09ba5727d8 -> noctuid/link-hint.el@d3c5bacc9c rolandwalker/nav-flash@55786c9582 -> rolandwalker/nav-flash@2e31f32085 skeeto/elfeed@243add9e74 -> skeeto/elfeed@162d7d545e szermatt/emacs-bash-completion@65e54c6f9c -> szermatt/emacs-bash-completion@c5eaeed156 tarsius/hl-todo@5ac0076cfe -> tarsius/hl-todo@42f744ffb5 tecosaur/emacs-everywhere@64ba2e3f30 -> tecosaur/emacs-everywhere@da88fa2d04 tkf/emacs-request@f3a5b4352e -> tkf/emacs-request@2b68b3ca54 tmalsburg/helm-bibtex@a0d32ab167 -> tmalsburg/helm-bibtex@b85662081d yoshiki/yaml-mode@3a57058468 -> yoshiki/yaml-mode@63b637f846 yqrashawn/fd-dired@c223aee30a -> yqrashawn/fd-dired@458464771b
checkers/spell
Description
This modules provides spellchecking powered by aspell
, hunspell
or enchant
.
Spellcheck is automatically loaded in many text-mode
derivatives, which
includes org-mode
, markdown-mode
, the Git Commit buffer (from magit),
mu4e-compose-mode
, and others.
Maintainers
This module has no dedicated maintainers.
Module Flags
+flyspell
Useflyspell
instead ofspell-fu
. It's significantly slower, but supports multiple languages and dictionaries.+aspell
Useaspell
as a backend for correcting words.+hunspell
Usehunspell
as a backend for correcting words.+enchant
Useenchant-2
as a backend for correcting words.+everywhere
Spell check in programming modes as well (in comments).
Plugins
-
if
+flyspell
- flyspell-correct
- flyspell-correct-ivy (
completion/ivy
) - flyspell-correct-helm (
completion/helm
) - flyspell-correct-popup (if neither
completion/ivy
,completion/helm
orcompletion/vertico
) - flyspell-lazy
-
else
Prerequisites
This module requires one of aspell
, hunspell
or enchant-2
installed on your system and in your PATH
.
They also need dictionaries for your language(s).
If you are not using
+flyspell
, you will need aspell (and a dictionary) installed whether or not you have+hunspell
or+enchant
enabled. This is becausespell-fu
does not support generating the word list with anything other thanaspell
yet.
Aspell
- Ubuntu:
apt-get install aspell aspell-en
- macOS:
brew install aspell
- Arch Linux:
pacman -S aspell aspell-en
-
NixOS:
{ environment.systemPackages = with pkgs; [ (aspellWithDicts (dicts: with dicts; [ en en-computers en-science ])) ]; }
Hunspell
- Ubuntu:
apt-get install hunspell
- macOS:
brew install hunspell
- Arch Linux:
pacman -S hunspell
-
NixOS:
{ environment.systemPackages = with pkgs; [ hunspell ]; }
Enchant
- Ubuntu:
apt-get install enchant-2
- macOS:
brew install enchant
- Arch Linux:
pacman -S enchant
-
NixOS:
{ environment.systemPackages = with pkgs; [ enchant ]; }
Enchant is just a wrapper for other spelling libraries and you will need to have at least one of the supported backends installed as well.
Features
- Spell checking and correction using
aspell
,hunspell
orenchant
. - Ignores source code inside org or markdown files.
- Lazily spellchecking recent changes only when idle.
- Choosing suggestions using completion interfaces (
ivy
orhelm
).
When using +everywhere
, spell checking is performed for as many major modes as
possible, and not only text-mode
derivatives. e.g. in comments for programming
major modes.
Configuration
Dictionary is set by ispell-dictionary
variable. Can be changed locally with
the function ispell-change-dictionary
.
Changing how quickly spell-fu spellchecks after changes
Spell-fu users
Adjust spell-fu-idle-delay
to change how long Emacs waits to spellcheck after
recent changes.
(after! spell-fu
(setq spell-fu-idle-delay 0.5)) ; default is 0.25
Flyspell users
Lazy spellcheck is provided by flyspell-lazy
package.
flyspell-lazy-idle-seconds
sets how many idle seconds until spellchecking
recent changes (default as 1), while flyspell-lazy-window-idle-seconds
sets
how many seconds until the whole window is spellchecked (default as 3).
(after! flyspell
(setq flyspell-lazy-idle-seconds 2))
Reducing false positives by disabling spelling on certain faces
Spell-fu users
Users can exclude what faces to preform spellchecking on by adjusting
+spell-excluded-faces-alist
in a buffer-local hook:
(setf (alist-get 'markdown-mode +spell-excluded-faces-alist)
'(markdown-code-face
markdown-reference-face
markdown-link-face
markdown-url-face
markdown-markup-face
markdown-html-attr-value-face
markdown-html-attr-name-face
markdown-html-tag-name-face))
Flyspell users
Flyspell will run a series of predicate functions to determine if a word should be spell checked. You can add your own with set-flyspell-predicate!
:
(set-flyspell-predicate! '(markdown-mode gfm-mode)
#'+markdown-flyspell-word-p)
Flyspell predicates take no arguments and must return a boolean to determine if the word at point should be spell checked. For example:
(defun +markdown-flyspell-word-p ()
"Return t if point is on a word that should be spell checked.
Return nil if on a link url, markup, html, or references."
(let ((faces (doom-enlist (get-text-property (point) 'face))))
(or (and (memq 'font-lock-comment-face faces)
(memq 'markdown-code-face faces))
(not (cl-loop with unsafe-faces = '(markdown-reference-face
markdown-url-face
markdown-markup-face
markdown-comment-face
markdown-html-attr-name-face
markdown-html-attr-value-face
markdown-html-tag-name-face
markdown-code-face)
for face in faces
if (memq face unsafe-faces)
return t)))))
Adding or removing words to your personal dictionary
Use M-x +spell/add-word
and M-x +spell/remove-word
to whitelist words that
you know are not misspellings. For evil users these are bound to zg
and zw
,
respectively. +flyspell
users can also add/remove words from the
flyspell-correct
popup interface (there will be extra options on the list of
corrections for "save word to dictionary").