Latest post of the previous page:
1. Надо использовать win.Uuid(strGuid).2. Надо указывать полный путь.
Code: Select all
--регистр имеет значение!!!
--поиск по названию:
Plugin.idByName("Console Control"); --требуется полное совпадение
--поиск по имени dll:
Plugin.idByName("ConCtrl"); --ищется ConCtrl.dll
Plugin.idByName("ConCtrl\\ConCtrl"); --учитывается путь
Plugin.idByName("Con...."); --допустимы регэкспы
--осторожно с квантификаторами, может совпасть часть пути
Ну, имена dll тоже не блещут. Многие добавляют к имени dll разрядность 32/64. Делать разные макросы?John Doe wrote:Не уверен что всегда лучше, бывает имена такие попадаются...
Code: Select all
local PluginsList={}
for i,p in ipairs(far.GetPlugins ()) do
local Info = far.GetPluginInformation (p)
PluginsList[i] = win.Uuid(Info.GInfo.Guid).." | "..Info.GInfo.Title
end
far.Show(unpack(PluginsList))
Code: Select all
function Plugin.require(name)
local mt = {}
local PluginNS = setmetatable({_name=name},mt)
for _,f in ipairs{"Call","Command","Config","Exist","Menu"} do
PluginNS[f] = function(...) return Plugin[f](PluginNS.Id, ...) end
end
mt.__index = function(PluginNS,func)
if func=="Id" then PluginNS.Id=Plugin.idByName(PluginNS._name)
else PluginNS[func] = function(...) return Plugin.Call(PluginNS.Id, func, ...) end
end
return rawget(PluginNS,func)
end
return PluginNS
end
Единообразнее - красивее. А переписываю я и сам.John Doe wrote:От этого у вас не получится уйти.IgorZ wrote:Несколько разных способов записи одного и того же неизбежно затруднят освоение LuaFar для малоопытных пользователей.
В старом макроязыке всё прямолинейно, но и возможностей было на порядок меньше.
Сейчас же я некоторые макросы по 5 раз переписываю, из спортивного интереса, пытаясь понять а как лучше, красивее.
К сожалению, не всегда она достаточна.John Doe wrote:А вообще к плагину идёт документация. И там описан способ работы. Какой способ автор описал - такой и будет использован. Проблемы нет.
На значение слова и суть действия. Require Lua подключает модуль, который без этого недоступен. Здесь же для доступного модуля регистрируется персональное имя. Действия разные, значит, и слова должны быть разные.John Doe wrote:А на что же тогда оглядываться? Мало велосипедов?IgorZ wrote:Более логично было бы назвать функцию Plugin.register, не оглядываясь на Lua.
Насколько глубоко? С таблицей они перестают фигурировать в тексте, снижая читабельность, но остаются под рукой в случае непредвиденной необходимости в них. Просто и удобно.John Doe wrote:От гуидов хотелось бы уйти, и подальше.IgorZ wrote:Кстати, хотелось бы действительно уточнить, насколько трудоёмко автоматизировать создание и заполнение глобальной таблицы плагинов и насколько это было бы востребовано.
Таблица вариант, но лучше закопать их ещё глубже.
Я не утверждаю что они вообще не нужны. Не, пусть будут, где-то на самом низком уровне.
А на практике хотелось бы оперировать плагинами как объектами более высокого уровня.
Я вас не понимаю.IgorZ wrote:Единообразнее - красивее.
И какой вывод?IgorZ wrote:К сожалению, не всегда она достаточна.
Plugin.require даёт недвусмысленно понять, что в макросе требуются функции плагина. Способ использования функций плагина через заданный NameSpace явно вытекает из конструкции NameSpace=Plugin.require().IgorZ wrote:На значение слова и суть действия. Require Lua подключает модуль, который без этого недоступен. Здесь же для доступного модуля регистрируется персональное имя. Действия разные, значит, и слова должны быть разные.
В шапке есть пример использования, где фигурирует <NameSpace>.IdIgorZ wrote:Насколько глубоко? С таблицей они перестают фигурировать в тексте, снижая читабельность, но остаются под рукой в случае непредвиденной необходимости в них. Просто и удобно.
Если все пишут единообразно, порой удаётся вычислить пропущенное в документации по аналогии. Ну и просто поворчал, раз уж к слову пришлось.John Doe wrote:И какой вывод?IgorZ wrote:К сожалению, не всегда она достаточна.
Да, пожалуй, в конечном итоге стоит согласиться с такой формулировкой.John Doe wrote:...В общем, дело вкуса. Я считаю так правильнее. Но если подобная функциональность будет в LuaFar/Macro, то мне без разницы под каким именем.
Просто вариант с таблицей кажется мне потенциально более широко применимым. Возможно, я недооцениваю какие-то возможности LuaFar, которые делают такую таблицу ненужной.John Doe wrote:В шапке есть пример использования, где фигурирует <NameSpace>.IdIgorZ wrote:Насколько глубоко? С таблицей они перестают фигурировать в тексте, снижая читабельность, но остаются под рукой в случае непредвиденной необходимости в них. Просто и удобно.
Code: Select all
ConCtrl.BufferSize(x,y)
...
ConCtrl:Menu()
ConCtrl:Config()
ConCtrl:Command("/Scale=4 /Load=DOS.PLT")
msgbox(ConCtrl:Id())
...