hunspell / emacs на OS X 10.9

Я не могу получить aspell, чтобы построить, поэтому я пытаюсь hunspell. Получил Hunspell построен. Настройте.emacs так, чтобы emacs мог (и действительно) находил исполняемый файл, вот так:

;;; Spell checking using hunspell
(setq ispell-dictionary-alist
  '((nil "[A-Za-z]" "[^A-Za-z]" "[']" t
     ("-d" "en_US" "-i" "utf-8") nil utf-8)
    ("american"
     "[A-Za-z]" "[^A-Za-z]" "[']" nil
     ("-d" "en_US") nil utf-8)
    ("english"
     "[A-Za-z]" "[^A-Za-z]" "[']" nil
     ("-d" "en_GB") nil utf-8)
    ("british"
     "[A-Za-z]" "[^A-Za-z]" "[']" nil
     ("-d" "en_GB") nil utf-8)
    ("norsk"
     "[A-Za-zÉÆØÅéæøå]" "[^A-Za-zÉÆØÅéæøå]" "[\"]" nil
     ("-d" "nb_NO") "~list" utf-8)))
(eval-after-load "ispell"
  (progn
    (setq ispell-dictionary "english"
          ispell-extra-args '("-a" "-i" "utf-8")
          ispell-silently-savep t)))

(setq ispell-dictionary "en_US")
(setq ispell-program-name "/usr/local/bin/hunspell")

и это в моем.bash_profile

export DICTIONARY=en_US
export DICPATH=/Users/myname/Applications/en_US

также пытался

export DICTIONARY=en_US
export DICPATH=/Users/gpajer/Applications/

(есть каталог ~/Applications/en_US, в котором находятся файлы словаря)

Но ispell-buffer возвращает что-то вроде

Can't open affix or dictionary flies for dictionary named "english".
@(#) International Ispell Version 3.2.06 (but really Hunspell 1.3.2)
@(#) International Ispell Version 3.2.06 (but really Hunspell 1.3.2)

Hunspell не находит словарь? Есть ли специальное место, где я должен поставить словарь? или как мне сказать emacs/hunspell, где искать словарь?

2 ответа

Обновите Emacs до 24.4, либо установив недавний предварительный тест, либо собрав транк Emacs. Предварительно собранные двоичные файлы для предварительных тестов и ночные сборки транка Emacs доступны в Emacs для Mac OS X, в разделах "Pretests" и "Nightlies" соответственно.

Emacs 24.4 значительно улучшает поддержку Hunspell, и теперь он может использовать Hunspell автоматически с минимальной дополнительной настройкой. В частности, Emacs теперь может находить доступные словари Hunspell и заполнять ispell-dictionary-alist автоматически. По сути, вам просто нужно следующее, чтобы заставить Emacs использовать hunspell:

(setq ispell-program-name (executable-find "hunspell"))

Вам необходимо явно установить эти словари для Hunspell, в зависимости от того, как вы установили Hunspell. Обычно вам просто нужно поставить соответствующий *.aff а также *.dic файлы в ~/Library/Spelling, Однако получить словари немного сложнее. Лучший способ, вероятно, состоит в том, чтобы загрузить соответствующие расширения LibreOffice и извлечь *.dic а также *.aff файлы из файлов OXT, которые по сути являются просто файлами ZIP. По крайней мере, так я и делаю. Там могут быть лучшие источники словарей.

Помимо языковых словарей у вас также должен быть словарь по умолчанию для Emacs. Этот словарь должен быть назван default, в прямом смысле. Однако создать его достаточно просто. Просто создайте символические ссылки на словари предпочитаемого вами языка:

$ cd ~/Library/Spelling
$ ln -s en_GB.aff default.aff
$ ln -s en_GB.dic default.dic

Это все, что мне нужно, чтобы Hunspell начал работать над своей системой.

Вот моя рабочая установка Emacs 24.4 / OS X 10.9 Hunspell, надеюсь, это поможет.

Во-первых, получите рабочий путь:

(cond
 ((eq system-type 'darwin)
  ;; Sane path (OSX doesn't've much on the path when launching not from shell:
  (setq path "/bin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/texbin:/opt/local/bin")
  (setenv "PATH" path)
  ;; Emacs 24.4 seems to need this...:
  (mapc (lambda (p) (push p exec-path)) '("/usr/local/bin" "/usr/texbin" "/opt/local/bin"))))

Затем укажите Hunspell и настройте его:

(setq-default ispell-program-name (executable-find "hunspell"))
(setq ispell-dictionary "american"
  ispell-extra-args '() ;; TeX mode "-t"
  ispell-silently-savep t
  )

(add-hook 'ispell-initialize-spellchecker-hook
          (lambda ()
            (setq ispell-base-dicts-override-alist
                  '((nil ; default
                     "[A-Za-z]" "[^A-Za-z]" "[']" t
                     ("-d" "en_US" "-i" "utf-8") nil utf-8)
                    ("american" ; Yankee English
                     "[A-Za-z]" "[^A-Za-z]" "[']" t
                     ("-d" "en_US" "-i" "utf-8") nil utf-8)
                    ("british" ; British English
                     "[A-Za-z]" "[^A-Za-z]" "[']" t
                     ("-d" "en_GB" "-i" "utf-8") nil utf-8)))))
Другие вопросы по тегам