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: Plugin.require — функция-враппер на замену Plugin.Call и

Post by Max Rusov »

Latest post of the previous page:

John Doe wrote:Враппер как ни крути мысли читать не может.
Ну так я предлагаю: подумать над вариантом, чтобы автор плагина мог прикладывать к нему программный интерфейс, который автоматически подхватывался FAR и сразу становился доступным к использованию в макросах.
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 »

Как прикладывать интерфейс мы вроде бы уже разобрались.
Ведь именно интерфейс ваших плагинов навёл меня на мысль о возможности 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(id)

Думаю проблема инсталляции преувеличена.
В комплекте с плагином идёт набор макросов, и чтобы их использовать - их ведь тоже необходимо инсталлировать (скопировать в scripts).
Это абсолютно очевидно, и никто не жалуется.

Думаю не сложно в каждом макрофайле явно создавать NameSpace для плагина.
Есть только 1 сложность: надо знать GUID плагина.
Но и это в принципе преодолимо.

Имхо аргументом Plugin.require должно быть имя плагина, для простоты - имя файла dll.
ConCtrl=Plugin.require"ConCtrl"
Возможные конфликты в этом случае могут разруливаться указанием пути, или переименованием.
Хотя конечно конфликт имён в таком маленьком сообществе - паранойя.
User avatar
HaRT
Moderator
Posts: 10823
Joined: Tue 30 Aug, 2005 17:21
Has thanked: 221 times
Been thanked: 358 times

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

Post by HaRT »

Фар есть инструмент, а не нянька. © 2009 DrKnS
User avatar
SUSim
Posts: 1636
Joined: Thu 18 Feb, 2010 17:32
Has thanked: 9 times
Been thanked: 26 times

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

Post by SUSim »

Спонтанно, нафик тогда гуиды, если по имени и расположению?
В переработке враппера Я не вижу смысла - вызов плагина станет удобней для специалистов макросописания, а не для простых пользователей (освой LUA, прочти документацию именно к этому плагину...)
SimSU ··· ·· -- ··· ··-
IgorZ
Posts: 790
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 15 times
Been thanked: 93 times

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

Post by IgorZ »

Имеющийся способ (Plugin.Call(...)):
а) универсальнее;
б) единообразнее (не надо думать, в какой именно форме записывать вызов для конкретного набора параметров);
в) привычнее (для одних несущественно, для других важно).
Как мне кажется, большую часть возможных неудобств можно устранить:
а) введя глобальную таблицу, наподобие . Требуется только объявить, что таблица с таким-то именем содержит информацию по гуидам, и заполнять её вручную (требует только наличия доброй воли и файла в Macros\scripts) или автоматически (как я понимаю, для этого достаточно внести небольшое дополнение в загрузчик плагинов).
б) Если есть настойчивое желание уйти от Plugin./(Call|Command|Config|Exist|Menu)/(плагин[,...]), думаю, лучше остановиться на плагин./(Call|Command|Config|Exist|Menu)/([...]). Не надо уподобляться Микрософту, который постоянно и без меры "улучшает" интерфейс Windows, в результате на 5 копеек удобств внося 100 рублей геморроя.
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 »

IgorZ wrote:Имеющийся способ (Plugin.Call(...)):
...
Его у вас никто не отбирает.
IgorZ wrote:б) Если есть настойчивое желание уйти от Plugin./(Call|Command|Config|Exist|Menu)/(плагин[,...]), думаю, лучше остановиться на плагин./(Call|Command|Config|Exist|Menu)/([...]).
Это работает в моём варианте, пользуйтесь на здоровье.

Уподобляться майкрософту я не предлагаю.
Напротив, предлагаю уподобиться стандартному Lua, а именно тому, как организована работа с модулями.
Точка.
IgorZ
Posts: 790
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 15 times
Been thanked: 93 times

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

Post by IgorZ »

