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

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

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

Post by John Doe »

Latest post of the previous page:

AdvControl в случае ошибки возвращает 0.

Code: Select all

lm:post print(far.AdvControl (far.Flags.ACTL_GETWINDOWINFO,-2))
На это есть особые причины?
Если нет, то удобнее было бы nil
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 »

Сделаю сегодня.
User avatar
John Doe
Бюрократ
Posts: 12888
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 38 times
Been thanked: 295 times

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

Post by John Doe »

Shmuel wrote:Баг Фара, сломалось в 2897. На мантис, или связаться с lort.
mantis 2353

Ещё не получилось использовать LBUTTON.
Или это и не должно работать?
Поиск по форуму находит подобную жалобу четырёхлетней давности.
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 »

LuaFAR не производит выборочной обработки Break Keys. Следовательно - Фар. Можно прощёлкать неработающие клавиши и добавить к мантис 2353. RBUTTON тоже вроде не работает.
User avatar
DrKnS
Posts: 5686
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 9 times
Been thanked: 313 times

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

Post by DrKnS »

John Doe wrote:Или это и не должно работать?
Не должно.
User avatar
John Doe
Бюрократ
Posts: 12888
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 38 times
Been thanked: 295 times

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

Post by John Doe »

Значит ли это, что невозможно использовать мышиные нажатия в качестве BreakKeys? В Писании ни слова.

P.S.
User avatar
John Doe
Бюрократ
Posts: 12888
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 38 times
Been thanked: 295 times

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

Post by John Doe »

Shmuel wrote:
John Doe wrote:Вот это расхождение между 1 и 2 кажется мне неестественным.
API far.Menu угловато, могу согласиться. Но:
1. Вы можете на его основе написать любой мыслимый враппер на Lua, то-есть сконструировать ваше API.
2. На данном этапе API far.Menu меняться не будет.
Остановился пока на таком враппере:
  1. local function MenuEx(Props,Items,bKeys)
  2.   local Item,pos = far.Menu(Props,Items,bKeys)
  3.   local bk
  4.   if Item and Item.BreakKey then bk,Item = Item,Items[pos] end
  5.   return Item,pos,bk
  6. end
User avatar
John Doe
Бюрократ
Posts: 12888
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 38 times
Been thanked: 295 times

Re: Запуск макросов по событиям (build 3157+)

Post by John Doe »

hh.exe %FARHOME%\Encyclopedia\luafar_manual.chm::/221.html wrote:

Code: Select all

export.ProcessDialogEvent
...
  If ret is nil or false, then the event processing will continue.
  Otherwise, it is assumed that the plugin has processed the event, and ret
  will then be used as the return value of the dialog event handler.
С true/false понятно.
Но если обработчик события возвращает число отличное от 0, то происходит нечто третье.
Можно увидеть, вставив в FIN строчку do return 1 end.

Что бы это могло значить?
Shmuel
Posts: 6167
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 31 times
Been thanked: 330 times

Re: Запуск макросов по событиям (build 3157+)

Post by Shmuel »

John Doe wrote:
hh.exe %FARHOME%\Encyclopedia\luafar_manual.chm::/221.html wrote:

Code: Select all

export.ProcessDialogEvent
...
  If ret is nil or false, then the event processing will continue.
  Otherwise, it is assumed that the plugin has processed the event, and ret
  will then be used as the return value of the dialog event handler.
С true/false понятно.
Но если обработчик события возвращает число отличное от 0, то происходит нечто третье.
Можно увидеть, вставив в FIN строчку do return 1 end.

Что бы это могло значить?
LuaFAR передаёт число Фару. Дальше - читайте документацию Фара.
User avatar
John Doe
Бюрократ
Posts: 12888
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 38 times
Been thanked: 295 times

Re: Запуск макросов по событиям (build 3157+)

Post by John Doe »

Не согласен, я ведь процитировал документацию LuaFAR, и там о третьей возможности ни слова.

Если же открыть документацию фара, то там тоже только 2 варианта: 0 или 1
Shmuel
Posts: 6167
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 31 times
Been thanked: 330 times

Re: Запуск макросов по событиям (build 3157+)

Post by Shmuel »

John Doe wrote:Не согласен, я ведь процитировал документацию LuaFAR, и там о третьей возможности ни слова.
Процитировали, теперь перечитайте.
User avatar
John Doe
Бюрократ
Posts: 12888
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 38 times
Been thanked: 295 times

Запуск макросов по событиям (build 3157+)

Post by John Doe »

Вы правы, всё согласно документации.

Но хочется разобраться что же именно происходит в фаре.

Событие такое: if Event == F.DE_DLGPROCINIT and FarDialogEvent.Msg == F.DN_CLOSE
Варианты поведения:
- nil/false: обработка событий продолжается
- 0: обработка событий прекращается, диалог остаётся открытым
- число отличное от 0: обработка событий прекращается, диалог закрывается (не выполняя действия)
Shmuel
Posts: 6167
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 31 times
Been thanked: 330 times

Re: Запуск макросов по событиям (build 3157+)

Post by Shmuel »

Смотрите справку Фара по DN_CLOSE.
Если от ProcessDialogEvent поступил 0 (FALSE по терминологии Энциклопедии) - работа диалога продолжается.
Если от ProcessDialogEvent поступило число != 0 (TRUE по терминологии Энциклопедии) - "согласен с выходом из диалога". Это видимо значит немедленный выход, и родной обработчик Фара уже не получит управления. Документация Фара здесь тоже не однозначна.
User avatar
John Doe
Бюрократ
Posts: 12888
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 38 times
Been thanked: 295 times

Re: Запуск макросов по событиям (build 3157+)

Post by John Doe »

Ага, немного разобрались.
Документация фара тут на мой взгляд как раз однозначна.

В данном случае есть 2 независимых действия:
- продолжать ли обработку событий (за это отвечает Возвращаемое значение ProcessDialogEventW)
- выходить ли из диалога (значение ProcessDialogEventInfo.FarDialogEvent.Result определяет действие DN_CLOSE)

Сложность тут в том, что значение возвращаемое функцией LuaFAR всего одно, и оно должно соответствовать двум разных значениям FAR Plugin API.
Вроде бы всё совмещается, но в LuaFAR manual надо хотя бы подчеркнуть, что FALSE соответствует "0", а TRUE соответствует "не 0".
Shmuel
Posts: 6167
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 31 times
Been thanked: 330 times

Re: Запуск макросов по событиям (build 3157+)

Post by Shmuel »

John Doe wrote:Сложность тут в том, что значение возвращаемое функцией LuaFAR всего одно, и оно должно соответствовать двум разных значениям FAR Plugin API.
Вроде бы всё совмещается, но в LuaFAR manual надо хотя бы подчеркнуть, что под NULL соответствует "0", а TRUE соответствует "не 0".
Это всё не так. LuaFAR возвращает число. А дальше разбирайтесь, какое число вам надо.
User avatar
John Doe
Бюрократ
Posts: 12888
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 38 times
Been thanked: 295 times

Re: Запуск макросов по событиям (build 3157+)

Post by John Doe »

Вот это "разбирайтесь" и нуждается в пояснении, потому что
- правду приходится искать в стороннем источнике - Энциклопедии, а в ней фигурируют TRUE и FALSE
- приведение типов в C и Lua работает по разному, например 0 это true в Lua, и FALSE в Энциклопедии.
Акцентировать этот момент стоит.

И второе.
"and ret will then be used as the return value of the dialog event handler"
Из этого фрагмента не ясно, что значение будет использовано не только как "return value", но и в ProcessDialogEventInfo.FarDialogEvent.Result.
Post Reply

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