LuaFAR for Editor

Здесь можно обсудить ваш любимый плагин.
Shmuel
Posts: 6836
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 530 times

Re: LuaFAR for Editor

Post by Shmuel »

Latest post of the previous page:

Aidar wrote:Перевёл на русский язык hlf к LuaFAR for Editor
Громадное спасибо! После незначительных правок, выложил на LuaForge.
User avatar
Aidar
Posts: 541
Joined: Mon 09 Mar, 2009 22:43
Location: Kazan
Has thanked: 8 times
Been thanked: 7 times
Contact:

Re: LuaFAR for Editor

Post by Aidar »

Shmuel
Ошибка: Функция FarKeyToName работает неправильно:
выдаёт только первые 4 символа или вообще не то, что нужно.
Сравнив использование FarKeyToName в исходниках разных плагинов
нашёл ошибку: не там поставлена скобка.
Файл service.cpp, функция far_FarKeyToName, стр. 2733:
BOOL result = gFSF.FarKeyToName(Key, buf, sizeof(buf-1));
должно быть
BOOL result = gFSF.FarKeyToName(Key, buf, sizeof(buf)-1);
Проверил (собрал с noembed), всё выдаёт правильно.

Вопрос:
Названия VK_- и KEY_-клавиш не совпадают (BACK и BS).
Нет ли стандартного или простого средства преобразования
клавиши в одном виде в другой вид.
FAR даёт KEY_-клавишу, а BreakKey задаётся как VK_-клавиша.
Shmuel
Posts: 6836
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 530 times

Re: LuaFAR for Editor

Post by Shmuel »

Aidar wrote:Ошибка: Функция FarKeyToName работает неправильно:
Большое спасибо! Исправленные версии LuaFAR и LF4Ed выложены.
Aidar wrote:Вопрос:
Названия VK_- и KEY_-клавиш не совпадают (BACK и BS).
Нет ли стандартного или простого средства преобразования
клавиши в одном виде в другой вид.
FAR даёт KEY_-клавишу, а BreakKey задаётся как VK_-клавиша.
Возможно такое средство и есть, просто мне неизвестно (ну, а я небольшой спец по FAR API). Мне кажется, что этот вопрос лучше задать в разделе "Разработка плагинов", там его могут заметить и те, кто не интересуется LuaFAR'ом, но может знать ответ.
maxdrfl
Posts: 486
Joined: Mon 04 Apr, 2005 14:36
Location: Иркутск

Re: LuaFAR for Editor

Post by maxdrfl »

Shmuel wrote: Можно даже заменить эту функцию "на ходу", с помощью фразы far.OnError = YourNewErrorHandler.
Если твоя функция будет лучше, то (с твоего позволения) она заменит мою в следующей версии lf4ed. :ha:
Если это делать в начале скрипта, который вызывает скрипт с ошибкой, это работает.
Но если я хочу сделать это в _usermenu.lua а потом вызвать скрипт с ошибкой из меню — это не работает. Можно ли это как-нибудь обойти?
maxdrfl
Posts: 486
Joined: Mon 04 Apr, 2005 14:36
Location: Иркутск

Re: LuaFAR for Editor

Post by maxdrfl »

Второй раз сталкиваюсь с проблемой, причин которой я не понимаю в принципе:

Code: Select all

   ╔══════════════════════ Error [used: 216 Kb] ══════════════════════╗
   ║ error loading module 'farkeys' from file                         ║
   ║ 'Z:\home\gonchar\winbin\far2\plugins\luafareditor\farkeys.lua':  ║
   ║                                                                  ║
   ║ Z:\home\gonchar\winbin\far2\plugins\luafareditor\farkeys.lua:75: ║
   ║ unexpected symbol near '<eof>'                                   ║
   ║ stack traceback:                                                 ║
   ║     [C]: ?                                                       ║
   ║     [C]: in function 'OriginalRequire'                           ║
   ║     ?: in function 'require'                                     ║
   ║     ...luafareditor\scripts/fl_scripts/editor/smartkeys.lua:2:   ║
   ║ in main chunk                                                    ║
   ║     ?: in function <?:73>                                        ║
   ║     (tail call): ?                                               ║
   ║     ?: in function <?:380>                                       ║
   ║                          [OK]  [Jump 1]                          ║
   ╚══════════════════════════════════════════════════════════════════╝
Решается заменой всех CR LF на LF.
Shmuel
Posts: 6836
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 530 times

Re: LuaFAR for Editor

Post by Shmuel »

