Plugin.require — функция-враппер на замену Plugin.Call и др.

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

Re: Plugin.require — функция-враппер на замену Plugin.Call и

Post by John Doe »

Latest post of the previous page:

Я начал склоняться к тому, что это получится ненужное усложнение.
Думаю стоит оставить их равноправными, в общем-то с точки зрения конечного пользователя неважно КАК они реализованы.
Ну и учитывая то, что имена Command, Config, Exist, Id, и Menu будут заняты - избегать использования их в плагинах.

Это конечно же просто конвенция, а не строгое требование.
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

Re: Plugin.require — функция-враппер на замену Plugin.Call и

Post by John Doe »

John Doe wrote:Я начал склоняться к тому, что это получится ненужное усложнение.
Я к этому не сразу пришёл.
Вначале хотелось любыми средствами устранить потенциальный конфликт между названиями функций предоставляемых плагином, и семейством Plugin.*
Т.е., хотелось такого:

Code: Select all

NameSpace:Menu() == Plugin.Menu(guid)
NameSpace.Menu() == Plugin.Call(guid, "Menu")
И это вполне возможно:

Но посмотрев на открывшиеся возможности как-то не обрадовался.
Только путаницы добавится.
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

Re: Regular Expression Search and Replace (RESearch)

Post by John Doe »

Max Rusov wrote:А я предупреждал, что универсальный Plugin.require - это утопия :)
Это почему же?
Max Rusov
Posts: 3651
Joined: Wed 23 Nov, 2005 11:11
Location: Москва-Питер
Has thanked: 2 times
Been thanked: 19 times

Re: Regular Expression Search and Replace (RESearch)

Post by Max Rusov »

Ну, как я понимаю, ReSearch "не вписался".
Max Rusov
Posts: 3651
Joined: Wed 23 Nov, 2005 11:11
Location: Москва-Питер
Has thanked: 2 times
Been thanked: 19 times

Re: Regular Expression Search and Replace (RESearch)

Post by Max Rusov »

А вот если бы lua-wrapper шел как часть плагина, это было бы не важно...
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

Re: Regular Expression Search and Replace (RESearch)

Post by John Doe »

Max Rusov wrote:Ну, как я понимаю, ReSearch "не вписался".
Это не так.
Впишется вообще любой. Просто плагин, команды которого заданы строками - получает больше преимуществ.
Max Rusov wrote:А вот если бы lua-wrapper шел как часть плагина, это было бы не важно...
А можно подробнее?
Где именно для этого нужно внести измения?
Max Rusov
Posts: 3651
Joined: Wed 23 Nov, 2005 11:11
Location: Москва-Питер
Has thanked: 2 times
Been thanked: 19 times

Re: Regular Expression Search and Replace (RESearch)

Post by Max Rusov »

John Doe wrote:А можно подробнее?
Хотелось бы как то так. Т.е. вместе с плагином идет *.lua модуль, который добавляет namespace(?) - не знаю как правильно, вообщем типа mf из api.lua. Он автоматом грузится FAR'ом при запуске, и сразу доступен в макросах без всякого require.
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

Re: Plugin.require — функция-враппер на замену Plugin.Call и

Post by John Doe »

В шапке есть ссылка на мантис, там это всё много лет назад обсуждалось.
И способ регистрации этого namespace вызвал максимум разногласий.

А Plugin.require - это абсолютно безболезненное решение, не требующее никаких изменений ни в фаре, ни в плагинах*.
Способ функционирования - полностью в духе Lua, и я считаю это важным.

Плагины, предоставляющие свои функции - подобны библиотекам-модулям Lua.
И чтобы начать использовать модуль - нужно "загрузить" его посредством require.

И никакие внешние модули "автоматически" в луа не регистрируют свои неймспейсы.
Разве что стандартные, но это и у нас легко.

----
*одна вещь всё-таки требуется: важно иметь такую функцию "из коробки", т.е. включить в дистрибутивный luamacro.lua (или куда там).
Тогда авторы плагинов будут учитывать эту возможность, и изначально закладывать в свои плагины человеческий интерфейс.
Max Rusov
Posts: 3651
Joined: Wed 23 Nov, 2005 11:11
Location: Москва-Питер
Has thanked: 2 times
Been thanked: 19 times

Re: Plugin.require — функция-враппер на замену Plugin.Call и

Post by Max Rusov »

John Doe wrote:В шапке есть ссылка на мантис, там это всё много лет назад обсуждалось.
"Много лет назад" не было LUA, так что эти обсуждения неактуальны. Сейчас, как мне кажется, сделать это очень просто.

Преимущества:
- Функции плагинов можно будет легко использовать в макросах, вызываемых через "macro:post" и подобных мест.
- namespace-ы плагинов и функции в них будут доступны для выбора через auto-completion (с помощью макросов, типа Lua Explorer)

