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

Здесь обсуждается всё, что касается макросов.
User avatar
John Doe
Бюрократ
Posts: 11075
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 11 times
Been thanked: 64 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, в дистрибутиве)

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

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

User avatar
John Doe
Бюрократ
Posts: 11075
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 11 times
Been thanked: 64 times

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

Post by John Doe » Tue 24 Feb, 2015 14:55

Latest post of the previous page:

Спасибо, совсем забыл о такой возможности.

gotar
Posts: 293
Joined: Sun 06 Sep, 2009 12:34
Has thanked: 8 times

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

Post by gotar » Tue 24 Feb, 2015 21:26

Shmuel wrote:А чего там разбираться, когда всё уже утряслось годы назад. Когда я начинаю новый плагин, на это уходит не более 5 минут.
Может быть Вы опубликуете исходные тексты каких нибудь из своих плагинов, кроме Hello world?

Shmuel
Posts: 5041
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 11 times
Been thanked: 133 times

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

Post by Shmuel » Tue 24 Feb, 2015 21:31

gotar wrote: Может быть Вы опубликуете исходные тексты каких нибудь из своих плагинов, кроме Hello world?
- https://github.com/shmuz/far_plugins
- LuaMacro

gotar
Posts: 293
Joined: Sun 06 Sep, 2009 12:34
Has thanked: 8 times

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

Post by gotar » Tue 24 Feb, 2015 21:45

https://github.com/shmuz/far_plugins/bl ... d/Makefile можно использовать как образец для подражения или лучше https://github.com/shmuz/far_plugins/bl ... l/Makefile

Примечание модератора: продолжение тут http://forum.farmanager.com/viewtopic.p ... 55#p128355

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

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

Post by zg » Sat 21 Mar, 2015 00:05

правильно ли я понимаю, что для нормальной работы lua-плагин должен всегда экспортировать exitfar?

Shmuel
Posts: 5041
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 11 times
Been thanked: 133 times

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

Post by Shmuel » Sat 21 Mar, 2015 08:32

zg wrote: правильно ли я понимаю, что для нормальной работы lua-плагин должен всегда экспортировать exitfar?
Насколько я знаю, то нет. Почему возник такой вопрос?

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

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

Post by zg » Sat 21 Mar, 2015 13:46

в luaplug.c баг был. например в LuaFAR History мог остаться не удалённый regex. при выходе в DestroyGlobal сначала удалялся g->StartupInfo, а потом делалось lua_close, где дёргался regex:__gc из которого была попытка вызвать g->StartupInfo.RegexControl.
при наличии exitfar lua_close зовётся оттуда и проблемы не возникает. как минимум LuaFAR History стоит пересобрать.

Shmuel
Posts: 5041
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 11 times
Been thanked: 133 times

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

Post by Shmuel » Sat 21 Mar, 2015 14:38

Баг подтверждаю. Странно, что ни у меня, ни у других при этом ничего не падало (по крайней мере, не помню подобных репортов).
Насчёт пересборки - не помешает (LF History в любом случае пересоберётся, т.к. сегодня или завтра будет новая версия).

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

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

Post by zg » Sat 21 Mar, 2015 15:58

либо был exitfar, либо память не успевала измениться после удаления, либо gc срабатывал раньше.

User avatar
John Doe
Бюрократ
Posts: 11075
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 11 times
Been thanked: 64 times

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

Post by John Doe » Wed 08 Apr, 2015 20:40

far.SubscribeDialogDrawEvents (в отличии от editor.SubscribeChangeEvent) очень простая функция: действует глобально (не только в текущем диалоге), и нет счётчика ссылок.

Реальной практической необходимости в совершенствовании far.SubscribeDialogDrawEvents у меня нет, но может быть стоит в документации подчеркнуть отличия в этих двух с виду однотипных функциях?

Shmuel
Posts: 5041
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 11 times
Been thanked: 133 times

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

Post by Shmuel » Wed 08 Apr, 2015 21:01

