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

Здесь обсуждается всё, что касается макросов.
User avatar
Max Rusov
Posts: 3599
Joined: Wed 23 Nov, 2005 11:11
Location: Москва-Питер
Been thanked: 6 times
Contact:

Re: Regular Expression Search and Replace (RESearch)

Postby Max Rusov » Tue 05 Mar, 2013 14:21

Latest post of the previous page:

А вот если бы lua-wrapper шел как часть плагина, это было бы не важно...

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

Re: Regular Expression Search and Replace (RESearch)

Postby John Doe » Tue 05 Mar, 2013 14:49

Max Rusov wrote:Ну, как я понимаю, ReSearch "не вписался".
Это не так.
Впишется вообще любой. Просто плагин, команды которого заданы строками - получает больше преимуществ.

Max Rusov wrote:А вот если бы lua-wrapper шел как часть плагина, это было бы не важно...
А можно подробнее?
Где именно для этого нужно внести измения?

User avatar
Max Rusov
Posts: 3599
Joined: Wed 23 Nov, 2005 11:11
Location: Москва-Питер
Been thanked: 6 times
Contact:

Re: Regular Expression Search and Replace (RESearch)

Postby Max Rusov » Tue 05 Mar, 2013 15:25

John Doe wrote:А можно подробнее?

Хотелось бы как то так. Т.е. вместе с плагином идет *.lua модуль, который добавляет namespace(?) - не знаю как правильно, вообщем типа mf из api.lua. Он автоматом грузится FAR'ом при запуске, и сразу доступен в макросах без всякого require.

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

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

Postby John Doe » Tue 05 Mar, 2013 15:40

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

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

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

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

----
*одна вещь всё-таки требуется: важно иметь такую функцию "из коробки", т.е. включить в дистрибутивный luamacro.lua (или куда там).
Тогда авторы плагинов будут учитывать эту возможность, и изначально закладывать в свои плагины человеческий интерфейс.

User avatar
Max Rusov
Posts: 3599
Joined: Wed 23 Nov, 2005 11:11
Location: Москва-Питер
Been thanked: 6 times
Contact:

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

Postby Max Rusov » Tue 05 Mar, 2013 16:00

John Doe wrote:В шапке есть ссылка на мантис, там это всё много лет назад обсуждалось.

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

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

Единственная "проблема", которую любят предъявлять - конфликт имен - элементарно решается переименованием
namespace'а в lua модуле, т.к. он будет отдельным текстовым файлом, а не "зашит" в плагин, как предполагалось раньше...

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

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

Postby John Doe » Tue 05 Mar, 2013 16:16

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

через "macro:post"

Code: Select all

lm:post Plugin.require"ConCtrl".Maximize()


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

Единственная "проблема", которую любят предъявлять - конфликт имен
и тем не менее: тогда согласия не было, сейчас опять не будет, так и останемся ни с чем.

т.к. он будет отдельным текстовым файлом, а не "зашит" в плагин, как предполагалось раньше...
Вот и я говорю: Lua файл загружаемый при старте решит этот вопрос.
Что важно: не требуется никаких изменений, всё работает уже сейчас.

А расширенная функциональность, которую предлагаете вы - требует изменений и в фаре и во всех плагинах.
Я не говорю что будет плохо. Но ждать реализации опять придётся "много лет".

gotar
Posts: 292
Joined: Sun 06 Sep, 2009 12:34
Has thanked: 8 times

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

Postby gotar » Thu 14 Mar, 2013 07:00

И все таки закапывание того, что с помощю предложенного Вами механизма проихожит не вызов функции, предостовляемой плагином по правилам lua, а вызов plugin.call выглядит красиво пока все работает. Если возникнут какие то какие то конфликы или что-то перестанет работать, разбирательств том что проиходит будет затруднено. Мне кажется, что если бы знатоки Lua предложили бы путь, по которому могли бы следовать плагино писатели для более простой интеграции макросов луа и плагина, то большенство плагинописателей ему бы последовали. Тем более, что доступ к луа-машине не только у фара , но и любого плагина.

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

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

Postby John Doe » Thu 14 Mar, 2013 08:15

gotar wrote:Если возникнут какие то какие то конфликы или что-то перестанет работать, разбирательств том что проиходит будет затруднено.
Например?

