Vérification orthographique avec plusieurs dictionnaires

14

Comment puis-je utiliser plusieurs dictionnaires avec le correcteur orthographique Emacs? Plus précisément, je veux utiliser un dictionnaire anglais britannique et un dictionnaire anglais médical en même temps.

Divinenephron
la source
Utilisez-vous flyspell?
PythonNut
Oui, j'utilise flyspell.
Divinenephron
La solution peut utiliser flyspellmais n'est pas obligée. De cette façon, les réponses peuvent être pertinentes pour plus de gens.
Divinenephron le

Réponses:

16

Hunspell peut vérifier l'orthographe avec plusieurs dictionnaires et vous pouvez le configurer pour qu'il fonctionne avec Emacs. C'est ainsi que je le fais sur OS X 10.11, avec Emacs 25.0. Cela ne fonctionnera pas avec les anciens Emacsen.

Installer Hunspell

brew install hunspell

Téléchargez les dictionnaires Hunspell depuis LibreOffice et OpenMedSpel .

cd ~/Downloads/

curl http://extensions.libreoffice.org/extension-center/english-dictionaries/releases/2016.04.01/dict-en.oxt > dict-en.oxt
unzip dict-en.oxt en_GB.aff en_GB.dic

curl -L https://addons.mozilla.org/en-US/firefox/downloads/latest/6526/addon-6526-latest.xpi > openmedspel.xpi
unzip openmedspel.xpi dictionaries/OpenMedSpel.{aff,dic}
mv dictionaries/OpenMedSpel.dic en_US-med.dic
mv dictionaries/OpenMedSpel.aff en_US-med.aff

Mettez les dictionnaires dedans ~/Library/Spelling/.

mv *.aff *.dic ~/Library/Spelling/

Ajoutez ceci à ~/.emacs/init.el:

(with-eval-after-load "ispell"
  (setq ispell-program-name "hunspell")
  (setq ispell-dictionary "en_GB,en_US-med")
  ;; 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 "en_GB,en_US-med"))
Divinenephron
la source
Notez que la fonction ne ispell-hunspell-add-multi-dicsemble pas être présente dans les anciennes versions de ispell.el, même celle d'Emacs 24.5. J'ai dû télécharger le fichier le plus récent sur github.com/emacs-mirror/emacs/blob/master/lisp/textmodes/… et le recompiler en octets pour le faire fonctionner.
xji
J'utilise Emacs 25.0. J'ai ajouté une note à ce sujet ne fonctionnant que sur Emacs> = 25.0.
Divinenephron
J'ai installé Emacs 25. Cependant, étrangement, j'ai rencontré l'erreur suivante: Symbol’s function definition is void: ispell-hunspell-add-multi-dicbien que j'en sois sûr /usr/share/emacs/25.1.50/lisp/textmodes/ispell.elc, la fonction est présente. Une idée de comment cela aurait pu arriver? Merci.
xji
J'ai réalisé qu'il était mon ispell.elen /usr/share/emacs/site-lisp/shadowing le plus récent ispell.eldans Emacs25 ... Voir unix.stackexchange.com/questions/28483/... pour tous ceux qui pourraient être rencontrer le même problème.
xji
2

Supposons que vous ayez déjà téléchargé en_US-med.dic et en_US-med.aff et installé hunspell

Étape 1, exécutez hunspell -Ddans le shell, qui indiquera au répertoire où hunspell recherche les dictionnaires, copiez en_US-med.dic et en_US-med.aff dans ce répertoire.

Étape 2, insérez le code ci-dessous dans ~ / .emacs,

(setq ispell-program-name "hunspell")
;; you could set `ispell-dictionary` instead but `ispell-local-dictionary' has higher priority
(setq ispell-local-dictionary "en_US")
(setq ispell-local-dictionary-alist '(("en_US" "[[:alpha:]]" "[^[:alpha:]]" "[']" nil ("-d" "en_US,en_US-med") nil utf-8)))

Nous passons en fait l'option "-d en_US, en_US-med" à la CLI hunspell pour qu'elle puisse utiliser DEUX dictionnaires "en_US" et "en_US-med" en même temps.

Les options "-d" sont documentées dans le manuel de hunspell ( man hunspelldans le shell)

Voici le texte cité du manuel hunspell:

-d en_US,en_geo,en_med,de_DE,de_med

       en_US  and  de_DE  are  base dictionaries, they consist of aff and dic
       file pairs: en_US.aff, en_US.dic and  de_DE.aff,  de_DE.dic.   En_geo,
       en_med,  de_med  are  special dictionaries: dictionaries without affix
       file. Special dictionaries are optional extension of the base  dictio‐
       naries  usually  with  special (medical, law etc.)  terms. There is no
       naming convention for special dictionaries, only the ".dic" extension:
       dictionaries  without affix file will be an extension of the preceding
       base dictionary (right order of the parameter list needs for good sug‐
       gestions). First item of -d parameter list must be a base dictionary.

Testé sur Emacs 24.3, Debian 7 avec le mot «fibrochondrite».

Devrait fonctionner chez Emacs 23+ sur n'importe quel OS .

Veuillez noter que sous Windows, le moyen le plus simple de dire à l'exécutable hunspell que le chemin de recherche du dictionnaire est de configurer la variable d'environnement DICTPATH(c'est documenté dans le manuel de hunspell). Il est très possible que l'exécutable hunspell de Cygwin / MSYS2 ne reconnaisse que le chemin au format UNIX .

chen bin
la source
Cette méthode ne me permet pas d'utiliser plusieurs dictionnaires.
Divinenephron
Le code que j'ai donné est multi-dictionnaire IS.
chen bin
Je vois, merci de l'avoir signalé - je n'ai pas remarqué l' -doption.
Divinenephron
Eh bien, cela ne semble pas fonctionner pour une raison quelconque. Lorsque j'utilise l'option -d dans la ligne de commande, cela fonctionne, mais dans Emacs, helm-flyspellsemble utiliser en quelque sorte uniquement le dictionnaire avec la langue du système.
xji
helm-flyspell peut utiliser aspell.
chen bin