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

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

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, в дистрибутиве)

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

Полезное по теме: См. также:
Shmuel
Posts: 6819
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 528 times

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

Post by Shmuel »

Latest post of the previous page:

John Doe wrote:Не могу сообразить откуда взять hDlg открытого в данный момент диалога.
ACTL_GETWINDOWINFO
User avatar
Smitis
Posts: 1709
Joined: Fri 18 Mar, 2005 12:51
Location: Питер
Has thanked: 23 times
Been thanked: 55 times

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

Post by Smitis »

John Doe wrote:Result = far.SendDlgMessage (hDlg, Msg, Param1, Param2)

Не могу сообразить откуда взять hDlg открытого в данный момент диалога.
http://forum.farmanager.com/viewtopic.php?f=4&t=7762
Разум когда-нибудь победит.
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

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

Post by John Doe »

far.Show (...)
Returns:
nothing

Почему бы ей не возвращать Item.text и Position?

Update
http://bugs.farmanager.com/view.php?id=2573
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

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

Post by John Doe »

far.Menu (Properties, Items [, BreakKeys])
Правильно ли я понимаю, что в случае закрытия меню по BreakKey прямой доступ к выбранному Item невозможен?
Только через Position?

(P.S. ранее в теме есть кое-что о Menu: http://forum.farmanager.com/viewtopic.p ... 020#p49020)
Shmuel
Posts: 6819
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 528 times

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

Post by Shmuel »

John Doe wrote:far.Show (...)
Returns:
nothing

Почему бы ей не возвращать Item.text и Position?
Вы правы, беру на заметку.
John Doe wrote:far.Menu (Properties, Items [, BreakKeys])
Правильно ли я понимаю, что в случае закрытия меню по BreakKey прямой доступ к выбранному Item невозможен?
Только через Position?
Если под "выбранным" понимается пункт, на котором стоял курсор в момент нажатия BreakKey, то да.
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

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

Post by John Doe »

Shmuel wrote:Если под "выбранным" понимается пункт, на котором стоял курсор в момент нажатия BreakKey, то да.
Возможно я ещё не совсем въехал, но ведь и BreakKey и Item нужны одновременно?

Я понимаю, что Item можно получить как Items[Position], но как-то это не слишком прямо.
Что если Items это не переменная, а значение (например возвращаемое far.MakeMenuItems)

Другими словами, может быть фунции Menu стоит возвращать 3 значения?
Или же поместить ссылку на Item в возвращаемый BreakKey?
(Эти 2 варианта просто первыми пришли в голову, на самом деле вариантов масса)
Shmuel
Posts: 6819
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 528 times

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

Post by Shmuel »

John Doe wrote:Возможно я ещё не совсем въехал, но ведь и BreakKey и Item нужны одновременно?
В случае нажатия BreakKey, "Item" - это таблица, содержащая BreakKey. Что касается выделенного пункта, то (как правило) нужно знать только его позицию (а чаще всего и это не нужно).
John Doe wrote:Я понимаю, что Item можно получить как Items[Position], но как-то это не слишком прямо.
Что если Items это не переменная, а значение (например возвращаемое far.MakeMenuItems)
Присвойте значение, возвращаемое far.MakeMenuItems, переменной. (Мне кажется, это надуманный пример).
John Doe wrote:Другими словами, может быть фунции Menu стоит возвращать 3 значения?
Или же поместить ссылку на Item в возвращаемый BreakKey?
Это то что сходу пришло в голову, наверняка есть и более красивые варианты
За несколько лет работы с far.Menu практической надобности в этом ни разу не было.
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

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

Post by John Doe »

Shmuel wrote:Присвойте значение, возвращаемое far.MakeMenuItems, переменной. (Мне кажется, это надуманный пример).
Разумеется.
В Far API вообще только 2 позиции и возвращаются (Position это возвращаемое значение, плюс BreakCode).

В LuaFAR это API представлено на более высоком уровне, но есть некоторая неестественность, сейчас попробую проиллюстрировать.

1. Есть список, из которого я выбираю один элемент, и жму Enter.
Тут никаких BreakKeys не используется, и far.Menu возвращает мне сам элемент, и позицию.
Поскольку функция вернула мне элемент, мне не нужно его вычислять как Items[Position].

2. Понадобилось добавить действий с тем же списком, например хочу обрабатывать ещё и F3/F4.
Но теперь функция возвращает уже не сам элемент списка, а BreakKey.

Вот это расхождение между 1 и 2 кажется мне неестественным: в первом случае возвращается одно, во-втором совсем другое.
И кстати в мануале об этом не сказано. Уже сказано.
Shmuel
Posts: 6819
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 528 times

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

Post by Shmuel »

John Doe wrote:Вот это расхождение между 1 и 2 кажется мне неестественным.
API far.Menu угловато, могу согласиться. Но:
1. Вы можете на его основе написать любой мыслимый враппер на Lua, то-есть сконструировать ваше API.
2. На данном этапе API far.Menu меняться не будет.
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

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

Post by John Doe »

Ясно. Не спорю.
Но можно было бы под шумок и причесать.
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

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

Post by John Doe »

far.RecursiveSearch (InitDir, Mask, UserFunc [, Flags])
Returns:
nothing

Что если возвращать результат UserFunc?
User avatar
Smitis
Posts: 1709
Joined: Fri 18 Mar, 2005 12:51
Location: Питер
Has thanked: 23 times
Been thanked: 55 times

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

Post by Smitis »

Не могу вкурить, что "generic plugin" должен вернуть из export.Open при, скажем, OPEN_PLUGINSMENU? Что это "considered a panel object" (из мануала)? Как я понял, этот объект потом передаётся другим функциям export.* как "plugin object" (из того же мануала)?
Разум когда-нибудь победит.
Shmuel
Posts: 6819
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 528 times

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

Post by Shmuel »

John Doe wrote:far.RecursiveSearch (InitDir, Mask, UserFunc [, Flags])
Returns:
nothing

Что если возвращать результат UserFunc?
Вам это практически уже потребовалось хоть раз?
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

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

Post by John Doe »

Именно поэтому и предложил.
Пример:

Code: Select all

local function execfile(name,...)
  local file
  far.RecursiveSearch (path,name,function(Item,fullname)
    file = fullname; return true
  end,far.Flags.FRS_RECUR)
  if file then dofile(file,...) end
end
А вот как могло бы быть

Code: Select all

local function execfile(name,...)
  local file = far.RecursiveSearch (path,name,function(Item,fullname) return fullname end,far.Flags.FRS_RECUR)
  if file then dofile(file,...) end
end
Shmuel
Posts: 6819
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 528 times

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

Post by Shmuel »

Smitis wrote:Не могу вкурить, что "generic plugin" должен вернуть из export.Open при, скажем, OPEN_PLUGINSMENU? Что это "considered a panel object" (из мануала)? Как я понял, этот объект потом передаётся другим функциям export.* как "plugin object" (из того же мануала)?
Это только для плагинов, создающих панели. Вы можете вернуть любую Lua-величину, например, таблицу.
Shmuel
Posts: 6819
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 528 times

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

Post by Shmuel »

John Doe wrote:Именно поэтому и предложил.
Пример: [....]
Функция-каллбак вызывается многократно. Какой смысл использовать именно возвращаемое значение её последнего вызова?
Post Reply

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