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

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

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

Post by John Doe » Wed 29 Jul, 2009 21:41

Библиотека 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: 12458
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 33 times
Been thanked: 194 times

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

Post by John Doe » Mon 30 Oct, 2017 17:39

Latest post of the previous page:

Shmuel wrote:
Mon 30 Oct, 2017 17:32
Вы специально сочинили пример, где BreakKey==Esc
Увы, это как раз пример из реального скрипта, и смысл указывать эту клавишу заключается в том, чтобы иметь возможность перед закрытием меню запомнить позицию.

Но соль ведь совсем в другом: позиция (в этом частном случае) возвращается несуществующая, что не было предусмотрено в моём скрипте (поскольку данный случай нигде не документирован), и приводило к падению.
В рамках данной темы дискутировать не о чем, да.

User avatar
John Doe
Бюрократ
Posts: 12458
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 33 times
Been thanked: 194 times

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

Post by John Doe » Sat 27 Jan, 2018 13:55

Функция panel.Get/SetUserScreen принимает первый [опциональный] параметр хэндл панели.
От этого параметра в настоящий момент не зависит ничего (да и в перспективе сложно представить, на что бы он мог влиять).

Может быть убрать его совсем?

P.S.
Раньше это не имело никакого значения, но теперь есть и второй параметр, а значит первый придётся всё-таки указывать хотя бы как nil.

Shmuel
Posts: 5897
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 23 times
Been thanked: 218 times

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

Post by Shmuel » Sat 27 Jan, 2018 14:10

John Doe wrote:
Sat 27 Jan, 2018 13:55
Может быть убрать его совсем?
Убрать легко, но я склоняюсь к тому, чтобы оставить - для консистентности с прочими функциями таблицы panel.

User avatar
John Doe
Бюрократ
Posts: 12458
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 33 times
Been thanked: 194 times

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

Post by John Doe » Mon 14 May, 2018 08:30

В мануале стоит добавить ссылку на https://api.farmanager.com/ru/fsf/farclock.html

Shmuel
Posts: 5897
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 23 times
Been thanked: 218 times

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

Post by Shmuel » Mon 14 May, 2018 13:50

Ссылка добавлена.

User avatar
John Doe
Бюрократ
Posts: 12458
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 33 times
Been thanked: 194 times

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

Post by John Doe » Mon 29 Oct, 2018 09:37

Несколько методов объекта Settings Control принимают параметр Root, тип которого в мануале указан как integer.
Однако если передать nil, то это не приведёт к ошибке.

Не правильнее в этом случае вызывать runtime error, как это происходит если например передать в параметре Root строку, или логическое значение?

Shmuel
Posts: 5897
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 23 times
Been thanked: 218 times

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

Post by Shmuel » Mon 29 Oct, 2018 10:11

John Doe, да, несоответствие документации и реализации.
В реализации тип этого параметра не "integer", а "flag", а для "флагов" значение nil всегда является допустимым и трансформируется в 0.
Может просто документацию поправить?

User avatar
John Doe
Бюрократ
Posts: 12458
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 33 times
Been thanked: 194 times

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

Post by John Doe » Mon 29 Oct, 2018 11:40

Shmuel wrote:
Mon 29 Oct, 2018 10:11
Может просто документацию поправить?
Я рассуждаю так: nil в данном контексте смысла заведомо не имеет, и если он всё же передаётся, то может означать лишь то, что в коде ошибка (неинициализированная переменная).
Если передавать nil как 0 то ошибку можно замаскировать, что не очень хорошо.

Shmuel
Posts: 5897
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 23 times
Been thanked: 218 times

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

Post by Shmuel » Mon 29 Oct, 2018 11:51

Этот параметр - флаг. Для флагов nil -> 0. 0 == FSSF_ROOT.
В LuaFAR API есть много функций с опциональными параметрами и не обязательно последними в списке параметров. Во всех этих случаях передача неинициализированной переменной может быть отловлена только ран-тайм тестированием. Данный случай подпадает под эту категорию (после правки документации). Если вы убеждены, что это не тот случай, откройте тикет на Мантисе.

