
When I'm typing fast, it's easy to make spelling mistakes (as you may have noticed reading Emacs-Fu). It's not so much that I don't know how to write things, but sometimes there seems to be a bit of a disconnect between brain and fingers.
One tool that helps me to make fewer mistakes is automatic spelling checking, and in particular on-the-fly spelling checking. Spell-checking in
emacs is taken care of by the ispell
-package. Traditionally, this was a way
to interface emacs with the ispell
-program on Unix, but nowadays it's often
used with other programs, such as aspell
.
aspell is GNU's intended replacement for ispell
, and has been for a long
time. In the meantime, other spelling checkers have come up; in the Free
Software world, the most prominent one is probably hunspell, which is used by
e.g. Mozilla and OpenOffice. As I said, Emacs supports all of those; I'm using
aspell
, which works well for me. To use aspell
for spelling-checking, I
have the following in my .emacs
:
(setq ispell-program-name "aspell" ispell-extra-args '("--sug-mode=ultra"))
Please consult the aspell
documentation for the details.
You can spell-check your text with ispell-buffer
and friends, which are also
available through the menu (Tools/Spell Checking/...
). This works fine, but
it makes spelling checking a separate step you have to go through and you may
forget. So, I like to do the spelling-checking on-the-fly, that is, while I
am typing. This can be done using flyspell-mode
(you can also use
flyspell-prog-mode
, to do spell checking inside comments in computer
programs, but I find that a bit over the top).
When flyspell-mode
is enabled, it will mark
misspelt
eh misspelled words by painting them in a different color while you are typing --
the common way many word processing programs do it. A common way to enable
flyspell-mode
is to put it the the mode-hook
for the modes where you want
to use it. For example, to enable flyspell-mode
for all your org-mode
buffers, you can add something like the following to your .emacs
:
(add-hook 'org-mode-hook (lambda() (flyspell-mode 1)))
Note, you can use the middle mouse button to get alternatives for a misspelled word.
By default, it uses the English dictionary, but it's easy to switch to another
using M-x ispell-change-dictionary
. To make it easier, I have defined the
C-c N
key binding to activate Dutch-language ("nederlands") spelling
checking, and update the buffer.
(global-set-key (kbd "C-c N") (lambda()(interactive) (ispell-change-dictionary "nederlands") (flyspell-buffer)))
Now, there's another category of mistakes – their-they're-there, its-it's or to-too-two that require a spelling checker that's a bit smarter. There are some free implementations in OpenOffice and Abiword; it'd be interesting to see if those could be integrated with emacs as well.
Now, laugh about the sweet irony of the spelling errors that I failed to notice :)
For grammar checking there is the command line diction program and the emacs mode diction.el.
ReplyDeletethe auto lang mode
ReplyDeletehttp://www.emacswiki.org/emacs/AutoLangMode
checks the text and sets the dict on the fly
Sometimes, flyspell-mumamo-mode works well, e.g. for TeX-mode.
ReplyDeleteNice! I think the org-mode-hook example needs another close paren.
ReplyDelete@oylenshpeegul: thanks, fixed.
ReplyDeleteI like to do the following;
ReplyDeletecat foo.tex | ispell -t -l -W 4 -C -d nederlands | sort | uniq | less
This gives me a list that ispell thinks are wrong. I can then pick out the really misspelt words.
I often write documents with a mix of English and Spanish (such as, changing language every paragraph). Would it be possible to configure aspell so that it looks into two dictionaries in parallel?
ReplyDeleteI assume it already does, given that it has a personal dictionary and the distribution one, so it is only a matter of interface.
Great tip Dirk as usual
ReplyDelete@jyby check out http://www.dur.ac.uk/p.j.heslin/Software/Emacs/Download/flyspell-babel.el
ReplyDelete