¿Cómo configuro hunspell en una PC con Windows?

10

Tengo mis diccionarios hunspell en C:\hunspell\. Contiene .dicy .affarchivos para tres idiomas: en_GB, en_US, y nb_NO. Las descripciones que encuentro en la web sobre cómo hacer que el hunspell funcione en Emacs me confunden.

¿Cuál es el código mínimo que necesito en mi archivo init para poder usar estos tres diccionarios hunspell en Emacs?

He intentado el siguiente código sugerido por un sitio web:

(add-to-list 'exec-path "C:/hunspell/bin/")
(setq ispell-program-name (locate-file "hunspell"
                       exec-path exec-suffixes 'file-executable-p))

Pero cuando quiero cambiar el diccionario M-x ispell-change-dictionary, recibo el siguiente mensaje:

ispell-phaf: no hay entrada coincidente para nil.

miotis
fuente

Respuestas:

4

Configuración de Emacs:

(setq ispell-program-name "c:/what-ever-path/hunspell")

;; "en_US" is key to lookup in `ispell-local-dictionary-alist'.
;; Please note it will be passed as default value to hunspell CLI `-d` option
;; if you don't manually setup `-d` in `ispell-local-dictionary-alist`
(setq ispell-local-dictionary "en_US") 

(setq ispell-local-dictionary-alist
      '(("en_US" "[[:alpha:]]" "[^[:alpha:]]" "[']" nil ("-d" "en_US") nil utf-8)))

Configuración del diccionario Hunspell:

Ejecutar hunspell -Den la ventana DOS que enumerará los directorios hunspell buscando diccionarios. Copie sus diccionarios a ese directorio. Esta es la configuración mínima que necesita.

Consulte http://blog.binchen.org/posts/what-s-the-best-spell-check-set-up-in-emacs.html para obtener más detalles técnicos.

Chen Bin
fuente
¡Trabajó para mi! Mi configuración con use-packagees(use-package ispell :config (setq ispell-program-name "C:/Program Files (x86)/hunspell-1.3.2-3-w32-bin/bin/hunspell.exe") (setq ispell-local-dictionary "en_US") (setq ispell-local-dictionary-alist '(("en_US" "[[:alpha:]]" "[^[:alpha:]]" "[']" nil ("-d" "en_US") nil utf-8))))
Lorem Ipsum el
Simplemente haga (setq ispell-program-name "c: /what-ever-path/hunspell.exe") en Windows 10 para hunspell sin otras configuraciones para el corrector ortográfico en inglés.
Yu Shen
2

Me encontré con este problema hace un tiempo. Si recuerdo correctamente, la razón por la que recibe ese mensaje de error es porque hunspellno puede configurarse en función del entorno actual. Entonces, para solucionarlo, debe configurar las variables hunspellespecíficas ispell. El siguiente código debería ser suficiente para configurar hunspell para los diccionarios de inglés:

(require 'flyspell)
(setq ispell-dictionary "english")
(add-to-list 'ispell-local-dictionary-alist '(("english"
                                               "[[:alpha:]]"
                                               "[^[:alpha:]]"
                                               "[']"
                                               t
                                               ("-d" "en_US")
                                               nil
                                               utf-8)))
(setq ispell-hunspell-dictionary-alist ispell-local-dictionary-alist)

La parte importante es ispell-hunspell-dictionary-alistque debe rellenarse con una lista de diccionario adecuada, como la que se proporciona ispell-local-dictionary-alist.

Sin embargo, hay muchos detalles en torno a esta lista. Si desea saber más al respecto, no dude en leer M-x describe-variable ispell-local-dictionary-alist.

Xaldew
fuente
+1 parece haber algo mal con el intento predeterminado de llenar el ispell-hunspel-dictionary-alist. En lugar de (require 'flyspell)considerarlo(with-eval-after-load "ispell" ...)
Andrew Swann el
1

Instale todos los diccionarios que desee en la ubicación en la que hunspell busca; encuentra esto con hunspell -D. Una vez instalado, este comando debería mostrarlos.

En el archivo init, agregue solo agregue uno de ellos, por ejemplo, tengo instalado en_GBy en_USdiccionarios. Tengo, en mi archivo init, esto:

(setenv "DICTIONARY" "en_GB")

Al abrir Emacs, solo habilítelo flyspell-mode. Emacs debería decir que se inicia ispell con el diccionario predeterminado. Esto significa que en_GBestá en acción, para nuestro ejemplo. Ahora, si quieres cambiar, solo hazlo M-x ispell-change-dictionaryy dale el nuevo nombre del diccionario Eg en_US. Ahora el otro diccionario debería estar en acción. Esto, nuevamente, será notificado por Emacs diciendo que comenzó ispell pero esta vez con el en_USdiccionario.

legends2k
fuente
1

Suponiendo que está utilizando una versión reciente de Emacs (24.4 o superior, según recuerdo), todo lo que necesita hacer es asegurarse de estar usando el nombre de diccionario correcto, y Emacs hará el resto automáticamente.

El problema principal es que Windows usa un formato de descripción de idioma diferente, por ejemplo, el inglés británico se llama ENG y el inglés de EE . UU. Es ENU . Esto significa que sus archivos de diccionario deben llamarse ENU.dic y ENU.aff para inglés de EE. UU., Y ENG.dic y ENG.aff para inglés británico.

También puede ser necesario tener un diccionario "predeterminado" o un hunspell puede no ser muy feliz. También puede establecer la variable de entorno DICCIONARIO para forzar un valor predeterminado.

Lamentablemente, no puedo entender cómo debe llamarse su diccionario noruego. Si está utilizando la configuración regional noruega en Windows, debería poder verificar dentro de Emacs evaluando:

(getenv "LANG")

Lo que le mostrará la configuración que Emacs está utilizando.

Alan Third
fuente
0

Esto es solo una suposición, pero tal vez necesite decir qué idioma le gustaría usar como "predeterminado":

(setq ispell-dictionary "en") ; default dictionary

El valor predeterminado de ispell-dictionaryes nil, por lo que puede ser esta la causa de su problema.

Mark Karpov
fuente
Gracias Mark, por tu consejo, pero desafortunadamente no parece cambiar mi situación. El mensaje de error sigue apareciendo
myotis