User avatar
John Doe
Бюрократ
Posts: 12458
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 33 times
Been thanked: 194 times

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

Post by John Doe » Mon 29 Oct, 2018 13:15

В данном контексте опциональность параметра Root применима лишь в одном методе:

Code: Select all

items = obj:Enum (Root[, from[, to]])
На мой взгляд, пользы от возможности опустить этот параметр мало.
Shmuel wrote:
Mon 29 Oct, 2018 11:51
Если вы убеждены, что это не тот случай, откройте тикет на Мантисе.
Если вы решите, что изменения документации достаточно, то спорить не стану.

Update
https://bugs.farmanager.com/view.php?id=3663
Last edited by John Doe on Tue 30 Oct, 2018 11:35, edited 1 time in total.

Shmuel
Posts: 5897
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 23 times
Been thanked: 218 times

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

Post by Shmuel » Mon 29 Oct, 2018 13:42

John Doe wrote:
Mon 29 Oct, 2018 13:15
Если вы решите, что изменения документации достаточно, то спорить не стану.
Скажем так, мне сейчас как бы не хочется этим заниматься. Поэтому (как уже сказано выше) можно открыть тикет на мантисе.

User avatar
John Doe
Бюрократ
Posts: 12458
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 33 times
Been thanked: 194 times

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

Post by John Doe » Tue 30 Oct, 2018 11:16

far.FreeSettings
Желательно в мануале добавить примечание, поясняющее особенности функции, с перекрёстной ссылкой на метод схожего назначения.

Update
https://bugs.farmanager.com/view.php?id=3665
Last edited by John Doe on Tue 30 Oct, 2018 15:49, edited 1 time in total.

User avatar
DrKnS
Posts: 5402
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 6 times
Been thanked: 231 times

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

Post by DrKnS » Tue 30 Oct, 2018 12:06

Не холивара ради - а какова вообще область применения этой функции? Особенно учитывая то, что пока настройки не освободишь - они не запишутся?

User avatar
John Doe
Бюрократ
Posts: 12458
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 33 times
Been thanked: 194 times

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

Post by John Doe » Tue 30 Oct, 2018 12:11

DrKnS wrote:
Tue 30 Oct, 2018 12:06
Особенно учитывая то, что пока настройки не освободишь - они не запишутся?
А вот это не очевидно. Где можно почитать подробнее?

Shmuel
Posts: 5897
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 23 times
Been thanked: 218 times

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

Post by Shmuel » Tue 30 Oct, 2018 12:24

John Doe wrote:
Tue 30 Oct, 2018 11:16
far.FreeSettings
Желательно в мануале добавить примечание, поясняющее особенности функции, с перекрёстной ссылкой на метод схожего назначения.
Мантис.
DrKnS wrote:
Tue 30 Oct, 2018 12:06
а какова вообще область применения этой функции?
Область применения - освободить все открытые хэндлы скопом, без необходимости отслеживать каждый из них (иногда можно забыть).
В период до LuaMacro, эта функция вообще вызывалась луафар'ом автоматически при возвращении управления от плагина Фару, впоследствии я автоматическое освобождение убрал.
Last edited by Shmuel on Tue 30 Oct, 2018 12:28, edited 1 time in total.

User avatar
DrKnS
Posts: 5402
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 6 times
Been thanked: 231 times

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

Post by DrKnS » Tue 30 Oct, 2018 12:26

John Doe wrote:
Tue 30 Oct, 2018 12:11
Где можно почитать подробнее?
В changelog

User avatar
DrKnS
Posts: 5402
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 6 times
Been thanked: 231 times

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

Post by DrKnS » Tue 30 Oct, 2018 12:36

Shmuel wrote:
Tue 30 Oct, 2018 12:24
без необходимости отслеживать каждый из них
Ну это как бы не память, которую можно доверить garbage collector'у и оставить на потом. При освобождении этих хендлов происходят сайд-эффекты, так что их откладывание, накапливание и закрытие в неизвестном порядке, наверное, может иметь неожиданные последствия.

Post Reply

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