Макрос для проверки орфографии в редакторе
- zg
- zero-gravity
- Posts: 6035
- Joined: Tue 15 Mar, 2005 17:36
- Location: riga
- Been thanked: 185 times
- Contact:
Макрос для проверки орфографии в редакторе
Сам макрос тут.
для его работы нужны:
1. dll от проекта nhunspell. отсюда берётся архив с последней версией и из него нужны либо Hunspellx86.dll, либо Hunspellx64.dll. именно эти dll чисто нативные, никакого .net-а в них нет. положить их нужно куда-нибудь, откуда они загрузятся, например в папку с фаром.
2. словари. по умолчанию макрос настроен на вот этот русский словарь (нужны файлы ru_RU_yo.aff и ru_RU_yo.dic), и вот этот английский словарь (нужны файлы en_US.aff и en_US.dic). по умолчанию словари ожидаются в %FARPROFILE%\Dictionaries\.
все настройки словарей лежат в начале макроса.
F3 — показать меню с вариантами замены.
ShiftF3 — включить/выключить подсветку неправильных слов.
выглядит это примерно так:
для его работы нужны:
1. dll от проекта nhunspell. отсюда берётся архив с последней версией и из него нужны либо Hunspellx86.dll, либо Hunspellx64.dll. именно эти dll чисто нативные, никакого .net-а в них нет. положить их нужно куда-нибудь, откуда они загрузятся, например в папку с фаром.
2. словари. по умолчанию макрос настроен на вот этот русский словарь (нужны файлы ru_RU_yo.aff и ru_RU_yo.dic), и вот этот английский словарь (нужны файлы en_US.aff и en_US.dic). по умолчанию словари ожидаются в %FARPROFILE%\Dictionaries\.
все настройки словарей лежат в начале макроса.
F3 — показать меню с вариантами замены.
ShiftF3 — включить/выключить подсветку неправильных слов.
выглядит это примерно так:
- Attachments
-
- spell.png (8.68 KiB) Viewed 30472 times
-
- Posts: 6836
- Joined: Thu 23 Mar, 2006 21:36
- Location: Israel
- Has thanked: 41 times
- Been thanked: 530 times
Re: Макрос для проверки орфографии в редакторе
Спасибо, полезная штука!
Пара мелких замечаний:
1. if word:len() - это баг. Правильно будет: if word ~= ""
2. kernel32 не обязательно явно грузить, можно просто вызывать его функции, например, ffi.C.lstrlenW()
Можно определить в файле local C = ffi.C, тогда ещё красивее: C.lstrlenW().
В то же время не рекомендуется делать local lstrlenW = ffi.C.lstrlenW.
Пара мелких замечаний:
1. if word:len() - это баг. Правильно будет: if word ~= ""
2. kernel32 не обязательно явно грузить, можно просто вызывать его функции, например, ffi.C.lstrlenW()
Можно определить в файле local C = ffi.C, тогда ещё красивее: C.lstrlenW().
В то же время не рекомендуется делать local lstrlenW = ffi.C.lstrlenW.
-
- Posts: 6836
- Joined: Thu 23 Mar, 2006 21:36
- Location: Israel
- Has thanked: 41 times
- Been thanked: 530 times
Re: Макрос для проверки орфографии в редакторе
Можно, и так, но лучше заменить 33-ю строку наtstr wrote:переименуйте Hunspellx64.dll в HunspellAMD64.dll
Code: Select all
local hunspell=ffi.load("hunspell"..(win.GetEnv("PROCESSOR_ARCHITECTURE"):gsub("AMD64","x64")))
-
- Posts: 6836
- Joined: Thu 23 Mar, 2006 21:36
- Location: Israel
- Has thanked: 41 times
- Been thanked: 530 times
Re: Макрос для проверки орфографии в редакторе
Мне, чтобы скачать скрипт, приходится 5 раз кликать мышкой.
1. ссылка, приведенная в шапке
2. ссылка на spell.lua в папке .../scripts
3. правый клик на ссылке "View raw file"
4. клик "Save Link Target" в контекстном меню
5. и, наконец, кнопка "Save" в диалоге сохранения
Может я что-то не так делаю? Пока это всё делаешь, может и качать расхотеться.
1. ссылка, приведенная в шапке
2. ссылка на spell.lua в папке .../scripts
3. правый клик на ссылке "View raw file"
4. клик "Save Link Target" в контекстном меню
5. и, наконец, кнопка "Save" в диалоге сохранения
Может я что-то не так делаю? Пока это всё делаешь, может и качать расхотеться.
- John Doe
- Бюрократ
- Posts: 13855
- Joined: Wed 27 Apr, 2005 20:42
- Has thanked: 73 times
- Been thanked: 428 times
- Contact:
Re: Макрос для проверки орфографии в редакторе
Аналогичные процедуры требуются также для скачивания движка и словарей :-)
Вот прямые ссылки для ленивых:
https://evil-programmers.googlecode.com ... /spell.lua
http://sourceforge.net/projects/aoo-ext ... t/download
http://sourceforge.net/projects/aoo-ext ... t/download
http://sourceforge.net/projects/nhunspe ... p/download
Вот прямые ссылки для ленивых:
https://evil-programmers.googlecode.com ... /spell.lua
http://sourceforge.net/projects/aoo-ext ... t/download
http://sourceforge.net/projects/aoo-ext ... t/download
http://sourceforge.net/projects/nhunspe ... p/download
-
- Posts: 6836
- Joined: Thu 23 Mar, 2006 21:36
- Location: Israel
- Has thanked: 41 times
- Been thanked: 530 times
Re: Макрос для проверки орфографии в редакторе
Сабж при перезагрузке макросов (MCTL_LOADALL) не освобождает хэндлы библиотеки, что приводит при каждой перезагрузке к отъеданию около 12 MB памяти. Да, сабж не виноват, он не в курсе. Но, видимо, надо будет организовать новый тип события для извещения макросов о их выгрузке, или подцепиться к ExitFAR.
На данный момент, при установленном сабже, следующая команда валит Фар из-за съедания всей памяти:
На данный момент, при установленном сабже, следующая команда валит Фар из-за съедания всей памяти:
Code: Select all
lm:post for k=1,400 do far.MacroLoadAll() end
- zg
- zero-gravity
- Posts: 6035
- Joined: Tue 15 Mar, 2005 17:36
- Location: riga
- Been thanked: 185 times
- Contact:
Re: Макрос для проверки орфографии в редакторе
можно к ExitFAR. если надо различать, то можно ввести параметр, указывающий, что реально происходит.Shmuel wrote:или подцепиться к ExitFAR.
у меня не валит, появляется несколько сообщений про нехватку памяти, потом даже по папкам ходить можноНа данный момент, при установленном сабже, следующая команда валит Фар из-за съедания всей памяти:Code: Select all
lm:post for k=1,400 do far.MacroLoadAll() end
-
- Posts: 6836
- Joined: Thu 23 Mar, 2006 21:36
- Location: Israel
- Has thanked: 41 times
- Been thanked: 530 times
Макрос для проверки орфографии в редакторе
Сделал, чтобы ExitFAR вызывался при выгрузке и перезагрузке макросов.zg wrote:можно к ExitFAR. если надо различать, то можно ввести параметр, указывающий, что реально происходит.
Мы как-то обсуждали общее время загрузки макросов. Сабж увеличивает его на 300 ms на моей машине, из которых 30 ms - загрузка файлов и 270 ms - инициализация. Может имеет смысл грузить библиотеку и словари при первом нажатии на F3/ShiftF3 в редакторе? Время lm:load меня не волнует, волнует время запуска Фара.
-
- Posts: 6836
- Joined: Thu 23 Mar, 2006 21:36
- Location: Israel
- Has thanked: 41 times
- Been thanked: 530 times
Макрос для проверки орфографии в редакторе
ffi.load тут ни при чём. Загрузка любой библиотеки делается не за нулевое время.Smitis wrote:Я так понимаю, проблема имеет место для любых библиотек, загружаемых через ffi.load?
Речь идёт не о загрузке, а об инициализации, которая для данной библиотеки, включая загрузку словарей, занимает примерно 300 ms, что само по себе не так уж много, но если учесть, что у меня все остальные макросы вместе грузятся за 4 ms, то разница налицо.