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

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

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

Post by John Doe »

Latest post of the previous page:

Да
https://t.me/FarManager — Telegram чат
User avatar
John Doe
Бюрократ
Posts: 14506
Joined: Wed 27 Apr, 2005 20:42
Location: github.com/FarManagerLegacy
Has thanked: 90 times
Been thanked: 501 times
Contact:

Message + Fullwidth-aware rendering

Post by John Doe »

Если плагин выгружает сам себя, а потом сам же пытается загрузить себя же, то LoadPlugin возвращает хэндл как будто операция удалась.
Однако на самом деле плагин не загружается, и вызов GetPluginInformation возвращает nil.

Code: Select all

local psi = far.PluginStartupInfo()
local handle = far.FindPlugin("PFM_GUID", psi.PluginGuid)
assert(far.UnloadPlugin(handle))
handle = assert(far.LoadPlugin("PLT_PATH", psi.ModuleName), "LoadPlugin failed")
assert(far.GetPluginInformation(handle), "GetPluginInformation failed")
Это вообще ожидаемое поведение?
https://t.me/FarManager — Telegram чат
Shmuel
Posts: 7178
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 48 times
Been thanked: 621 times

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

Post by Shmuel »

Код сейчас не смотрел, предположительно происходит следующее:
  • покуда плагин не вернулся из OpenW, он не выгружается, а только помечается для выгрузки
  • его handle ещё жив, поэтому LoadPlugin() его возвращает
  • GetPluginInformation() как видно анализирует, что плагин помечен для выгрузки, и возвращает FALSE
Насколько это логично, трудно сказать.
Last edited by Shmuel on Thu 13 Jun, 2024 22:58, edited 1 time in total.
User avatar
John Doe
Бюрократ
Posts: 14506
Joined: Wed 27 Apr, 2005 20:42
Location: github.com/FarManagerLegacy
Has thanked: 90 times
Been thanked: 501 times
Contact:

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

Post by John Doe »

Code: Select all

local F = far.Flags
far.Dialog(nil,-1,-1,22,3,nil,{
  {F.DI_DOUBLEBOX, 0, 0, 22, 2, 0},
  {F.DI_COMBOBOX,  2, 1, 18, 0,{
    {Text="item1"},
    --SelectIndex=1
  }}
})
Без SelectIndex выпадающий список не функционирует.
Мне кажется или это поведение комбобокса изменилось недавно?
https://t.me/FarManager — Telegram чат
Shmuel
Posts: 7178
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 48 times
Been thanked: 621 times

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

Post by Shmuel »

John Doe wrote: Tue 16 Sep, 2025 23:30 Мне кажется или это поведение комбобокса изменилось недавно?
Изменилось в 6548. И не в LuaFAR, вроде бы.
User avatar
zg
zero-gravity
Posts: 6199
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 206 times
Contact:

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

Post by zg »

Shmuel wrote: Wed 17 Sep, 2025 06:20Изменилось в 6548. И не в LuaFAR, вроде бы.
6557.
User avatar
Kadaner
Posts: 69
Joined: Sun 28 Jan, 2018 05:00
Has thanked: 7 times
Been thanked: 3 times

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

Post by Kadaner »

zg, спасибо за исправление. Однако, я не думаю, что я трогал что-либо касающееся комбобокса в 6548. Было бы интересно понять, как я это сломал.
Last edited by Kadaner on Thu 18 Sep, 2025 01:43, edited 1 time in total.
User avatar
Kadaner
Posts: 69
Joined: Sun 28 Jan, 2018 05:00
Has thanked: 7 times
Been thanked: 3 times

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

Post by Kadaner »

Наверное, вот здесь?
User avatar
zg
zero-gravity
Posts: 6199
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 206 times
Contact:

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

Post by zg »

Kadaner wrote: Thu 18 Sep, 2025 02:01Наверное, вот здесь?
да, вы этот код поместили под условие, что это только листбокс/комбобокс, а метод для комбобокса вызывался как раз перед установкой флага.
User avatar
Kadaner
Posts: 69
Joined: Sun 28 Jan, 2018 05:00
Has thanked: 7 times
Been thanked: 3 times

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

Post by Kadaner »

