Tasing you for misspelling mispelling
This modules provides spellchecking powered by aspell, hunspell or enchant.
Spellcheck is automatically loaded in many
text-mode derivatives, which
markdown-mode, the Git Commit buffer (from magit),
mu4e-compose-mode, and others.
This module has no dedicated maintainers. Become a maintainer?
1.2. Module flags
- Use aspell as a backend for correcting words.
- Use enchant-2 as a backend for correcting words.
- Spell check in programming modes as well (in comments).
- Use flyspell instead of spell-fu. It’s significantly slower, but supports multiple languages and dictionaries.
- Use hunspell as a backend for correcting words.
No hacks documented for this module.
This module requires one of aspell, hunspell or enchant-2 installed on
your system and in your
$PATH. They also need dictionaries for your
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 because spell-fu does not support generating the word list with anything other than aspell yet.
$ apt-get install enchant-2
$ brew install enchant
- Arch Linux:
$ pacman -S 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.
- Spell checking and correction using aspell, hunspell or enchant.
- Ignores source code inside org or markdown files.
- Lazily spellchecking recent changes only when idle.
- Choosing suggestions using completion interfaces (ivy or helm).
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
Dictionary is set by
ispell-dictionary variable. Can be changed locally with
4.1. Changing how quickly spell-fu spellchecks after changes
4.1.1. Spell-fu users
4.1.2. 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
how many seconds until the whole window is spellchecked (default as 3).
4.2. Reducing false positives by disabling spelling on certain faces
4.2.1. Spell-fu users
Users can exclude what faces to preform spellchecking on by adjusting
+spell-excluded-faces-alist in a buffer-local hook:
4.2.2. 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
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)))))
4.3. Adding or removing words to your personal dictionary
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 z g and z w,
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”).
There are no known problems with this module. Report one?
6. TODO Appendix
This module has no appendix yet. Write one?