LINUX.ORG.RU

emacs on windows & hunspell

 , , , ,


1

3

Из заголовка видно, что тема очень даже offtop, надеюсь, пользователи поймут и простят.

Проверка правописания на английском в flyspell-mode работает нормально. Русские слова все подчёркивает, как ошибку. Похоже, что дело в кодировках, но я не понимаю, в какую сторону копать.

Есть винда, x86_64, на ней стоит GNU Emacs 25.3.1 (x86_64-w64-mingw32), брал отсюда.

Hunspell собран в msys с патчем отсюда , путь до C:\msys64\mingw64\bin прописан в PATH.

Словари лежат в C:\Hunspell\share\hunspell

 Содержимое папки C:\Hunspell\share\hunspell

06.01.2018  15:14    <DIR>          .
06.01.2018  15:14    <DIR>          ..
28.08.2007  20:43            11 352 en_US.aff
29.08.2007  13:21           696 228 en_US.dic
05.11.2013  12:29           401 245 ru_RU.aff
05.11.2013  12:31         5 102 566 ru_RU.dic

Код, связанный с проверкой правописания в emacs:

;;;;;;;;;_SPELL-CHECK;
(setenv "LANG" "en_US, ru_RU")
(add-to-list 'exec-path "C:/msys64/mingw64/bin")
(setq ispell-program-name (locate-file "hunspell" exec-path exec-suffixes 'file-executable-p))
(setq ispell-local-dictionary-alist
    '(("russian"
       "[АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЬЫЪЭЮЯабвгдеёжзийклмнопрстуфхцчшщьыъэюя]"
       "[^АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЬЫЪЭЮЯабвгдеёжзийклмнопрстуфхцчшщьыъэюя]"
       "[-]"  nil ("-d" "ru_RU") nil utf-8)
      ("english"
       "[A-Za-z]" "[^A-Za-z]"
       "[']"  nil ("-d" "en_US") nil iso-8859-1)))
(require 'ispell)
(require 'flyspell)
(flyspell-mode +1)
Deleted

Может нужно словарь переключить?

anmg ()

тема очень даже offtop

Почему?

Проверка правописания на английском в flyspell-mode работает нормально. Русские слова все подчёркивает, как ошибку.

Я не проверял, но не должен? У вас же отдельные словари настроены: американский и русский.

Zmicier ★★★★★ ()
Ответ на: комментарий от Zmicier

Вот настройка для смешанного русско-английского и англо-русского:

(with-eval-after-load 'ispell
  (setq ispell-program-name "hunspell"
        ispell-dictionary "ru_RU,en_GB")
  (ispell-set-spellchecker-params)
  (ispell-hunspell-add-multi-dic "en_GB,ru_RU")
  (ispell-hunspell-add-multi-dic "ru_RU,en_GB"))
Zmicier ★★★★★ ()
Последнее исправление: Zmicier (всего исправлений: 1)

Похоже, что дело в кодировках

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

Приведите к единой.

Zmicier ★★★★★ ()
Последнее исправление: Zmicier (всего исправлений: 1)
Ответ на: комментарий от Zmicier

Я не проверял, но не должен? У вас же отдельные словари настроены: американский и русский.

Файл полностью на русском, поэтому, как я понимаю, должен включаться русский словарь, но вместо этого работает английский. Также пробовал совмещённый русский и английский словарь использовать, там также проверка английского работает, а русского нет, из этого и сделал вывод, что дело в кодировках, поэтому русские слова и не может сравнивать со словарем.

Deleted ()
Ответ на: комментарий от Deleted

Файл полностью на русском, поэтому, как я понимаю, должен включаться русский словарь

Да ну? Кто сказал?

Так или иначе, это же неудобно. Сделайте, как я предложил, это же вам не Файрфокс и не Либрофис, тут так можно.

Zmicier ★★★★★ ()
Ответ на: комментарий от Deleted

Также пробовал совмещённый русский и английский словарь использовать

Это имеется в виду именно то, что написано? Два словаря слиты в один? Это не будет работать.

Zmicier ★★★★★ ()
Ответ на: комментарий от Deleted

Словари для автодополнения, может быть, и можно. Но не грамматические же!

Zmicier ★★★★★ ()
Ответ на: комментарий от Deleted

Вот только он не собирается. Ошибка вылетает при попытке патча (Stripping trailing CRs from patch; use --binary to disable.) patching file hunspell.cxx Hunk #1 FAILED at 710. patch unexpectedly ends in middle of line Hunk #2 FAILED at 745. 2 out of 2 hunks FAILED — saving rejects to file hunspell.cxx.rej

knigolaz ()
Ответ на: комментарий от knigolaz

Вообще, необходимости патчить hunspell, как оказалось, нет. Настраивал все окружение заново, скачал hunspell с ezwinports, с ним все нормально работает.

Deleted ()
Ответ на: комментарий от knigolaz

Извиняюсь, сегодня не доберусь до компьютера.

Deleted ()
Ответ на: комментарий от knigolaz

В общем, рецепт такой.

1. Качаем hunspell отсюда..

2. Распаковываем куда удобно, добавляем путь к исполняемому файлу hunspell.exe.

3. Качаем отсюда ru_RU.aff и ru_RU.dic, кладём в <корень каталога с hunspell>/share/hunspell.

4. В .emacs добавляем:

;; Правописание
(setenv "LANG" "en_US, ru_RU")
(with-eval-after-load 'ispell
  (setq ispell-program-name "hunspell"
        ispell-dictionary "ru_RU,en_GB")
  (ispell-set-spellchecker-params)
  (ispell-hunspell-add-multi-dic "en_GB,ru_RU")
  (ispell-hunspell-add-multi-dic "ru_RU,en_GB"))
(require 'ispell)
(require 'flyspell)
(flyspell-mode +1)
(add-hook 'org-mode-hook 'turn-on-flyspell)
(add-hook 'tex-mode-hook 'turn-on-flyspell)
(add-hook 'latex-mode-hook 'turn-on-flyspell)
(add-hook 'ess-mode-hook 'turn-on-flyspell)

5. ???

6. Profit

Deleted ()
Ответ на: комментарий от Deleted

Огромное спасибо. У меня emacs 26, поэтому после нескольких экспериментов получилась такая конфигурация:

(add-to-list 'exec-path «~/.emacs.d/hunspell/bin/») 
(setq ispell-program-name (locate-file «hunspell» exec-path exec-suffixes 'file-executable-p))
(with-eval-after-load 'ispell (setq ispell-program-name «hunspell» ispell-dictionary «ru_RU,en_GB») 
(ispell-set-spellchecker-params) 
(ispell-hunspell-add-multi-dic «en_GB,ru_RU») 
(ispell-hunspell-add-multi-dic «ru_RU,en_GB»)) 

Единственно, я отключил проверку «не лету» - подтормаживает слегка. На горячие клавиши повесил 'flyspell-buffer

knigolaz ()
Ответ на: комментарий от knigolaz

Рад, что помог. У меня тоже 26 emacs. Ты, видимо, в Path не прописал местонахождение hunspell.exe, поэтому пришлось в конфиге указывать.

Deleted ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.