LuaFAR — библиотека для создания плагинов на языке Lua

Здесь обсуждается всё, что касается макросов.
User avatar
John Doe
Бюрократ
Posts: 12872
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 38 times
Been thanked: 293 times

LuaFAR — библиотека для создания плагинов на языке Lua

Post by John Doe »

Библиотека LuaFAR делает возможным написание плагинов на языке Lua, предоставляя им адаптированную версию FAR API.

Входит в состав FAR manager (начиная с 3.0 build 2851), и доступна для использования в макросах.

Справка по функциям библиотеки — luafar_manual.chm (в дистрибутиве, папка Encyclopedia).
Мануал весьма лаконичен, предполагает что вы ориентируетесь в FAR Plugins API (FarEncyclopedia.ru.chm, в дистрибутиве)

Дополнения к мануалу:

Полезное по теме: См. также:
User avatar
zg
zero-gravity
Posts: 5866
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 155 times
Contact:

Re: LuaFAR — библиотека для создания плагинов на языке Lua

Post by zg »

Latest post of the previous page:

Shmuel wrote:Тогда ещё вопрос: поскольку Id является INT_PTR, то по идее он может быть произвольным указателем?
сейчас — только для диалога. для редактора просмотра — чистый инт. поэтому я и предложил разделить в зависимости от типа, чтобы не было ненужных сложностей.
То-есть, не "влезть" в 32 бита в 64-битной системе?
да.
Дело в том, что EditorId и ViewerId определены как int, а DialogHandle вроде как указатель?
да.
Shmuel
Posts: 6167
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 31 times
Been thanked: 330 times

Re: LuaFAR — библиотека для создания плагинов на языке Lua

Post by Shmuel »

zg wrote:
Shmuel wrote:Тогда ещё вопрос: поскольку Id является INT_PTR, то по идее он может быть произвольным указателем?
сейчас — только для диалога. для редактора просмотра — чистый инт. поэтому я и предложил разделить в зависимости от типа, чтобы не было ненужных сложностей.
Понятно. Видимо, надо мне будет пересмотреть реализацию этих вещей.
Shmuel
Posts: 6167
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 31 times
Been thanked: 330 times

Re: LuaFAR — библиотека для создания плагинов на языке Lua

Post by Shmuel »

zg wrote:ps: а вообще я ожидал конечно функцию, которая возвращает таблицу с информацией о всех окнах :)
Как иллюстрация того, что это незачем вставлять в LuaFAR, вот реализация на Lua:

Code: Select all

function GetAllWindowsInfo()
  local windows = {}
  local count = far.AdvControl("ACTL_GETWINDOWCOUNT")
  for k=1,count do
    windows[k] = far.AdvControl("ACTL_GETWINDOWINFO", k-1)
  end
  return windows
end
Shmuel
Posts: 6167
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 31 times
Been thanked: 330 times

Re: LuaFAR — библиотека для создания плагинов на языке Lua

Post by Shmuel »

Shmuel wrote:
zg wrote:сейчас — только для диалога. для редактора просмотра — чистый инт. поэтому я и предложил разделить в зависимости от типа, чтобы не было ненужных сложностей.
Понятно. Видимо, надо мне будет пересмотреть реализацию этих вещей.
Переделал, всё должно работать сейчас.
User avatar
zg
zero-gravity
Posts: 5866
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 155 times
Contact:

Re: LuaFAR — библиотека для создания плагинов на языке Lua

Post by zg »

что-то у меня самому собрать не получается.
вернее всё собирается, но падает при использовании внутри luaL_register(L, "regex"...) в lua_setfield. второй параметр -1, третий не указатель на char, а 0x63617262, т.е. "brac".
lua 5.1.5, luafar4editor-3.0.3 официальный.
с lua5.1.dll из luafar-3.0.5 падает так же.

ps: а как собрать lua5.1.dll без правки makefile, в смысле имени?

update: если закоментировать

Code: Select all

  lua_pushcfunction(L, luaopen_regex);
  lua_pushliteral(L, "regex");
  lua_call(L, 1, 0);
