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

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

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

Post by John Doe » Wed 29 Jul, 2009 21:41

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

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

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

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

Полезное по теме: См. также:

Shmuel
Posts: 5229
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 16 times
Been thanked: 151 times

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

Post by Shmuel » Sat 10 Mar, 2012 22:34

Latest post of the previous page:

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: 5229
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 16 times
Been thanked: 151 times

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

Post by Shmuel » Sun 11 Mar, 2012 13:03

Shmuel wrote:
zg wrote:сейчас — только для диалога. для редактора просмотра — чистый инт. поэтому я и предложил разделить в зависимости от типа, чтобы не было ненужных сложностей.
Понятно. Видимо, надо мне будет пересмотреть реализацию этих вещей.
Переделал, всё должно работать сейчас.

User avatar
zg
zero-gravity
Posts: 5302
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 47 times
Contact:

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

Post by zg » Sun 11 Mar, 2012 19:52

что-то у меня самому собрать не получается.
вернее всё собирается, но падает при использовании внутри 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: 5229
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 16 times
Been thanked: 151 times

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

Post by Shmuel » Sun 11 Mar, 2012 21:03

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: 5302
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 47 times
Contact:

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

Post by zg » Sun 11 Mar, 2012 22:19

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: 5229
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 16 times
Been thanked: 151 times

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

Post by Shmuel » Sun 11 Mar, 2012 22:39

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: 5302
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 47 times
Contact:

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

Post by zg » Mon 12 Mar, 2012 00:56

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: 5229
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 16 times
Been thanked: 151 times

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

Post by Shmuel » Mon 12 Mar, 2012 01:06

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: 5302
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 47 times
Contact:

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

Post by zg » Mon 12 Mar, 2012 01:55

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: 5302
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 47 times
Contact:

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

Post by zg » Thu 15 Mar, 2012 23:26

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: 5302
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 47 times
Contact:

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

Post by zg » Thu 15 Mar, 2012 23:42

editor.GetColor реализован неправильно.
входные параметры StringNumber,ColorItem.
выходные: StartPos, EndPos, Priority, Flags, Color, Owner.

Shmuel
Posts: 5229
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 16 times
Been thanked: 151 times

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

Post by Shmuel » Fri 16 Mar, 2012 00:57

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: 5302
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 47 times
Contact:

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

Post by zg » Fri 16 Mar, 2012 02:08

спасибо, работает.

Shmuel
Posts: 5229
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 16 times
Been thanked: 151 times

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

Post by Shmuel » Wed 28 Mar, 2012 18:40

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

Update: плагин переделан на макрос LuaMacro: viewtopic.php?p=130177#p130177
Attachments
fin-3.0.0-x86.7z
(4.37 KiB) Downloaded 161 times

User avatar
Kerberos464
Posts: 1239
Joined: Wed 29 Jul, 2009 20:24
Location: Saint-Petersburg
Has thanked: 18 times
Been thanked: 1 time

Re: Spring — внедрение Lua в качестве макроязыка

Post by Kerberos464 » Thu 04 Oct, 2012 10:26

из-за того, что файлы lua5.1.dll и luafar3.dll имеют одинаковые имена в фаре обеих битностей, не получится держать оба фара в одной папке. обидно :(
16.09.2012 14:35:28 +0200 - build 2799 - все нативные плагины перестали работать.
30.09.2012 03:26:20 +0200 - build 2851 - все макросы перестали работать.
31.02.2029 25:61:61 +0200 - build 6666 - весь фар перестал работать.

Shmuel
Posts: 5229
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 16 times
Been thanked: 151 times

Re: Spring — внедрение Lua в качестве макроязыка

Post by Shmuel » Thu 04 Oct, 2012 10:50

Kerberos464 wrote:из-за того, что файлы lua5.1.dll и luafar3.dll имеют одинаковые имена в фаре обеих битностей, не получится держать оба фара в одной папке. обидно :(
Попробуйте положить эти файлы на %PATH%, в разные папки для x86 и x64, может сработает.

Max Rusov
Posts: 3600
Joined: Wed 23 Nov, 2005 11:11
Location: Москва-Питер
Been thanked: 7 times

Re: Spring — внедрение Lua в качестве макроязыка

Post by Max Rusov » Thu 11 Oct, 2012 21:19

А где можно посмотреть, как работать с far.CreateSettings? Особенно интересует Enum.

Post Reply

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