maxdrfl wrote:
Shmuel wrote: Можно даже заменить эту функцию "на ходу", с помощью фразы far.OnError = YourNewErrorHandler.
Если твоя функция будет лучше, то (с твоего позволения) она заменит мою в следующей версии lf4ed. :ha:
Если это делать в начале скрипта, который вызывает скрипт с ошибкой, это работает.
Но если я хочу сделать это в _usermenu.lua а потом вызвать скрипт с ошибкой из меню — это не работает. Можно ли это как-нибудь обойти?
Обойти можно так: в файле luaplug.lua перенести строку 406: вставить её после строки 231. Пожалуйста, проверь, если всё в порядке - будет в следующей версии.

(Если ты пользуешься одной из версий типа "embedded", раскрою маленький секрет: скопируй luaplug.lua в папку плагина и переименуй его, чтобы имя совпадало с именем DLL плагина, но расширение оставалось .lua - в этом случае скрипт будет грузиться вместо встроенного в DLL).
User avatar
Aidar
Posts: 541
Joined: Mon 09 Mar, 2009 22:43
Location: Kazan
Has thanked: 8 times
Been thanked: 7 times
Contact:

Re: LuaFAR for Editor

Post by Aidar »

Shmuel wrote:Мне кажется, что этот вопрос лучше задать в разделе "Разработка плагинов", там его могут заметить и те, кто не интересуется LuaFAR'ом, но может знать ответ.
Спасибо за совет. Кажется, нашёл там подходящую тему.
Shmuel
Posts: 6836
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 530 times

Re: LuaFAR for Editor

Post by Shmuel »

maxdrfl wrote:Второй раз сталкиваюсь с проблемой, причин которой я не понимаю в принципе:
[...]
Решается заменой всех CR LF на LF.
Никогда с этим не сталкивался. Если расскажешь, как воспроизвести - поиграюсь с удовольствием. :wink:
User avatar
Aidar
Posts: 541
Joined: Mon 09 Mar, 2009 22:43
Location: Kazan
Has thanked: 8 times
Been thanked: 7 times
Contact:

Re: LuaFAR for Editor

Post by Aidar »

При сборке
D:\Testing\Lua\LF4Ed\build>GccMake.bat embed1
D:\Testing\Lua\LF4Ed\build>GccMake.bat embed2
выдаётся ошибка
lua -epackage.path=\'?.lua\' generate.lua lf4ed.cfg linit.c
process_begin: CreateProcess(NULL, lua -epackage.path='?.lua' generate.lua lf4ed.cfg linit.c, ...) failed.
make (e=2): Не удается найти указанный файл.
mingw32-make.exe: *** [linit.c] Error 2
Выяснил, что lua.exe и luac.exe должны быть в одном из путей PATH.
Теперь о сборках
embed2: FAR нормально работает.
embed1: FAR вылетает с ошибкой в Lua5.1.dll .
Причём, если LF4Ed не находит luafar.dll, появляется сообщение "модуль не найден".
Если поместить luafar.dll в доступный путь, начинает вылетать.
maxdrfl
Posts: 486
Joined: Mon 04 Apr, 2005 14:36
Location: Иркутск

Re: LuaFAR for Editor

Post by maxdrfl »