zg wrote: Thu 18 Sep, 2025 09:10 вы этот код поместили под условие
Да, мне надо было переставить селекцию до вызова Parent->SendMessage(DN_LISTCHANGE, . . . (иначе функция с параметром по умолчанию подхватывала не тот элемент). А если месседж вернул ноль, то надо было восстановить селекцию.

Почему я положил всё это по условие листбокс/комбобокс? Наверное потому, что я не понимаю, что будет, если ни то и ни другое. И, кажется, не нашёл в коде мест, где такое случается (очевидно пропустил то, которое Вы исправили) и, кажется, решил попробовать, что будет, а потом забыл. Вот, узнал.

Не можете ли Вы показать мне VMenu, в котором ни тот ни другой флаг не поставлен? Что это за объект? Если он существует, то я его сломал, и надо будет исправить условие.
User avatar
John Doe
Бюрократ
Posts: 14506
Joined: Wed 27 Apr, 2005 20:42
Location: github.com/FarManagerLegacy
Has thanked: 90 times
Been thanked: 501 times
Contact:

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

Post by John Doe »

Code: Select all

far.Message"我们就不会使用 Cookie 来实现这些额外目的。"

Code: Select all

   ╔═════════ Message ═════════╗
我们就不会使用 Cookie 来       ║
   ╟───────────────────────────╢
   ║          { OK }           ║
   ╚═══════════════════════════╝
Кто виноват и можно ли что-то сделать?
https://t.me/FarManager — Telegram чат
Shmuel
Posts: 7178
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 48 times
Been thanked: 621 times

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

Post by Shmuel »

John Doe wrote: Sat 10 Jan, 2026 23:40 Кто виноват и можно ли что-то сделать?
Виноват LuaFAR. Из самого Фара это выглядит так:
image.png
image.png (2.24 KiB) Viewed 889 times
Сделать что-то, наверное, можно.
Вот как это в far2m (far.Message):
image.png
image.png (9.24 KiB) Viewed 889 times
Last edited by Shmuel on Sun 11 Jan, 2026 00:14, edited 2 times in total.
Shmuel
Posts: 7178
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 48 times
Been thanked: 621 times

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

Post by Shmuel »

Тупо перетащил из luafar от far2m. Кажется стало нормально.
Shmuel
Posts: 7178
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 48 times
Been thanked: 621 times

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

Post by Shmuel »

Shmuel wrote: Sun 11 Jan, 2026 01:03 Тупо перетащил из luafar от far2m. Кажется стало нормально.
Нет, нормально не стало. Всё зависит от этих опций:
[ ] Use Virtual Terminal for rendering
[ ] Fullwidth-aware rendering

И luafar, кажется, тут ни причём.
Last edited by Shmuel on Sun 11 Jan, 2026 10:20, edited 1 time in total.
User avatar
John Doe
Бюрократ
Posts: 14506
Joined: Wed 27 Apr, 2005 20:42
Location: github.com/FarManagerLegacy
Has thanked: 90 times
Been thanked: 501 times
Contact:

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

Post by John Doe »

Shmuel wrote: Sun 11 Jan, 2026 01:03 Тупо перетащил из luafar от far2m.
У меня обе опции были включены, и после обновления никакой разницы я не увидел.
Получается сейчас единственный режим не ломающий интерфейс окна - это если обе опции выключить.
При этом правда иероглифы сбиваются в кучу - интервалов между ними нет (всё как на вашем скриншоте).

viewtopic.php?p=181918#p181918
https://t.me/FarManager — Telegram чат
IgorZ
Posts: 819
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 16 times
Been thanked: 98 times

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

Post by IgorZ »

Обнаружил очень странное поведение функций, работающих с временем файла.
Собственно, вот что конкретно:

Для "1" время последней записи возвращается корректно, для "2" - на час меньше. В третьей строке - время запуска макроса. Проверял, не изменится ли результат через час. Не изменился.
Вот макрос:
Пробовал заменять win.GetFileInfo на win.GetFileTimes - происходит то же самое.
При этом сам Far и другие плагины (проверил на TmpPanel и NTFS File Information) выводят время обоих файлов корректно. Куда копать - просто не понимаю.
Far v3.0.6631.0 x86. ОС - Windows XP Professional SP3. Файловая система на диске - NTFS.
Прилагаю в архиве макрос и тестовые файлы на всякий случай.
Attachments
TEST.7z
(442 Bytes) Downloaded 4 times
Post Reply

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