spacemacs/layers/+checkers/spell-checking
Adam Kruszewski e11f7badc4 Added known-issues, features and multi-dict sections.
Added:
 - Information about incompatibility of vim-empty-lines and spell-checking
inside org-mode.
 - Features section to Description section (to comply with standard).
 - Section how to enable multi-dictionary for hunspell.
2018-01-18 01:22:21 -05:00
..
config.el Happy New Year 2018! 2018-01-04 02:00:25 -05:00
funcs.el Happy New Year 2018! 2018-01-04 02:00:25 -05:00
packages.el Happy New Year 2018! 2018-01-04 02:00:25 -05:00
README.org Added known-issues, features and multi-dict sections. 2018-01-18 01:22:21 -05:00

Spell Checking layer

Description

This layer provides spell checking using Flyspell and auto-dictionary-mode.

Features:

  • Buffer-wide spell checking via external command (ispell, hunspell, aspell)
  • Spell as you type
  • Optional corrections popup controlled with enable-flyspell-auto-completion variable.
  • Auto dictionary mode for some languages.

Install

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.

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).

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)))

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-list. 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:

Language
catalan
classical greek
danish
english
esperanto
french
german
hindi
hungarian
modern greek
norwegian bokmål
norwegian nynorsk
portuguese
romanian
slovak
slovene
spanish
swedish

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 compeled to use hunspell's multi-dictionary mode. For example to enable it for pl_PL and en_GB 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-set-spellchecker-params)
    (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.

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)))

Key Bindings

Key Binding Description
SPC S b flyspell whole buffer
SPC S c flyspell correct
SPC S d change dictionary
SPC S n flyspell goto next error
SPC t S toggle flyspell

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.