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

Здесь обсуждается всё, что касается макросов.
User avatar
John Doe
Бюрократ
Posts: 11970
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 26 times
Been thanked: 133 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
DrKnS
Posts: 5002
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 4 times
Been thanked: 166 times

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

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

Latest post of the previous page:

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

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

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

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

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

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

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

Post by John Doe » Fri 02 Nov, 2018 08:02

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

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

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

Post by Shmuel » Fri 02 Nov, 2018 08:24

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

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

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

Post by John Doe » Fri 02 Nov, 2018 08:29

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

P.S.
Что касается скриптов luamacro, то в них однозначно НИКОГДА нельзя откладывать освобождение настроек при работе с базой плагина (в примере выше - база фара).
Last edited by John Doe on Fri 02 Nov, 2018 12:11, edited 1 time in total.

User avatar
DrKnS
Posts: 5002
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 4 times
Been thanked: 166 times

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

Post by DrKnS » Fri 02 Nov, 2018 14:39

John Doe wrote:
Fri 02 Nov, 2018 08:02
скрипт берёт и закрывает настройки ВСЕХ скриптов
Опа, так этот список хендлов - он что, не per script, а глобальный, один на всех? Весело тут у вас.

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

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

Post by Shmuel » Fri 02 Nov, 2018 15:08

DrKnS wrote:
Fri 02 Nov, 2018 14:39
Весело тут у вас.
В чём веселье-то? Есть функция, потенциально опасная, оставшаяся по историческим причинам. Никто ж не заставляет ею пользоваться. Есть полно других потенциально опасных функций, не так ли?

User avatar
DrKnS
Posts: 5002
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 4 times
Been thanked: 166 times

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

Post by DrKnS » Fri 02 Nov, 2018 15:49

Shmuel wrote:
Fri 02 Nov, 2018 15:08
потенциально опасная, оставшаяся по историческим причинам
Я бы из этих соображений выкинул (тем более, что заменяется элементарно), но хозяин - барин.

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

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

Post by Shmuel » Fri 02 Nov, 2018 15:53

Мне не мешает, давно ею не пользуюсь. Если кто-то создаст тикет на трекере, можно и выкинуть.

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

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

Post by John Doe » Fri 02 Nov, 2018 16:15

Я использовал для отладки.
Выкидывать имхо незачем, достаточно добавить предупреждение.
Тикет об этом есть.

buniak_a_h
Posts: 582
Joined: Sat 20 Apr, 2013 00:17
Location: Питер
Has thanked: 57 times
Been thanked: 13 times
Contact:

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

Post by buniak_a_h » Sun 04 Nov, 2018 01:56

Shmuel wrote:
Fri 02 Nov, 2018 15:08
Есть функция, потенциально опасная, оставшаяся по историческим причинам. Никто ж не заставляет ею пользоваться.
По-видимому, причиной "подъёма" этой темы был мой скрипт, в котором я неосторожно закрывал settings как раз указанной "небезопасной" функцией. Поясню, почему.
far.FreeSettings присутствует в индексе в верхнем уровне и потому бросается в глаза, а settings:Free() не виден. Кроме того, я знаю, как посмотреть список функций таблица (в частности, _G.far), но я не знаю, как получить (используя терминологию object Pascal-я) список методов объекта определённого класса. А закрыть settings хочется - не только для выполнения commit-а, а просто: я же не знаю, какие ресурсы он использует при этом! Мало ли - ветка реестра заблокирована, хендлер занят и т.п. ... Именно поэтому John Doe (я так думаю) и предлагает поправить документацию с предупреждением и перекрёстной ссылкой на :Free(). Во всяком случае, мне бы это помогло.
Кстати, раз уж она такая "небезопасная", то, может, имело бы смысл расширить её функционал, передавая ей settings (optional). Хотя мне бы хватило ссылки в документации...
Last edited by buniak_a_h on Sun 04 Nov, 2018 01:58, edited 1 time in total.

User avatar
DrKnS
Posts: 5002
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 4 times
Been thanked: 166 times

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

Post by DrKnS » Sun 04 Nov, 2018 03:15

John Doe wrote:
Fri 02 Nov, 2018 16:15
Выкидывать имхо незачем
А ей есть недеструктивное применение?
достаточно добавить предупреждение
Так их же никто не читает.

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

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

Post by John Doe » Mon 05 Nov, 2018 12:07

DrKnS wrote:
Sun 04 Nov, 2018 03:15
А ей есть недеструктивное применение?
Я применял для отладки. Чтобы гарантированно освободить настройки.
DrKnS wrote:
Sun 04 Nov, 2018 03:15
Так их же никто не читает.
Думаю что немножко всё-таки читают)

User avatar
DrKnS
Posts: 5002
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 4 times
Been thanked: 166 times

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

Post by DrKnS » Mon 05 Nov, 2018 14:15

John Doe wrote:
Mon 05 Nov, 2018 12:07
Чтобы гарантированно освободить настройки.
Caedite eos. Novit enim Dominus qui sunt eius.

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

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

Post by John Doe » Mon 05 Nov, 2018 14:34

Увы.
И я бы предпочёл сохранить эту функцию, пока апи работы с базой у нас глючное.

User avatar
zg
zero-gravity
Posts: 5507
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 73 times
Contact:

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

Post by zg » Mon 05 Nov, 2018 16:43

John Doe wrote:
Mon 05 Nov, 2018 14:34
И я бы предпочёл сохранить эту функцию, пока апи работы с базой у нас глючное.
я не знаю в чём вам в данном конкретном случае поможет far.FreeSettings, но так делать нельзя. в будущем far.CreateSettings будет возвращать ошибку.

Post Reply

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