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, в дистрибутиве)
Дополнения к мануалу:
far.Menu: в описании приведена ссылка на статью Энциклопедии Виртуальные коды клавиш. Однако не все перечисленные там клавиши на самом деле обрабатываются фаром. В частности, в качестве BreakKey не могут выступать кнопки мыши.
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 применима лишь в одном методе:
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Где можно почитать подробнее?
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, но ведь оно может и не произойти (в случае крэша Фар).
Правильная тактика: тебя вызвали - сохрани настройки перед возвращением управления (если их изменял).