2010-10-18 8 views
10

Hat jemand eine funktionierende Einrichtung für hunspell und Emacs? Einfach ispell-program-name-hunspell Einstellung nicht funktioniert, die Ausgabe (wenn flyspell, beispielsweise mit) wie unten aussieht:Arbeitseinstellungen für Hunspell in Emacs

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

Ich habe gesehen, (meine Dateien in der Regel in UTF-8 codiert werden) ein paar verschiedene Setups, aber alle haben auf die eine oder andere Weise versagt. Wenn die Codierung funktioniert, sollte es normalerweise Probleme haben, das richtige Wörterbuch zu finden.

Jeder mit einer funktionierenden Lösung? Es wäre schön, in der Lage zu sein, zwischen zwei Wörterbüchern umzuschalten (der Standard sollte das schwedische Wörterbuch und das sekundäre Englisch sein), aber etwas rennender wäre noch besser.

Antwort

13

Wenn Sie diese UTF-8-Codierung Fehler bekommen, dann bedeutet es, dass der hunspell Prozess mit einem Argument ausgeführt wird immer eine andere Codierung angeben. Wenn ich meine Prozessliste überprüfen, zum Beispiel, sehe ich dieses Kind Prozess zu Emacs, sobald es gestartet ist:

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

Die ispell-get-coding-system Funktion ist, was entscheidet, welche Codierung zu verwenden, was es tut, durch die große ispell-dictionary-alist variable Prüfung das scheint alle Sprachen aufzulisten, die Emacs bekannt sind. Die Funktion greift normalerweise auf das letzte Symbol des Eintrags zu, der der zu überprüfenden Sprache entspricht. Aus irgendeinem Grund, dass ich nicht die Mühe, herauszufinden, diese Liste hat iso-8859-1 für Englisch - anstatt, wissen Sie, achten Sie auf die Codierung in Ihrem tatsächlichen Puffer. Ich weiß, es scheint keinen Sinn zu machen. Aber wir machen weiter.

Sie würden denken, dass Sie dies außer Kraft setzen könnte einen eigenen Wert für die Variable ispell-dictionary-alist und verwenden utf-8 als letzte der acht Parameter an:

;; 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))) 

Aber ich konnte nie diese Einstellung erhalten, um tatsächlich funktionieren, ob oder nicht habe ich ein (load-library "ispell") erste in meinem .emacs, oder ob ich habe es innerhalb von einer von denen:

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

So oder so, wenn ich ein frisches Emacs gestartet und trat *scratch* und getippt ispell-dictionary-alist und drückte Control-J, dann würde die riesige ursprüngliche Liste, die ispell erstellt, kommen. Jedes Mal.

Also beschloss ich, eine End-Lauf um das gesamte Problem dieser riesigen Liste und einfach schreiben die ispell-get-coding-system Funktion zu tun immer utf-8 zurückzukehren. Sicher, das wird mich bei dem nächsten Mal beißen, wenn ich eine Datei öffne, die wirklich in iso-8859-1 ist, aber das mache ich sowieso nie, oder?

dies in meinem .emacs Datei erfolgreich zu implementieren (na ja, ~/.emacs.d/init.el aber das dauert so viel Typisierung für eine Antwort Stack-Überlauf) erforderlich, um diesen Code:

;; 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))))) 

Ich habe jetzt hunspell und Arbeits wie ein Champion! Leider war der ganze Grund, warum ich es funktionierte, in den Hoffnungen, dass sein Wörterbuch weit größer als Aspells war, aber ich sehe, dass es einige der gleichen Wörter hervorhebt. Naja, ich werde es anders versuchen.Ich möchte grundsätzlich eine Rechtschreibprüfung, die mit dem /usr/share/dict/american-english-huge Wörterbuch geladen werden kann, das auf Ubuntu verfügbar ist, aber aspell starb auf viele Arten, als ich versuchte, seinen Horizont zu erweitern. Vielleicht werde ich mit hunspell glücklicher sein - wir werden sehen.

+3

DANKE. Das ist genial. Für die Verwendung einer Sprache wie Schwedisch ist Hunspell viel besser als I/Aspell und selbst wenn ich auf Dateien achten muss, die nicht in utf8 kodiert sind, ist das immer noch großartig. Danke! – monotux

+0

Beim Versuch, den Ansatz zu beschreiben, erhalte ich einen Fehler. Zuerst habe ich 'sudo apt-get install hunspell' dann habe ich eingefügt der Codeblock in meiner .emacs (der letzte mit dem 'if' Konstrukt). Wenn ich versuche, eine Rechtschreibprüfung durchzuführen, bekomme ich Folgendes in \ * Messages \ *:' Neuen Ispell-Prozess starten [deutsch] ... Fehler beim Aktivieren Flyspell-Modus: (Affix- oder Wörterbuchdateien für das Wörterbuch "Englisch" können nicht geöffnet werden. @ (#) Internat ispell Version 3.2.06 (aber wirklich Hunspell 1.2.14)). Was ist das Problem? –

+1

Hat mir sehr geholfen, danke! Obwohl es 2 Stunden gedauert hat, diese Antwort zu finden :) – daroczig

0
+1

Ich habe es bereits versucht. Habe es wieder getan, in der Hoffnung, dass ich etwas verpasst habe. [Das ist mein Setup] (http://paste.lisp.org/display/115686), ich kann das Wörterbuch ändern ('rw-ispell-change-dictionary') und es scheint meine Wörterbücher zu finden, [aber das ist es was ich bekomme, wenn ich versuche, es zu benutzen] (http://paste.lisp.org/display/115687) :-( – monotux

0

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

hinzufügen

;; 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") 

in Ihre ~/.emacs.

Meine Wörterbuchdateien waren um /usr/share/hunspell.