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

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

Latest post of the previous page:

John Doe wrote:Враппер как ни крути мысли читать не может.


Ну так я предлагаю: подумать над вариантом, чтобы автор плагина мог прикладывать к нему программный интерфейс, который автоматически подхватывался FAR и сразу становился доступным к использованию в макросах.

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 26 Feb, 2013 13:14

Как прикладывать интерфейс мы вроде бы уже разобрались.
Ведь именно интерфейс ваших плагинов навёл меня на мысль о возможности 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 26 Feb, 2013 14:06

Под инсталляцией тут понимается необходимость явного создание NameSpace для функций плагина, т.е. вызов Plugin.require(id)

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

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

Имхо аргументом Plugin.require должно быть имя плагина, для простоты - имя файла dll.
ConCtrl=Plugin.require"ConCtrl"
Возможные конфликты в этом случае могут разруливаться указанием пути, или переименованием.
Хотя конечно конфликт имён в таком маленьком сообществе - паранойя.

User avatar
HaRT
Moderator
Posts: 7909
Joined: Tue 30 Aug, 2005 17:21
Location: Санкт-Петербург
Has thanked: 63 times
Been thanked: 94 times

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

Postby HaRT » Tue 26 Feb, 2013 14:55

Фар есть инструмент, а не нянька. © 2009 DrKnS

User avatar
SUSim
Posts: 1471
Joined: Thu 18 Feb, 2010 17:32
Has thanked: 4 times
Been thanked: 3 times

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

Postby SUSim » Tue 26 Feb, 2013 17:56

Спонтанно, нафик тогда гуиды, если по имени и расположению?
В переработке враппера Я не вижу смысла - вызов плагина станет удобней для специалистов макросописания, а не для простых пользователей (освой LUA, прочти документацию именно к этому плагину...)
SimSU ··· ·· -- ··· ··-

IgorZ
Posts: 427
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 4 times
Been thanked: 6 times

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

Postby IgorZ » Wed 27 Feb, 2013 06:22

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

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 » Wed 27 Feb, 2013 11:12

IgorZ wrote:Имеющийся способ (Plugin.Call(...)):
...
Его у вас никто не отбирает.

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

Уподобляться майкрософту я не предлагаю.
Напротив, предлагаю уподобиться стандартному Lua, а именно тому, как организована работа с модулями.
Точка.

IgorZ
Posts: 427
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 4 times
Been thanked: 6 times

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

Postby IgorZ » Wed 27 Feb, 2013 11:40

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

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 » Wed 27 Feb, 2013 11:43

А доступа к PluginsControl из LUA нет еще?

Shmuel
Posts: 4952
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 11 times
Been thanked: 123 times

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

Postby Shmuel » Wed 27 Feb, 2013 11:50

Max Rusov wrote:А доступа к PluginsControl из 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 » Wed 27 Feb, 2013 11:52

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

А вообще к плагину идёт документация. И там описан способ работы. Какой способ автор описал - такой и будет использован. Проблемы нет.

IgorZ wrote:Более логично было бы назвать функцию Plugin.register, не оглядываясь на Lua.
А на что же тогда оглядываться? Мало велосипедов?

IgorZ wrote:Кстати, хотелось бы действительно уточнить, насколько трудоёмко автоматизировать создание и заполнение глобальной таблицы плагинов и насколько это было бы востребовано.
От гуидов хотелось бы уйти, и подальше.
Таблица вариант, но лучше закопать их ещё глубже.

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

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 » Wed 27 Feb, 2013 11:55

Shmuel wrote:
Max Rusov wrote:А доступа к PluginsControl из LUA нет еще?

Есть.

Т.е. можно написать функции PluginIdByName / PluginNameById

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 » Wed 27 Feb, 2013 15:38

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: 4952
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 11 times
Been thanked: 123 times

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

Postby Shmuel » Wed 27 Feb, 2013 15:41

1. Надо использовать win.Uuid(strGuid).
2. Надо указывать полный путь.

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 » Wed 27 Feb, 2013 15:47

Тогда проще перебрать.
  1. function Plugin.idByName(name)
  2.   for _,in ipairs(far.GetPlugins ()) do
  3.     local Info = far.GetPluginInformation (p)
  4.     if Info.GInfo.Title==name or Info.ModuleName:find(name.."%.dll$") then
  5.       return win.Uuid(Info.GInfo.Guid):upper()
  6.     end
  7.   end
  8. 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: 4952
Joined: Thu 23 Mar, 2006 21:36
Location: Israel
Has thanked: 11 times
Been thanked: 123 times

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

Postby Shmuel » Wed 27 Feb, 2013 15:53

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

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 » Wed 27 Feb, 2013 15:56

1. Выбрать уникальное имя (или комбинацию путь/имя) это проблема пользователя.
Собственно то же самое касается и стандартных модулей Lua, поэтому вполне сойдёт.
(Наверно стоит добавить ещё подстановку ".dll")

2. Регистронезависимость и не нужна. Но при желании ведь есть regex.find


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

Who is online

Users browsing this forum: No registered users and 7 guests