2010-10-18 12 views
10

¿Alguien tiene una configuración de trabajo para hunspell y Emacs? Basta con establecer ispell-program-name-hunspell no funciona, la salida (cuando se utiliza flyspell, por ejemplo) se parece a continuación:Configuración de trabajo para Hunspell en Emacs

-> UTF-8 encoding error. Missing continuation byte in 0. character position: - 9631: word not found 

(mis archivos son generalmente codificados en UTF-8)

que he visto algunas configuraciones diferentes, pero todas han fallado de una forma u otra. Si la codificación funciona como debería, generalmente tiene problemas para encontrar el diccionario correcto.

¿Alguien con una solución de trabajo? Sería bueno poder cambiar entre dos diccionarios (el predeterminado debería ser el diccionario sueco y el inglés secundario), pero tener algo en ejecución sería aún mejor.

Respuesta

13

Si usted está consiguiendo que UTF-8 de codificación de errores, entonces significa que el proceso se está hunspell ejecuta con un argumento que especifica alguna otra codificación. Cuando reviso mi lista de procesos, por ejemplo, veo este proceso hijo a Emacs una vez que se ha puesto en marcha:

/usr/bin/hunspell -a -B -i iso-8859-1 

La función ispell-get-coding-system es lo que decide qué codificación a utilizar, lo que lo hace mediante el examen de la gran ispell-dictionary-alist variables que parece enumerar todos los idiomas conocidos por Emacs. La función normalmente toma el último símbolo de la entrada que coincide con el idioma que desea verificar. Por alguna razón que no me molesté en averiguar, esta lista tiene iso-8859-1 para inglés, en lugar de, ya sabes, prestar atención a la codificación en el búfer real. Lo sé, parece no tener sentido. Pero continuamos.

Se podría pensar que usted podría anular esta estableciendo su propio valor para la variable ispell-dictionary-alist y utilizar utf-8 como el último de los ocho parámetros:

;; I could never get Emacs to pay attention to this 
(setq ispell-dictionary-alist 
    '((nil "[A-Za-z]" "[^A-Za-z]" "[']" t ("-d" "en_US") nil utf-8))) 

pero nunca pude conseguir este ajuste para ponerse a trabajar, si es o no lo hice un primer (load-library "ispell") en mi .emacs, o si lo hice en el interior de uno de los:

;; Did not work for me either. 
(eval-after-load "ispell" '(progn ...)) 

de cualquier manera, si yo puso en marcha un Emacs frescas y entré *scratch* y mecanografió ispell-dictionary-alist y presionó Control-J, luego surgió la enorme lista original que crea ispell. Cada vez.

Así que decidí hacer un análisis de final de todo el problema de esta gran lista y simplemente reescribir la función ispell-get-coding-system para devolver siempre utf-8. Claro, esto me morderá la próxima vez que abro un archivo que realmente está en iso-8859-1, pero de todos modos nunca hago eso, ¿verdad?

Para implementar esto con éxito en mi archivo .emacs (bueno, ~/.emacs.d/init.el pero eso lleva tanto a escribir una respuesta de desbordamiento de pila) requiere este código:

;; It works! It works! After two hours of slogging, it works! 
(if (file-exists-p "/usr/bin/hunspell") 
    (progn 
     (setq ispell-program-name "hunspell") 
     (eval-after-load "ispell" 
     '(progn (defun ispell-get-coding-system() 'utf-8))))) 

ahora tengo hunspell correcta y funciona como un campeón! Lamentablemente, toda la razón por la que trabajé para que funcionase fue con la esperanza de que su diccionario fuera mucho mayor que el de Aspell, pero veo que está resaltando algunas de las mismas palabras. Oh, bueno, intentaré otro enfoque.Básicamente quiero un corrector ortográfico que pueda cargarse con el diccionario /usr/share/dict/american-english-huge que está disponible en Ubuntu, pero aspell murió de muchas maneras cuando traté de expandir sus horizontes. Tal vez tenga más suerte con hunspell - ya veremos.

+3

GRACIAS. Eso es increíble. Para usar un idioma como el sueco, hunspell es mucho mejor que i/aspell , e incluso si tengo que tener cuidado con los archivos no codificados en utf8, esto sigue siendo impresionante. ¡Gracias! – monotux

+0

Al intentar el enfoque que describes pero me sale un error. Primero hice 'sudo apt-get install hunspell' luego inserté el bloque de código en mis .emacs (el último con el constructo 'if'). Cuando trato de deletrear, recibo lo siguiente en \ * Mensajes \ *:' Comenzando nuevo proceso de Ispell [inglés] ... Error al habilitar Modo Flyspell: (No se pueden abrir los archivos de afijo o diccionario para el diccionario llamado "inglés". @ (#) Internat ional Ispell versión 3.2.06 (pero realmente Hunspell 1.2.14)) '. ¿Cuál es el problema? –

+1

me ayudó mucho, gracias! Aunque tardó 2 horas encontrar esta respuesta :) – daroczig

0
+1

Lo he probado ya. Lo hice de nuevo, con la esperanza de haberme perdido algo. [Esta es mi configuración] (http://paste.lisp.org/display/115686), puedo cambiar el diccionario ('rw-ispell-change-dictionary') y parece encontrar mis diccionarios, [pero esto es lo que obtengo cuando trato de usarlo] (http://paste.lisp.org/display/115687) :-( – monotux

0

De https://passingcuriosity.com/2017/emacs-hunspell-and-dictionaries/

Añadir

;; Set $DICPATH to "$HOME/Library/Spelling" for hunspell. 
(setenv 
    "DICPATH" 
    "/path/to/hunspell/dictionary") 
;; Tell ispell-mode to use hunspell. 
(setq 
    ispell-program-name 
    "hunspell") 

en su ~/.emacs.

Mis archivos de diccionario estaban en /usr/share/hunspell.

Cuestiones relacionadas