работает.
Shmuel
Posts: 6167
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 31 times
Been thanked: 330 times

Re: LuaFAR — библиотека для создания плагинов на языке Lua

Post by Shmuel »

zg wrote:что-то у меня самому собрать не получается.
вернее всё собирается, но падает при использовании внутри luaL_register(L, "regex"...) в lua_setfield. второй параметр -1, третий не указатель на char, а 0x63617262, т.е. "brac".
lua 5.1.5, luafar4editor-3.0.3 официальный.
с lua5.1.dll из luafar-3.0.5 падает так же.
Никогда с этим не сталкивался, так что... Есть правда одна известная проблема: если ты пользуешься GCC 4.6.x (а я пользуюсь 4.5.2), в 4.6 изменены некоторые флаги по умолчанию. Для того, чтобы собрать рабочий Lua или LuaFAR с GCC 4.6, нужно к CFLAGS добавлять -fno-omit-frame-pointer.
ps: а как собрать lua5.1.dll без правки makefile, в смысле имени?
Я правил внутри.
update: если закоментировать

Code: Select all

  lua_pushcfunction(L, luaopen_regex);
  lua_pushliteral(L, "regex");
  lua_call(L, 1, 0);
работает.
Да, но регекспов не будет. :(

Update:
Сейчас попробовал собирать luafar3.dll c GCC-4.6.1 - все LuaFAR-плагины падают. Так что на данный момент (пока не разберусь) рекомендация одна - собирать с помощью GCC 4.5.x.
User avatar
zg
zero-gravity
Posts: 5866
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 155 times
Contact:

Re: LuaFAR — библиотека для создания плагинов на языке Lua

Post by zg »

Shmuel wrote:Никогда с этим не сталкивался, так что... Есть правда одна известная проблема: если ты пользуешься GCC 4.6.x (а я пользуюсь 4.5.2), в 4.6 изменены некоторые флаги по умолчанию. Для того, чтобы собрать рабочий Lua или LuaFAR с GCC 4.6, нужно к CFLAGS добавлять -fno-omit-frame-pointer.
lua работает и без этого флага. luafar и с ним не работает. и даже с -O0. но вообще если -fomit-frame-pointer вызывает проблемы, то одна из основных возможных причин: неправильный каллинг конвеншн или что-то подобное.
Shmuel
Posts: 6167
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 31 times
Been thanked: 330 times

Re: LuaFAR — библиотека для создания плагинов на языке Lua

Post by Shmuel »

zg wrote:lua работает и без этого флага. luafar и с ним не работает. и даже с -O0. но вообще если -fomit-frame-pointer вызывает проблемы, то одна из основных возможных причин: неправильный каллинг конвеншн или что-то подобное.
Lua, собранный с GCC 4.6.1, не работает без этого флага. Для проверки нужно в скрипте (или интерактивно) вызвать error("any text") - вместо обычного вывода call-stack получаем падение.

Причина в том, что Lua, скомпилированный как Си (т.е. не как C++), использует setjump/longjump.

Что касается LuaFAR'а - ну не испытывал я его с GCC 4.6.1. Надеюсь, однако, разобраться.

Update:
Причина была в тривиальном баге. Массив структур, который по соглашению обязан заканчиваться структурой {NULL,NULL} - не заканчивался ею. GCC 4.5.2, очевидно, заполнял эти байты нулями, чего не скажешь о GCC 4.6.1. Короче - всё работает.
User avatar
zg
zero-gravity
Posts: 5866
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 155 times
Contact:

Re: LuaFAR — библиотека для создания плагинов на языке Lua

Post by zg »

Shmuel wrote:Lua, собранный с GCC 4.6.1, не работает без этого флага. Для проверки нужно в скрипте (или интерактивно) вызвать error("any text") - вместо обычного вывода call-stack получаем падение.
у меня правда gcc 4.6.2, но всё ок, красный мессаг с текстом.
Причина в том, что Lua, скомпилированный как Си (т.е. не как C++), использует setjump/longjump.
и?
Причина была в тривиальном баге. Массив структур, который по соглашению обязан заканчиваться структурой {NULL,NULL} - не заканчивался ею. GCC 4.5.2, очевидно, заполнял эти байты нулями, чего не скажешь о GCC 4.6.1. Короче - всё работает.
воооот. не всегда падения, вызванные переходом на новый компилятор связаны с багами нового компилятора :)
Shmuel
Posts: 6167
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 31 times
Been thanked: 330 times

