Рабочая установка для hunspell в Emacs - PullRequest
10 голосов
/ 18 октября 2010

У кого-нибудь есть рабочие настройки для hunspell и Emacs? Простая установка ispell-program-name на hunspell не работает, вывод (например, при использовании flyspell) выглядит следующим образом:

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

(мои файлы обычно кодируются в UTF-8)

Я видел несколько разных настроек, но все они так или иначе потерпели неудачу. Если кодировка работает так, как должно, обычно возникают проблемы с поиском правильного словаря.

Кто-нибудь с рабочим решением? Было бы неплохо иметь возможность переключаться между двумя словарями (по умолчанию должен быть шведский словарь и вторичный английский), но иметь что-либо работающее было бы еще лучше.

Ответы [ 3 ]

14 голосов
/ 06 ноября 2010

Если вы получаете эту ошибку кодировки UTF-8, это означает, что процесс hunspell запускается с аргументом, указывающим какую-то другую кодировку. Например, когда я проверяю свой список процессов, я вижу этот дочерний процесс в Emacs после его запуска:

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

Функция ispell-get-coding-system определяет, какую кодировку использовать, и проверяет большую переменную ispell-dictionary-alist, которая, кажется, перечисляет все языки, известные Emacs. Функция обычно захватывает последний символ записи, который соответствует языку, который вы хотите проверить. По какой-то причине, которую я не удосужился выяснить, в этом списке есть iso-8859-1 для английского - вместо того, чтобы, вы знаете, обращать внимание на кодировку в вашем реальном буфере. Я знаю, это кажется бессмысленным. Но мы продолжаем.

Можно подумать, что вы можете переопределить это, установив собственное значение для переменной ispell-dictionary-alist и использовать utf-8 в качестве последнего из восьми параметров:

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

Но я никогда не мог заставить эту настройку работать, независимо от того, сделал ли я сначала (load-library "ispell") в своем .emacs, или я сделал это внутри одного из них:

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

В любом случае, если бы я запустил новый Emacs и ввел *scratch*, набрал ispell-dictionary-alist и нажал Control-J, то появился бы огромный оригинальный список, который создает ispell. Каждый раз.

Поэтому я решил обойти всю проблему этого огромного списка и просто переписать функцию ispell-get-coding-system, чтобы всегда возвращать utf-8. Конечно, это укусит меня в следующий раз, когда я открою файл, который действительно находится в iso-8859-1, но я никогда так не делаю, верно?

Для успешной реализации этого в моем файле .emacs (ну, ~/.emacs.d/init.el, но для ответа на переполнение стека требуется столько времени), необходим код:

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

Теперь у меня есть hunspell и я работаю как чемпион! К сожалению, единственная причина, по которой я прошел, чтобы это работало, заключалась в надежде, что его словарь был намного больше, чем у Aspell, но я вижу, что он выделяет некоторые из тех же слов. Ну хорошо, я попробую другой подход. В основном мне нужна проверка орфографии, которую можно загрузить с помощью словаря /usr/share/dict/american-english-huge, который доступен в Ubuntu, но aspell умер во многих отношениях, когда я попытался расширить его горизонты. Может быть, мне повезет больше с hunspell - посмотрим.

0 голосов
/ 24 февраля 2017

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

Добавьте

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

в ваш ~/.emacs.

Файлы моего словаря были на /usr/share/hunspell.

0 голосов
/ 19 октября 2010
...