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

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

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

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

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

Post by zg »

Latest post of the previous page:

John Doe wrote: Sat 29 Jul, 2023 12:12 В реальном коде иначе.
не вижу в этом коде гарантии, что far.DialogFree вызовется допосле того, как завершится far.DialogRun.
Last edited by zg on Sun 30 Jul, 2023 05:02, edited 1 time in total.
User avatar
John Doe
Бюрократ
Posts: 14580
Joined: Wed 27 Apr, 2005 20:42
Location: github.com/FarManagerLegacy
Has thanked: 92 times
Been thanked: 514 times
Contact:

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

Post by John Doe »

Вероятно в вашем сообщении опечатка.
Потому что идея в обратном - иметь гарантию, что far.DialogFree НЕ вызовется до того, как завершится far.DialogRun.
Код дополнил.
https://t.me/FarManager — Telegram чат
User avatar
zg
zero-gravity
Posts: 6207
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 206 times
Contact:

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

Post by zg »

John Doe wrote: Sat 29 Jul, 2023 22:38 Вероятно в вашем сообщении опечатка.
да, с вероятностью 100%. исправил.
User avatar
John Doe
Бюрократ
Posts: 14580
Joined: Wed 27 Apr, 2005 20:42
Location: github.com/FarManagerLegacy
Has thanked: 92 times
Been thanked: 514 times
Contact:

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

Post by John Doe »

И в коде по прежнему нет гарантии?
https://t.me/FarManager — Telegram чат
User avatar
buniak_a_h
Posts: 4559
Joined: Sat 20 Apr, 2013 00:17
Location: Санкт-Петробад
Has thanked: 242 times
Been thanked: 674 times
Contact:

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

Post by buniak_a_h »

John Doe wrote: Sun 30 Jul, 2023 11:22 И в коде по прежнему нет гарантии?
Я прошу прощения, если не в тему, но мне глаз режет освобождение объекта-диалога в обработчике сообщений этого диалога. Может, стоит сделать освобождение через mf.postmacro? типа так:
John Doe wrote: Sat 29 Jul, 2023 12:12 … …
В реальном коде иначе.

Code: Select all

local function DlgProc (hDlg,msg,idx,Rec)
  if Msg==F.DN_CLOSE then
    far.Timer(0, function (t)
      t:Close()
      mf.postmacro(far.DialogFree, hDlg)
    end)
  end
end
Last edited by buniak_a_h on Sun 30 Jul, 2023 14:40, edited 1 time in total.
User avatar
zg
zero-gravity
Posts: 6207
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 206 times
Contact:

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

Post by zg »

John Doe wrote: Sun 30 Jul, 2023 11:22 И в коде по прежнему нет гарантии?
я не увидел, что поменялось.
User avatar
zg
zero-gravity
Posts: 6207
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 206 times
Contact:

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

Post by zg »

buniak_a_h wrote: Sun 30 Jul, 2023 14:40 Может, стоит сделать освобождение через mf.postmacro?
не стоит.
User avatar
John Doe
Бюрократ
Posts: 14580
Joined: Wed 27 Apr, 2005 20:42
Location: github.com/FarManagerLegacy
Has thanked: 92 times
Been thanked: 514 times
Contact:

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

Post by John Doe »

zg wrote: Sat 29 Jul, 2023 20:08 не вижу в этом коде гарантии, что far.DialogFree вызовется допосле того, как завершится far.DialogRun.
Вы имеете ввиду что в теории какой-нибудь левый обработчик ProcessDialogEvent может помешать (вроде бы нет..)?
Как тогда лучше поступить? Проверить что hDlg отсутствует в списке окон?
https://t.me/FarManager — Telegram чат
User avatar
zg
zero-gravity
Posts: 6207
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 206 times
Contact:

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

Post by zg »

John Doe wrote: Tue 01 Aug, 2023 11:25 Вы имеете ввиду что в теории какой-нибудь левый обработчик ProcessDialogEvent может помешать (вроде бы нет..)?
не обязательно.

Code: Select all

far.DialogRun(hdlg)
(*)
far.DialogFree можно вызывать начиная с точки (*). что вам гарантирует то, что вызов хоть через таймер, хоть через постмакро будет не до точки (*)? я таких гарантий не знаю. и да, если ProcessDialogEvent на постобработку DN_CLOSE поставить банальный вызов инпутбокса, то как раз всё и вызовется до завершения. не понимаю, что вам мешает сделать как-то:

Code: Select all

local flag=true
local function DlgProc (hDlg,msg,idx,Rec)
  if Msg==F.DN_CLOSE then
   flag=false
  end
end
local dialog=far.DialogInit(…,DlgProc)
while flag do
  far.DialogRun(dialog)
end
far.DialogFree(dialog)
?
Last edited by zg on Tue 01 Aug, 2023 21:18, edited 1 time in total.
User avatar
HaRT
Moderator
Posts: 11454
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 270 times
Been thanked: 417 times

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

Post by HaRT »

zg wrote: Tue 01 Aug, 2023 21:11 far.DialogRun можно вызывать начиная с точки (*)
Вы имеете в виду far.DialogFree?
Фар есть инструмент, а не нянька. © 2009 DrKnS
User avatar
zg
zero-gravity
Posts: 6207
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 206 times
Contact:

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

Post by zg »

HaRT wrote: Tue 01 Aug, 2023 21:14 Вы имеете в виду far.DialogFree?
да, исправил.
User avatar
John Doe
Бюрократ
Posts: 14580
Joined: Wed 27 Apr, 2005 20:42
Location: github.com/FarManagerLegacy
Has thanked: 92 times
Been thanked: 514 times
Contact:

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

Post by John Doe »

zg wrote: Tue 01 Aug, 2023 21:11 не понимаю, что вам мешает сделать как-то:
То что код, вызываемый из DlgProc в DN_CLOSE выполняется не синхронно а в mf.postmacro или в far.Timer.
Т.е. в том месте, где вы предлагаете проверять флаг, он ещё не отработал.
https://t.me/FarManager — Telegram чат
User avatar
zg
zero-gravity
Posts: 6207
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 206 times
Contact:

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

Post by zg »

John Doe wrote: Tue 01 Aug, 2023 21:23 То что код, вызываемый из DlgProc в DN_CLOSE выполняется не синхронно а в mf.postmacro или в far.Timer.
что мешает его выполнить после возврата из DialogRun?
User avatar
John Doe
Бюрократ
Posts: 14580
Joined: Wed 27 Apr, 2005 20:42
Location: github.com/FarManagerLegacy
Has thanked: 92 times
Been thanked: 514 times
Contact:

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

Post by John Doe »

zg wrote: Wed 02 Aug, 2023 01:59 что мешает его выполнить после возврата из DialogRun?
То, что одна из логических веток там (во внешней функции) возвращает управление в диалоговую процедуру, и отменяет закрытие диалога.
Но вероятно ради упрощения логики может быть проще закрыть и снова открыть диалог.
https://t.me/FarManager — Telegram чат
User avatar
zg
zero-gravity
Posts: 6207
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 206 times
Contact:

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

Post by zg »

John Doe, а переоткрываете вы диалог тоже в колбэке?
User avatar
John Doe
Бюрократ
Posts: 14580
Joined: Wed 27 Apr, 2005 20:42
Location: github.com/FarManagerLegacy
Has thanked: 92 times
Been thanked: 514 times
Contact:

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

Post by John Doe »

Да
https://t.me/FarManager — Telegram чат
Post Reply

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