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

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

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: 5972
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 25 times
Been thanked: 257 times

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

Post by Shmuel »

Latest post of the previous page:

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

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

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

Post by John Doe »

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

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

Shmuel
Posts: 5972
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 25 times
Been thanked: 257 times

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

Post by Shmuel »

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

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

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

Post by John Doe »

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

Shmuel
Posts: 5972
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 25 times
Been thanked: 257 times

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

Post by Shmuel »

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

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

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

Post 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
Last edited by John Doe on Tue 30 Oct, 2018 11:35, edited 1 time in total.

Shmuel
Posts: 5972
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 25 times
Been thanked: 257 times

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

Post by Shmuel »

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

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

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

Post by John Doe »

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: 5489
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 6 times
Been thanked: 273 times

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

Post by DrKnS »

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

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

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

Post by John Doe »

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

Shmuel
Posts: 5972
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 25 times
Been thanked: 257 times

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

Post by Shmuel »

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: 5489
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 6 times
Been thanked: 273 times

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

Post by DrKnS »

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

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

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

Post by DrKnS »

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

Shmuel
Posts: 5972
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 25 times
Been thanked: 257 times

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

Post by Shmuel »

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

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

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

Post by John Doe »

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

Shmuel
Posts: 5972
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 25 times
Been thanked: 257 times

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

Post by Shmuel »

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

Post Reply

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