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

Здесь обсуждается всё, что касается макросов.
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 »

Latest post of the previous page:

А вот если бы 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 можно использовать с десятком плагинов.
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:Но что характерно: сам модуль по размеру почти в 2 раза превышает размер (Plugin.require + Plugin.idByName)
Вы упускаете несколько важных моментов.

1. Инерфейсный модуль позволяет делать значительно больше чем просто перевызовы функций. См. например, ConsoleControl.WindowSizeDelta. Или пример из другого плагина (еще не опубликованного):

Code: Select all

MoreHistory.OpenFolderHistory = function(Filter, Group, Order, IncHidden)
  local M = mmode(3,1)
  Plugin.Call(PID, "OpenFolderHistory", Filter, Group, Order, IncHidden)
  mmode(3,M)
end
2. Интерфейсный модуль является одновременно документацией.

3. Про автодополнение уже говорил.
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 »

Почему же упускаю, я об этом думал.
1. Бесспорно
2. Да, но если не писать модуль, а просто перечислить функции с параметрами - всё будет ещё нагляднее
3. Нет, ответил в теме
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:3. Нет, ответил в теме
Что "нет" ? Автодополнение работает, я постоянно пользуюсь. Хоть какой-то сервис, а то этот 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 »

А, в этом плане соглашусь.
Plugin.require заранее не знает что за функции предоставляет модуль.
Но можно было бы научить (при наличии поддержки со стороны плагина).

А вот так "документация", я считаю, намного нагляднее, чем размазанная в определениях по модулю:

И сам модуль можно "свернуть": http://forum.farmanager.com/viewtopic.p ... 51#p105951
(Необходимости в этом нет конечно, просто спортивный интерес.)
Post Reply

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