gotar wrote:Мне кажется, что если бы знатоки Lua предложили бы путь[...]
Было бы неплохо.

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

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

Postby John Doe » Thu 14 Mar, 2013 16:54

Max Rusov
gotar

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


В данном случае: какой бы интерфейс вы не придумали - ничто не мешает реализовать его на Lua, что я например и попытался сделать.
Если вы хотите внести коррективы, или предложить лучшую альтернативу - почему бы и нет.

После чего выберем лучший вариант, и включим его в поставку luamacro.

gotar
Posts: 292
Joined: Sun 06 Sep, 2009 12:34
Has thanked: 8 times

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

Postby gotar » Fri 15 Mar, 2013 11:48

Плагин умеет выполнять какое-то действия. Предполагается, что эти действия будет вызываться из макроса на Lua. Мне кажется естественным, чтобы plugin предоставлял функции для выполнения этих действий. Для этого нужно использовать хорошо задокументированный интерфейс С/С++ к Lua( а не plugin.call). Нет?

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

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

Postby John Doe » Fri 15 Mar, 2013 11:58

Этот интерфейс реализуется модулями.
Я предлагал: John Doe @ Расширение макроязыка плагинами
Но идея поддержана не была, и это понятно, т.к. этот интерфейс автору плагина ещё требуется реализовать, а Plugin.Call можно сказать даром даётся.

Update
Обсуждение Lua API отделено.

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

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

Postby John Doe » Sun 17 Mar, 2013 16:46

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

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

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

User avatar
Max Rusov
Posts: 3599
Joined: Wed 23 Nov, 2005 11:11
Location: Москва-Питер
Been thanked: 6 times
Contact:

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

Postby Max Rusov » Sun 17 Mar, 2013 16:55

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: 11042
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 9 times
Been thanked: 62 times

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

Postby John Doe » Sun 17 Mar, 2013 17:03

Почему же упускаю, я об этом думал.
1. Бесспорно
2. Да, но если не писать модуль, а просто перечислить функции с параметрами - всё будет ещё нагляднее
3. Нет, ответил в теме

User avatar
Max Rusov
Posts: 3599
Joined: Wed 23 Nov, 2005 11:11
Location: Москва-Питер
Been thanked: 6 times
Contact:

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

Postby Max Rusov » Sun 17 Mar, 2013 17:13

John Doe wrote:3. Нет, ответил в теме

Что "нет" ? Автодополнение работает, я постоянно пользуюсь. Хоть какой-то сервис, а то этот LUA вообще нифига не проверяет...

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

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

Postby John Doe » Sun 17 Mar, 2013 17:30

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

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

И сам модуль можно "свернуть": John Doe @ Console Control
(Необходимости в этом нет конечно, просто спортивный интерес.)

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

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

Postby John Doe » Thu 18 Apr, 2013 16:03

В дистрибутиве фара есть плагин Brackets. Кто не в курсе:

Вот как могут выглядеть макросы для него при использовании Plugin.require:
  1. local Brackets = Plugin.require"Brackets"
  2.  
  3. Macro { description="Find matching bracket - Forward";
  4.   area="Editor"; key="Ctrl[";
  5.   condition=Brackets.Exist; action=Brackets.SearchFwd;
  6. }
  7.  
  8. Macro { description="Find matching bracket - Backward";
  9.   area="Editor"; key="Ctrl]";
  10.   condition=Brackets.Exist; action=Brackets.SearchBack;
  11. }
  12.  
  13. Macro { description="Find & Select matching bracket - Forward";
  14.   area="Editor"; key="CtrlShift[";
  15.   condition=Brackets.Exist; action=Brackets.SelectFwd;
  16. }
  17.  
  18. Macro { description="Find & Select matching bracket - Backward";
  19.   area="Editor"; key="CtrlShift]";
  20.   condition=Brackets.Exist; action=Brackets.SelectBack;
  21. }
  22.  
  23. Macro { description="Brackets matching - Config";
  24.   area="Editor"; key="CtrlShiftM";
  25.   condition=Brackets.Exist; action=Brackets.config;
  26. }


Штатные макросы конечно ничем не хуже, но более громоздкие.


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

Who is online

Users browsing this forum: No registered users and 3 guests