Page 46 of 53

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

Posted: Wed 29 Jul, 2009 21:41
by John Doe
Библиотека LuaFAR делает возможным написание плагинов на языке Lua, предоставляя им адаптированную версию FAR API.

Входит в состав FAR manager (начиная с 3.0 build 2851), и доступна для использования в макросах.

Справка по функциям библиотеки — luafar_manual.chm (в дистрибутиве, папка Encyclopedia).
Мануал весьма лаконичен, предполагает что вы ориентируетесь в FAR Plugins API (FarEncyclopedia.ru.chm, в дистрибутиве)

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

Полезное по теме: См. также:

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

Posted: Mon 14 May, 2018 13:50
by Shmuel

Latest post of the previous page:

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

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

Posted: Mon 29 Oct, 2018 09:37
by John Doe
Несколько методов объекта Settings Control принимают параметр Root, тип которого в мануале указан как integer.
Однако если передать nil, то это не приведёт к ошибке.

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

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

Posted: Mon 29 Oct, 2018 10:11
by Shmuel
John Doe, да, несоответствие документации и реализации.
В реализации тип этого параметра не "integer", а "flag", а для "флагов" значение nil всегда является допустимым и трансформируется в 0.
Может просто документацию поправить?

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

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

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

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

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

Posted: Mon 29 Oct, 2018 13:15
by John Doe
В данном контексте опциональность параметра 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

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

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

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

Posted: Tue 30 Oct, 2018 11:16
by John Doe
far.FreeSettings
Желательно в мануале добавить примечание, поясняющее особенности функции, с перекрёстной ссылкой на метод схожего назначения.

Update
https://bugs.farmanager.com/view.php?id=3665

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

Posted: Tue 30 Oct, 2018 12:06
by DrKnS
Не холивара ради - а какова вообще область применения этой функции? Особенно учитывая то, что пока настройки не освободишь - они не запишутся?

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

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

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

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

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

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

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

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

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

Posted: Tue 30 Oct, 2018 12:40
by Shmuel
Поэтому автоматическое освобождение и было убрано. У программиста - полный контроль и, если хочет вызвать far.FreeSettings(), значит знает, что делает. Никто не заставляет пользоваться этой функцией.

Редактор БД плагинов

Posted: Fri 02 Nov, 2018 08:02
by John Doe
IgorZ wrote: Fri 02 Nov, 2018 05:34 (во всяком случае, если не станет известно, что использование far.FreeSettings() приводит к серьёзной ошибке).
Возможно я плохо объяснил.
Другой скрипт (не ваш) создал настройки, которыми намерен пользоваться некоторое время.
В это время ваш скрипт берёт и закрывает настройки ВСЕХ скриптов.
Неаккуратненько.

Редактор БД плагинов

Posted: Fri 02 Nov, 2018 08:24
by Shmuel
John Doe wrote: Fri 02 Nov, 2018 08:02 Другой скрипт (не ваш) создал настройки, которыми намерен пользоваться некоторое время.
Совет пользовать метод Free() вместо ф-ции FreeSettings() конечно проавильный, но этот "другой скрипт" по идее не должен так делать. По-видимому, этот другой скрипт сохраняет свои настройки по событию ExitFar, но ведь оно может и не произойти (в случае крэша Фар).
Правильная тактика: тебя вызвали - сохрани настройки перед возвращением управления (если их изменял).