John Doe wrote:
IgorZ wrote:Имеющийся способ (Plugin.Call(...)):
...
Его у вас никто не отбирает.
Иногда пути команды разработчиков Фара весьма причудливы. Так что зарекаться не стоит
John Doe wrote:
IgorZ wrote:б) Если есть настойчивое желание уйти от Plugin./(Call|Command|Config|Exist|Menu)/(плагин[,...]), думаю, лучше остановиться на плагин./(Call|Command|Config|Exist|Menu)/([...]).
Это работает в моём варианте, пользуйтесь на здоровье.
Уподобляться майкрософту я не предлагаю.
Напротив, предлагаю уподобиться стандартному Lua, а именно тому, как организована работа с модулями.
Точка.
Несколько разных способов записи одного и того же неизбежно затруднят освоение LuaFar для малоопытных пользователей. Это сложно назвать достоинством. Унификация полезна - это доказано многократно.

P. S. Вне зависимости от вышесказанного, Plugin.require - не очень подходящее название. Более логично было бы назвать функцию Plugin.register, не оглядываясь на Lua.

P. P. S. Кстати, хотелось бы действительно уточнить, насколько трудоёмко автоматизировать создание и заполнение глобальной таблицы плагинов и насколько это было бы востребовано.
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 »

А доступа к PluginsControl из LUA нет еще?
Shmuel
Posts: 6820
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 528 times

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

Post by Shmuel »

Max Rusov wrote:А доступа к PluginsControl из 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 »

IgorZ wrote:Несколько разных способов записи одного и того же неизбежно затруднят освоение LuaFar для малоопытных пользователей.
От этого у вас не получится уйти.
В старом макроязыке всё прямолинейно, но и возможностей было на порядок меньше.
Сейчас же я некоторые макросы по 5 раз переписываю, из спортивного интереса, пытаясь понять а как лучше, красивее.

А вообще к плагину идёт документация. И там описан способ работы. Какой способ автор описал - такой и будет использован. Проблемы нет.
IgorZ wrote:Более логично было бы назвать функцию Plugin.register, не оглядываясь на Lua.
А на что же тогда оглядываться? Мало велосипедов?
IgorZ wrote:Кстати, хотелось бы действительно уточнить, насколько трудоёмко автоматизировать создание и заполнение глобальной таблицы плагинов и насколько это было бы востребовано.
От гуидов хотелось бы уйти, и подальше.
Таблица вариант, но лучше закопать их ещё глубже.

Я не утверждаю что они вообще не нужны. Не, пусть будут, где-то на самом низком уровне.
А на практике хотелось бы оперировать плагинами как объектами более высокого уровня.
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 »

Shmuel wrote:
Max Rusov wrote:А доступа к PluginsControl из LUA нет еще?
Есть.
Т.е. можно написать функции PluginIdByName / PluginNameById
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 »

Code: Select all

plugin_handle = far.FindPlugin (far.Flags.PFM_GUID, "94624B7B-FFDB-435F-B955-F99DBBC3BFE0")
print(plugin_handle)
plugin_handle = far.FindPlugin (far.Flags.PFM_MODULENAME, "ConCtrl.dll")
print(plugin_handle)
Получаю nilnil
В чём моя ошибка?
Shmuel
Posts: 6820
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 528 times

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

Post by Shmuel »

1. Надо использовать win.Uuid(strGuid).
2. Надо указывать полный путь.
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. function Plugin.idByName(name)
  2.  
  3.   for _,in ipairs(far.GetPlugins ()) do
  4.  
  5.     local Info = far.GetPluginInformation (p)
  6.  
  7.     if Info.GInfo.Title==name or Info.ModuleName:find(name.."%.dll$") then
  8.  
  9.       return win.Uuid(Info.GInfo.Guid):upper()
  10.  
  11.     end
  12.  
  13.   end
  14.  
  15. end

Code: Select all

  --регистр имеет значение!!!

  --поиск по названию:
  Plugin.idByName("Console Control");  --требуется полное совпадение

  --поиск по имени dll:
  Plugin.idByName("ConCtrl");          --ищется ConCtrl.dll
  Plugin.idByName("ConCtrl\\ConCtrl"); --учитывается путь
  Plugin.idByName("Con....");          --допустимы регэкспы
                                       --осторожно с квантификаторами, может совпасть часть пути 
Теперь переделаю Plugin.require :-)
Надо подумать как можно обработать случай, когда плагина нет на момент вызова require...
Shmuel
Posts: 6820
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 41 times
Been thanked: 528 times

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

Post by Shmuel »

1. А если есть более одного плагина с данным именем DLL ?
2. Регистрозависимый поиск проблематичен.
Post Reply

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