Единственная "проблема", которую любят предъявлять - конфликт имен - элементарно решается переименованием
namespace'а в lua модуле, т.к. он будет отдельным текстовым файлом, а не "зашит" в плагин, как предполагалось раньше...
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

Re: Plugin.require — функция-враппер на замену Plugin.Call и

Post by John Doe »

"Много лет назад" не было LUA, так что эти обсуждения неактуальны. Сейчас, как мне кажется, сделать это очень просто.
Lua действительно без проблем позволит реализовать тот или иной вариант, но это не меняет сути: вариант надо выбрать, а согласия тогда не было.
через "macro:post"

Code: Select all

lm:post Plugin.require"ConCtrl".Maximize()
- namespace-ы плагинов и функции в них будут доступны для выбора через auto-completion (с помощью макросов, типа Lua Explorer)
Никто не мешает при старте зарегистрировать ВСЕ нейспейсы, для этого нужен очень простой скрипт лежащий где-то в scripts.
Будут доступны сами неймспейсы, но конечно не функции (в этом возможно минус, но всё решаемо).
Единственная "проблема", которую любят предъявлять - конфликт имен
и тем не менее: тогда согласия не было, сейчас опять не будет, так и останемся ни с чем.
т.к. он будет отдельным текстовым файлом, а не "зашит" в плагин, как предполагалось раньше...
Вот и я говорю: Lua файл загружаемый при старте решит этот вопрос.
Что важно: не требуется никаких изменений, всё работает уже сейчас.

А расширенная функциональность, которую предлагаете вы - требует изменений и в фаре и во всех плагинах.
Я не говорю что будет плохо. Но ждать реализации опять придётся "много лет".
gotar
Posts: 412
Joined: Sun 06 Sep, 2009 12:34
Has thanked: 17 times
Been thanked: 3 times

Re: Plugin.require — функция-враппер на замену Plugin.Call и

Post by gotar »

И все таки закапывание того, что с помощю предложенного Вами механизма проихожит не вызов функции, предостовляемой плагином по правилам lua, а вызов plugin.call выглядит красиво пока все работает. Если возникнут какие то какие то конфликы или что-то перестанет работать, разбирательств том что проиходит будет затруднено. Мне кажется, что если бы знатоки Lua предложили бы путь, по которому могли бы следовать плагино писатели для более простой интеграции макросов луа и плагина, то большенство плагинописателей ему бы последовали. Тем более, что доступ к луа-машине не только у фара , но и любого плагина.
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

Re: Plugin.require — функция-враппер на замену Plugin.Call и

Post by John Doe »

gotar wrote:Если возникнут какие то какие то конфликы или что-то перестанет работать, разбирательств том что проиходит будет затруднено.
Например?
gotar wrote:Мне кажется, что если бы знатоки Lua предложили бы путь[...]
Было бы неплохо.
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

Re: Plugin.require — функция-враппер на замену Plugin.Call и

Post by John Doe »

Max Rusov
gotar

Мне кажется вот подходящий аргумент от автора:
Shmuel wrote:LuaFAR является "тонким" враппером вокруг Far API - это сознательное решение. Всё остальное, функции более высокого уровня, лучше делать на Lua (я имею в виду "модули" или "библиотеки"). Лучше потому, что легче поддерживать и модифицировать.
В данном случае: какой бы интерфейс вы не придумали - ничто не мешает реализовать его на Lua, что я например и попытался сделать.
Если вы хотите внести коррективы, или предложить лучшую альтернативу - почему бы и нет.

После чего выберем лучший вариант, и включим его в поставку luamacro.
gotar
Posts: 412
Joined: Sun 06 Sep, 2009 12:34
Has thanked: 17 times
Been thanked: 3 times

Re: Plugin.require — функция-враппер на замену Plugin.Call и

Post by gotar »

Плагин умеет выполнять какое-то действия. Предполагается, что эти действия будет вызываться из макроса на Lua. Мне кажется естественным, чтобы plugin предоставлял функции для выполнения этих действий. Для этого нужно использовать хорошо задокументированный интерфейс С/С++ к Lua( а не plugin.call). Нет?
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

Re: Plugin.require — функция-враппер на замену Plugin.Call и

Post by John Doe »

Этот интерфейс реализуется модулями.
Я предлагал: http://forum.farmanager.com/viewtopic.p ... 34#p104534
Но идея поддержана не была, и это понятно, т.к. этот интерфейс автору плагина ещё требуется реализовать, а Plugin.Call можно сказать даром даётся.

Update
Обсуждение Lua API отделено.
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

Re: Plugin.require — функция-враппер на замену Plugin.Call и

Post by John Doe »

В комплект последней версии плагина ConsoleControl добавлен Lua-модуль, определяющий Lua-интерфейс плагина.

Интерфейс практически идентичен тому, который получается при использовании Plugin.require.
Но что характерно: сам модуль по размеру почти в 2 раза превышает размер (Plugin.require + Plugin.idByName).

А ведь Plugin.require можно использовать с десятком плагинов.
Post Reply

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