Re: LuaFAR — библиотека для создания плагинов на языке Lua

Post by Shmuel »

zg wrote:у меня правда gcc 4.6.2, но всё ок, красный мессаг с текстом.
Возможно, 4.6.2 отличается, или TDM-сборка, которой я пользуюсь.
zg wrote:
Причина в том, что Lua, скомпилированный как Си (т.е. не как C++), использует setjump/longjump.
и?
Думаю, что frame pointer нужен в этом случае.
воооот. не всегда падения, вызванные переходом на новый компилятор связаны с багами нового компилятора :)
Ну вроде никто и не предполагал, что GCC виноват.
User avatar
zg
zero-gravity
Posts: 5866
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 155 times
Contact:

Re: LuaFAR — библиотека для создания плагинов на языке Lua

Post by zg »

Shmuel wrote:
zg wrote:у меня правда gcc 4.6.2, но всё ок, красный мессаг с текстом.
Возможно, 4.6.2 отличается, или TDM-сборка, которой я пользуюсь.
zg wrote:
Причина в том, что Lua, скомпилированный как Си (т.е. не как C++), использует setjump/longjump.
и?
Думаю, что frame pointer нужен в этом случае.
в gcc-ом майллисте это обсуждалось как раз перед выходом gcc 4.6.2 проблема в реализации setjump/longjump в msvcrt. в 4.7.* исправлено. ну видимо и в 4.6.2 от mingw тоже.
Ну вроде никто и не предполагал, что GCC виноват.
это в более широком смысле.
User avatar
zg
zero-gravity
Posts: 5866
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 155 times
Contact:

Re: LuaFAR — библиотека для создания плагинов на языке Lua

Post by zg »

1. не работает bit64.band(-1,0xff).
2. как бы чёрт с ним, но цвета типа 0xff000001 попадают в фарколор как -16777215. решается if color.ForegroundColor<0 then color.ForegroundColor=color.ForegroundColor+0x100000000 end
User avatar
zg
zero-gravity
Posts: 5866
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 155 times
Contact:

Re: LuaFAR — библиотека для создания плагинов на языке Lua

Post by zg »

editor.GetColor реализован неправильно.
входные параметры StringNumber,ColorItem.
выходные: StartPos, EndPos, Priority, Flags, Color, Owner.
Shmuel
Posts: 6167
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 31 times
Been thanked: 330 times

Re: LuaFAR — библиотека для создания плагинов на языке Lua

Post by Shmuel »

zg wrote:1. не работает bit64.band(-1,0xff).
2. как бы чёрт с ним, но цвета типа 0xff000001 попадают в фарколор как -16777215. решается if color.ForegroundColor<0 then color.ForegroundColor=color.ForegroundColor+0x100000000 end

editor.GetColor реализован неправильно.
входные параметры StringNumber,ColorItem.
выходные: StartPos, EndPos, Priority, Flags, Color, Owner.
Вроде всё починил.
User avatar
zg
zero-gravity
Posts: 5866
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 155 times
Contact:

Re: LuaFAR — библиотека для создания плагинов на языке Lua

Post by zg »

спасибо, работает.
Shmuel
Posts: 6167
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 31 times
Been thanked: 330 times

LuaFAR — библиотека для создания плагинов на языке Lua

Post by Shmuel »

Для пользующихся LuaFAR'ом - приложен клон плагина Fix Incorrect Names.
Помимо работы "по прямому назначению", может служить наглядным примером для написания простого плагина на LuaFAR.

Update: плагин переделан на макрос LuaMacro: http://forum.farmanager.com/viewtopic.p ... 77#p130177
Attachments
fin-3.0.0-x86.7z
(4.37 KiB) Downloaded 213 times
Post Reply

Return to “Обсуждение макросов”