Обойти можно так: в файле luaplug.lua перенести строку 406: вставить её после строки 231. Пожалуйста, проверь, если всё в порядке - будет в следующей версии.
Спасибо, работает.
(Если ты пользуешься одной из версий типа "embedded", раскрою маленький секрет: скопируй luaplug.lua в папку плагина и переименуй его, чтобы имя совпадало с именем DLL плагина, но расширение оставалось .lua - в этом случае скрипт будет грузиться вместо встроенного в DLL).
А можно сделать тоже-самое для не-embedded версии?
Никогда с этим не сталкивался. Если расскажешь, как воспроизвести - поиграюсь с удовольствием. :wink:
Видимо и не столкнешься (:. Это видимо как-то связано с wine, т.к. под win32 это не повторяется.
Shmuel
Posts: 6836
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 530 times

Re: LuaFAR for Editor

Post by Shmuel »

Aidar wrote:При сборке [...] выдаётся ошибка [...]
Выяснил, что lua.exe и luac.exe должны быть в одном из путей PATH.
В INSTALL.txt указано, что эти (исполнимые) файлы являются необходимыми ("prerequisite") для сборки. Излишне указывать, что они должны лежать на %PATH%, это и так ясно.
Aidar wrote:embed1: FAR вылетает с ошибкой в Lua5.1.dll .
[...]
Если поместить luafar.dll в доступный путь, начинает вылетать.
Никогда такого не наблюдал. Чтобы разобраться, нужно больше данных, для начала хотя бы:
-- чем собрана lua5.1.dll и с каким рантаймом?
-- не находилось ли в папке плагина более 1 файла с расширением .dll ?
Last edited by Shmuel on Sat 29 Aug, 2009 10:18, edited 1 time in total.
Shmuel
Posts: 6836
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 530 times

Re: LuaFAR for Editor

Post by Shmuel »

maxdrfl wrote:
(Если ты пользуешься одной из версий типа "embedded", раскрою маленький секрет: скопируй luaplug.lua в папку плагина и переименуй его, чтобы имя совпадало с именем DLL плагина, но расширение оставалось .lua - в этом случае скрипт будет грузиться вместо встроенного в DLL).
А можно сделать тоже-самое для не-embedded версии?
Для не-embedded просто ничего не нужно делать: стартовый скрипт уже совпадает по имени с DLL плагина, и все скрипты грузятся из файлов на диске.

Для не-embedded используется luaplug.dll, он же - "generic LuaFAR plugin". Поскольку он "generic", то можно простой заменой файла luaplug.lua получить совершенно другой плагин, который может не иметь ничего общего с LF4Ed. Само имя "luaplug" не является обязательным, но стартовый скрипт-файл плагина должен совпадать по имени с DLL плагина - о чём сказано в мануале LuaFAR.
maxdrfl
Posts: 486
Joined: Mon 04 Apr, 2005 14:36
Location: Иркутск

Re: LuaFAR for Editor

Post by maxdrfl »

Спасибо за информацию.
На самом деле я просто перепутал смысл понятия 'embedded' приняв его за обозначение luafar4ed_embedded.dll (:
User avatar
Aidar
Posts: 541
Joined: Mon 09 Mar, 2009 22:43
Location: Kazan
Has thanked: 8 times
Been thanked: 7 times
Contact:

Re: LuaFAR for Editor

Post by Aidar »

Shmuel wrote:Никогда такого не наблюдал. Чтобы разобраться, нужно больше данных, для начала хотя бы:
-- чем собрана lua5.1.dll и с каким рантаймом?
-- не находилось ли в папке плагина более 1 файла с расширением .dll ?
1. Собирал с помощью Code::Blocks 8, создал необходимые проекты, настройки вытащил из исходных Makefile'ов.
2. Сначала случайно записал luafar.dll в папку плагина, затем перенёс в один из путей %PATH% для библиотек.
Для lua5.1.dll из сборки Lua FAR 1.75 выдаёт окошко и вылетает с ACCESS_VIOLATION без какой-либо доп. информации.
Для lua5.1.dll из сборки LuaJIT в логе остаётся инфо про lua_openstring.
3. Пробовал просто собирать dll-ку с помощью MinGW из поставки Code::Blocks, создаёт lua51.dll .
Не совсем разбираюсь, в чём между ними разница, но если переименовать её в lua5.1.dll, то вылет без доп.инфы.
Shmuel
Posts: 6836
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 530 times

Re: LuaFAR for Editor

Post by Shmuel »

Aidar wrote:embed1: FAR вылетает с ошибкой в Lua5.1.dll .
[...]
Если поместить luafar.dll в доступный путь, начинает вылетать.
Здесь разобрались: Aidar использовал изменённую систему сборки, в результате чего Lua оказался статически слинкован в luafar.dll. (Мейкфайлы из поставки нуждаются в небольшой правке, постараюсь сделать) . :(

Мини-анонс:
При попытке запустить Panel Filter из последнего релиза fl_scripts на FAR 1.70 плагин упал. Оказалось - баг в LuaFAR. Исправленные версии LuaFAR и LF4Ed - выложены.
gotar
Posts: 420
Joined: Sun 06 Sep, 2009 12:34
Has thanked: 17 times
Been thanked: 3 times

Re: LuaFAR for Editor

Post by gotar »

Начало в http://forum.farmanager.com/viewtopic.p ... 648#p50648

Правильно ли я понял, что для панельных скриптов нужен luaplug.dll и luafar.dll, lf4ed_5.1.dll не позволяет писать панельные плагины, однако содержит функции удобные для написания скриптов для редактора и ему в %FARHOME% ничего не нужно?

посмотрел я fl_scripts В install.txt написано

> 4) Скачать модуль LuaFilesystem (lfs)
> Брать в анонсах fl_scripts на forum.farmanager.com
> положить в %FARHOME%, радом с lua_NN.dll


У меня lua51.dll в %FARHOME% не лежит - только в пути, %FARHOME% в пути нет. Куда класть lfs.dll?
Post Reply

Return to “Обсуждение плагинов”