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

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

Post by Shmuel »

Latest post of the previous page:

IgorZ wrote: Tue 21 Dec, 2021 10:13 Кажется, я нашёл ошибку в реализации win.MoveFile.
Да, это так.
@Far Group:
Нужно в файле luamacro\luafar\win.c убрать else в каждой из строчек 594,595,596.
То есть, чтобы вместо else if был просто if в каждой из этих строчек.
User avatar
DrKnS
Posts: 6114
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 12 times
Been thanked: 426 times

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

Post by DrKnS »

Shmuel, спасибо, убрал.

Попутно, https://github.com/FarGroup/FarManager/ ... cro.c#L163
Говорят, это unreachable code (что логично, т.к. во всех блоках выше return). Оно реально лишнее и можно выкинуть или там где-то баг?
Shmuel
Posts: 6819
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 528 times

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

Post by Shmuel »

DrKnS wrote: Fri 24 Dec, 2021 16:21 Оно реально лишнее и можно выкинуть или там где-то баг?
Да, можно выкинуть, поскольку unreachable.
Почему-то GCC не даёт этого варнинга, видимо варнинг подавляется флагами в мейк-файле.
Shmuel
Posts: 6819
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 528 times

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

Post by Shmuel »

DrKnS, на ру-борде предложили добавить ф-цию win.GetSystemTime.
Я на линуксе добавил, ну и сделал заодно для Фар3. Если сочтёте нужным, пожалуйста примените.
win.c.diff
(733 Bytes) Downloaded 86 times
luafar_manual.tsi.diff
(538 Bytes) Downloaded 83 times
Shmuel
Posts: 6819
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 528 times

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

Post by Shmuel »

DrKnS, ещё бы второй патчик применить.
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: update luautf8 library to 0.1.5

New functions:
  • utf8.isvalid(s) -> boolean
  • utf8.clean(s[, replacement_string]) -> cleaned_string, was_valid
  • utf8.invalidoffset(s[, init]) -> offset

    See https://github.com/starwing/luautf8 for more info.

    Note:
    utf8.utf8valid is rather obsolete now.
https://t.me/FarManager — Telegram чат
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 отсутствует функция FSF.CompareStrings, которая появилась в 5150 и рекомендуется к использованию вместо FSF.LStricmp и FSF.LStrnicmp.
Две последние даже удалены из Энциклопедии (соответственно ссылки на них в luafar_manual - мёртвые)
https://t.me/FarManager — Telegram чат
Shmuel
Posts: 6819
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 528 times

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

Post by Shmuel »

John Doe wrote: Fri 31 Mar, 2023 19:40 Обнаружил, что в LuaFAR отсутствует функция FSF.CompareStrings, которая появилась в 5150
Мне смутно помнится, что не стал добавлять ввиду того, что ф-ция не показалась мне полезной.
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 »

Code: Select all

local F = far.Flags
local handle = far.DialogInit("", -1, -1, 1, 1, nil, {{F.DI_TEXT,0,0,0,0,0,0,0,0,0}}, 0, function (hDlg, Msg)
  if Msg==F.DN_CLOSE then
    far.DialogFree(hDlg)
    far.Show()
  end
end)
far.DialogRun(handle)
При закрытии получаю ошибку attempt to call a table value.
Видоизменив код я могу добиться того, что вместо table будет userdata или number, без видимой связи с исходным кодом.
Это непонятное сообщение - возможно ошибка в LuaFar.

А так например фар падает:
Я понимаю что мой код тут некорректен, но ввиду странностей описанных выше допускаю что падает всё же не поэтому.
https://t.me/FarManager — Telegram чат
User avatar
zg
zero-gravity
Posts: 6016
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

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

Post by zg »

John Doe, зачем вы удаляете диалог в диалоговой процедуре а потом его ещё и перерисовываете?
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 »

zg, в реальном коде всё было немного не так.
Диалог удалялся в far.Timer(), а far.Show возник случайно, в процессе отладки.
https://t.me/FarManager — Telegram чат
User avatar
zg
zero-gravity
Posts: 6016
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

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

Post by zg »

John Doe wrote: Wed 26 Jul, 2023 22:26Диалог удалялся в far.Timer()
зачем?
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 »

По дизайну так: в DN_CLOSE выполняется коллбек, и в зависимости от условий или закрытие предотвращается (ошибка), или выполняется работа и диалог переоткрывается (без удаления).
Поскольку логика находится в коллбеке, всё должно быть выполнено в одном месте, поэтому всё в DN_CLOSE.
far.Timer или mf.postmacro - чтобы выйти за пределы DN_CLOSE.

Возможен ли тут другой дизайн - наверняка.
Но у меня и так вроде без проблем, просто в процессе дебага нашёл странность, которой и поделился.
https://t.me/FarManager — Telegram чат
User avatar
zg
zero-gravity
Posts: 6016
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

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

Post by zg »

John Doe wrote: Wed 26 Jul, 2023 23:43Но у меня и так вроде без проблем
если far.DialogFree вызывается до того, как завершится far.DialogRun, а у вас выглядит именно так, то вам просто кажется, что без проблем.
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 »

zg wrote: Thu 27 Jul, 2023 00:31 а у вас выглядит именно так
В примерах выше - да.
В реальном коде иначе.

Code: Select all

local function DlgProc (hDlg,msg,idx,Rec)
  if Msg==F.DN_CLOSE then
    far.Timer(0, function (t)
      t:Close()
      far.DialogFree(hDlg)
    end)
  end
end
https://t.me/FarManager — Telegram чат
User avatar
zg
zero-gravity
Posts: 6016
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 185 times
Contact:

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

Post by zg »

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.
Post Reply

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