Table of Contents

Spell Checking layer

Table of ContentsClose

1. Description

This layer provides spell checking capabilities to Spacemacs.

1.1. Features:

  • Buffer-wide spell checking via external command (ispell, hunspell, aspell) run through Flyspell.
  • Spell as you type
  • Optional correction popups, controlled by enable-flyspell-auto-completion variable.
  • Auto dictionary mode for some languages.

2. Install

2.1. Layer

To use this configuration layer, add it to your ~/.spacemacs. You will need to add spell-checking to the existing dotspacemacs-configuration-layers list in this file.

2.2. Spell Checker Configuration

The built-in Emacs variable that controls which external spell-checking program is used is ispell-program-name, which can be set in your dotspacemacs/user-init function if you do not like the default. It will give priority to aspell if it is installed on your system. Another important variable to be aware of is ispell-dictionary which will control the default dictionary used by ispell-program-name (instead of using this variable you can also use the key binding SPC S d).

2.3. Disabling by default

By default, spell-checking is enabled in all available major modes and may be toggled off with SPC t S. You can default this to off by setting the variable spell-checking-enable-by-default to nil:

(setq-default dotspacemacs-configuration-layers
  '((spell-checking :variables spell-checking-enable-by-default nil)))

2.4. Enabling auto-dictionary-mode

auto-dictionary-mode tries to detect the current language from the buffer content, and activate the corresponding dictionary. You can enable it by setting the variable spell-checking-enable-auto-dictionary to something other than nil:

(setq-default dotspacemacs-configuration-layers
  '((spell-checking :variables spell-checking-enable-auto-dictionary t)))

Some people encountered bugs with auto-dictionary-mode, especially in daemon mode where new emacsclient open directly freezed. If so, no other workaround have been found yet than disabling auto-dictionary-mode completely.

Not all languages are supported by auto-dictionary-mode. The supported languages are listed in the adict-language-list variable, that can be checked with spacemacs/describe-variable. For convenience, here is the list of currently supported language:

classical greek
modern greek
norwegian bokmål
norwegian nynorsk

2.5. Enabling multi-dictionary support with hunspell

If your language is not supported by auto-dictionary feature or you author multi-lingual documents you might be compelled to use hunspell's multi-dictionary mode. For example to enable it for plPL and enGB dictionaries you could put following code in your dotspacemacs/user-config section in your configuration file:

(with-eval-after-load "ispell"
    (setq ispell-program-name "hunspell")
    ;; ispell-set-spellchecker-params has to be called
    ;; before ispell-hunspell-add-multi-dic will work
    (ispell-hunspell-add-multi-dic "pl_PL,en_GB")
    (setq ispell-dictionary "pl_PL,en_GB"))

One caveat is you need quite modern ispell.el for above to work. It's been tested with version coming from Emacs 25.2 repository.

2.6. Enable auto-completion popup

To enable auto-completion popup when the point is idle on a misspelled word set the layer variable enable-flyspell-auto-completion to t:

(setq-default dotspacemacs-configuration-layers
  '((spell-checking :variables enable-flyspell-auto-completion t)))

3. Key bindings

Key binding Description
SPC S a b Add word to dict (buffer)
SPC S a g Add word to dict (global)
SPC S a s Add word to dict (session)
SPC S b Flyspell whole buffer
SPC S r Flyspell region
SPC S c Flyspell correct word before point
SPC S s Flyspell correct word at point
SPC u SPC S c Flyspell correct all errors one by one
SPC S d Change dictionary
SPC S n Flyspell goto next error
SPC t S Toggle flyspell

3.1. Spell Checking Transient-state

Key binding Description
SPC S . b Rerun spell check for the whole buffer
SPC S . r Rerun spell check for the selected region
SPC S . d Change dictionary
SPC S . n Go to next spelling error
SPC S . c Correct word before point
SPC S . s Correct word at point
SPC S . t Toggle spell check
SPC S . q Quit transient state
SPC S . Q Quit transient state and disable flyspell-mode
SPC S . B Add word to dict (buffer)
SPC S . G Add word to dict (global)
SPC S . S Add word to dict (session)

4. Known issues

Vim-empty-lines layer seems incompatible with spell-checking inside org-mode. If you experience "Args out of range" error message when invoking SPC S c inside org-mode buffer then check if you don't have vim-empty-lines layer enabled and disable it.

Author: root

Created: 2024-05-17 Fri 04:17