John Doe wrote: может быть стоит в документации подчеркнуть отличия в этих двух с виду однотипных функциях?
Документирование вгоняет меня в депрессию. :(
Но если предложите буквальные фразы, которые можно будет вставить, или патч, тогда уже будет теплее.

User avatar
John Doe
Бюрократ
Posts: 11075
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 11 times
Been thanked: 64 times

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

Post by John Doe » Wed 08 Apr, 2015 21:13

Note:
  • This function has global action (unlike editor.SubscribeChangeEvent), i.e. it affects all dialogs, until explicitly disabled.

IgorZ
Posts: 448
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 5 times
Been thanked: 8 times

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

Post by IgorZ » Fri 19 Jun, 2015 06:58

Обнаружено странное поведение при нажатии шорткатов в диалогах. Проверено на чистой последней ночной версии (4392).
Вот демонстрационный код.

В диалоге имеем два элемента с одинаковым шорткатом. Обработчик перехватывает шорткат и, если активен первый элемент, то самостоятельно перекидывает на второй, а если активен второй, то на первый. Системе говорим ничего не делать. Если шорткат русский, то всё работает в соответствии c кодом, а если шорткат английский, то отработка нажатия и, соответственно, сообщение far.Message выдаётся 2 раза: первый - нормальный, о переходе на нужный элемент, а второй - о переходе обратно. ControlInput в обоих случаях отрабатывает один раз.
Не знаю, ошибка это LuaFAR или самого Far-а, поэтому пока пощу сюда. Если же LuaFAR ни при чём, то запощу в соответствующую тему об ошибках Far-а. Ну или сами, если удобно.

Shmuel
Posts: 5041
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 11 times
Been thanked: 133 times

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

Post by Shmuel » Fri 19 Jun, 2015 08:29

Для проверки достаточно одного элемента с шорткатом, и не надо никаких хитрых переключений.
Если шорткат русский, то DN_HOTKEY приходит 1 раз; если английский, то 2 раза. Вот и всё.
Полагаю, что LuaFAR к этой проблеме отношения не имеет.

P.S. Да, существенным моментом для проявления неисправности является возвращение Фару FALSE из процедуры (то-есть указание отменить обработку клавиши).

User avatar
John Doe
Бюрократ
Posts: 11075
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 11 times
Been thanked: 64 times

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

Post by John Doe » Fri 19 Jun, 2015 15:03

Shmuel wrote: Если шорткат русский, то DN_HOTKEY приходит 1 раз; если английский, то 2 раза. Вот и всё.
Уточнение.
Если нажатая клавиша и хоткей относятся одной раскладке, то приходит 2 сообщения.
Если нажатая клавиша и хоткей из разных раскладок, то приходит 1 сообщение.

Code: Select all

local F = far.Flags
local Items = {
--[[01]] {F.DI_DOUBLEBOX,   3, 1,20, 4,0,0,0,0,"Test hotkeys in dialog"},
--[[02]] {F.DI_CHECKBOX,    5, 2, 0, 2,2,0,0,F.DIF_3STATE,"&english"},
--[[03]] {F.DI_CHECKBOX,    5, 3, 0, 3,2,0,0,F.DIF_NONE,"&русский"},
}
far.Dialog("",-1,-1,22,6,nil,Items,nil,function(hDlg,Msg,Param1,Param2)
  if Msg==F.DN_HOTKEY then
    --far.Message("Hotkey: "..tostring(Param2.UnicodeChar))
    win.OutputDebugString(Param2.UnicodeChar)
    return 0
  end
end)
(следует учитывать, что если нажимается клавиша с Alt, то всегда приходит символ из английской раскладки, даже если активна русская)

User avatar
John Doe
Бюрократ
Posts: 11075
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 11 times
Been thanked: 64 times

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

Post by John Doe » Sat 20 Jun, 2015 19:33

Правильно ли я понимаю, что LuaFAR не позволяет для BreakKeys меню различать правые/левые модификаторы?

Shmuel
Posts: 5041
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 11 times
Been thanked: 133 times

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

Post by Shmuel » Sat 20 Jun, 2015 19:52

John Doe wrote: Правильно ли я понимаю, что LuaFAR не позволяет для BreakKeys меню различать правые/левые модификаторы?
LuaFAR подставляет вместо 'A' LEFT_ALT_PRESSED, а вместо 'C' - LEFT_CTRL_PRESSED.
Функция Фара Menu() при этом срабатывает как на левые, так и на правые модификаторы.

Post Reply

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

Who is online

Users browsing this forum: No registered users and 3 guests