My Technical Notes

Tuesday, 15 March 2016

How to Install Aspell on Windows for Emacs Spell-Checking

Installing Aspell for Windows

From, first download a (badly outdated, from 2002) installer from Aspell and install it as you normally would any other installer.

Installing Aspell Dictionary

From the same page (, download the dictionary for English. This is an executable. The way it works is you first run it on the command-line, which will create a `TmpInstall` directory, in which you have the setup file `setup-Aspell-en-0.50-2.exe`, which when installed, will create `data` and `dict` directories under `C:\Program Files (x86)\Aspell\ `.

Then running `aspell.exe dump dicts` will given us:


Configuring Emacs

Emacs needs to be told where the Aspell executable (or DLL) is, in addition to the language. Put this in the `init.el`:

(add-to-list 'exec-path "C:/Program Files (x86)/Aspell/bin/")
(setq ispell-program-name "aspell")
(require 'ispell)
(setq ispell-dictionary "british")

To verify that `british` is a valid value for `ispell-dictionary`, we do

M-x ispell-change-dictionary <enter> <tab> <tab>
(tab twice) which will list all the allowed options.

Using Ispell (Aspell) within Emacs

Spell Checking on-the-fly

We first enable fly-spellchecking by using `M-x flyspell-mode`. This will highlight all mis-spelled words.

Then we need to correct a word. If we use `mouse-2` (middle mouse button), it will display a list of suggestions and we can click on one we like. Using `C-h c` (`describe-key-briefly`), tells us that the underlying command is `flyspell-correct-word`.

Alternatively, we can use `C-.` to run `flyspell-auto-correct-word`. Note that each `C-.` will replace it with the next word in the list.

Doing a single pass through

Alternatively we can run it as a single pass-through using `M-x ispell-buffer`. This will pass-through all words that are incorrectly spelled. This seems like the more reliable and faster option of the two.

Creating a personal dictionary file

We don't want our own name to be flagged up. Therefore in the `$env:APPDATA` directory (most likely named `Roaming`), which is also the parent of the `.emacs.d` directory, create a file `.aspell.en.pws` with the following content. The first line acts as a header:

personal_ws-1.1 en 0

This prevents our first and last names from being treated as typos. (Note that there needs to be a newline after the last word in the file.)

Unexpectedly, it did not work, therefore I have also added the following to my `init.el` file to specify the path of the personal dictionary:

(setq ispell-personal-dictionary "~/.aspell.en.pws")


No comments: