Make hunspell work with emacs and german language

emacshunspellspell-checking

I want to make hunspell work with emacs24 and a german dictionary on a ubuntu 13.04-box.

To do so I installed hunspell and hunspell-de and added the following to my .emacs file:

(setq ispell-program-name "hunspell")
(setq ispell-dictionary "deutsch8")

When I open a file in emacs and start flyspell-buffer I get Starting new Ispell process [[hunspell::deutsch8]] but it blocks the emacs buffer (mouse becomes a rotating disk indicating to wait) and works for endless without showing any results. So there must be something wrong with my config.

Without the second line it works, but only for english texts.

So what's the best way to setup hunspell for emacs24 with a german dictionary on ubuntu 13.04? Are there any possible pitfalls?

Best Answer

To check if the dictionary is listed in the path run hunspell -D. It should output something along those lines:

...
/usr/share/hunspell/en_US
/usr/share/hunspell/de_BE
/usr/share/hunspell/de_LU
/usr/share/hunspell/de_DE
...

Next, add your preferred dictionaries to ispell-local-dictionary-alist in your .emacs file

(add-to-list 'ispell-local-dictionary-alist '("deutsch-hunspell"
                                              "[[:alpha:]]"
                                              "[^[:alpha:]]"
                                              "[']"
                                              t
                                              ("-d" "de_DE"); Dictionary file name
                                              nil
                                              iso-8859-1))

(add-to-list 'ispell-local-dictionary-alist '("english-hunspell"
                                              "[[:alpha:]]"
                                              "[^[:alpha:]]"
                                              "[']"
                                              t
                                              ("-d" "en_US")
                                              nil
                                              iso-8859-1))

(setq ispell-program-name "hunspell"          ; Use hunspell to correct mistakes
      ispell-dictionary   "deutsch-hunspell") ; Default dictionary to use

In addition to that you can define a function to switch between the german and english dictionaries and bind it to C-c d for example

(defun switch-dictionary-de-en ()
  "Switch german and english dictionaries."
  (interactive)
  (let* ((dict ispell-current-dictionary)
         (new (if (string= dict "deutsch-hunspell") "english-hunspell"
                   "deutsch-hunspell")))
    (ispell-change-dictionary new)
    (message "Switched dictionary from %s to %s" dict new)))

(global-set-key (kbd "C-c d") 'switch-dictionary-de-en)
Related Question