Page 2 of 2
"FastMacro" через LuaManager
Posted: Thu 29 Nov, 2018 10:08
by IgorZ
Ради интереса попробовал решить
задачу с помощью
LuaManager. Получилось где-то так:
local FN = ...
local in_process = false
local _,LM = pcall(require,"LuaManager")
LM = type(LM)=="table" and LM or nil
Macro{
id="3E17F380-3D44-491C-A2B5-F60C6944A57C"; area="Common"; key="/.+/"; priority=100;
condition=function(key)
for k=1,math.huge do -- переберём все мыслимые idы
local me = mf.GetMacroCopy(k) -- получим макрос/обработчик событий
if not me then return false end -- кончились - закончим перебор
if me.FileName~=FN and me.area then -- это макрос, но не этот?
local infilter = ((me.key:match("^/.*/$") and regex.find(key,me.key,1,"i")) or regex.find(me.key,"(^| )"..key.."($| )",1,"i")) -- отсеем клавиши
infilter = infilter and regex.find(" "..me.area.." ","( Common | "..Area.Current.." )",1,"i") -- отсеем нетекущие области
if infilter then return LM and not in_process and (not me.condition or me.condition()) end -- нашли - закончим перебор
end
end -- for - перебор id
end;
action=function()
in_process = true
LM({MaShow=true,KMShow=true,EvShow=false,MoShow=false,MIShow=false,PrShow=false,PMShow=false,AMShow=false,KFilter=akey(1,0),FFilter="*|"..FN})
in_process = false
end;
}
"FastMacro" через LuaManager
Posted: Thu 06 Dec, 2018 11:46
by John Doe
Latest post of the previous page:
sToLp wrote: ↑Thu 06 Dec, 2018 10:30
К примеру — нажимаю CtrlShiftJ, появляется диалог приглашения, нажимаю клавишу или сочетание и получаю соответствующим образом наполненное меню LuaManager`а.
В LuaManager наверняка уже предусмотрена подобная функциональность.
Я верно понял, что достаточно однократно отобразить список, а не в цикле?
"FastMacro" через LuaManager
Posted: Thu 06 Dec, 2018 11:52
by John Doe
IgorZ wrote: ↑Thu 29 Nov, 2018 10:08
Получилось где-то так:
Вижу не проверяются флаги макросов.
И при проверке областей следует учитывать, что области автодополнения "прозрачны" для макросов.
"FastMacro" через LuaManager
Posted: Thu 06 Dec, 2018 11:54
by IgorZ
John Doe wrote: ↑Thu 06 Dec, 2018 11:33
IgorZ wrote: ↑Thu 06 Dec, 2018 10:59
Так, с ходу, решения не вижу
far.NameToInputRecord или mf.key позволят проверить "корректность".
Точно, спасибо.
"FastMacro" через LuaManager
Posted: Thu 06 Dec, 2018 12:03
by sToLp
John Doe,
Прошу прощения, но я не понял, что значит:
однократно отобразить список, а не в цикле
"FastMacro" через LuaManager
Posted: Thu 06 Dec, 2018 12:23
by John Doe
Запустили макрос хоткеем, в ответ на приглашении ввели требуемую клавишу, получили список LuaManager, ей соответствующий.
Конец работы, для продолжения надо снова запустить макрос.
"FastMacro" через LuaManager
Posted: Thu 06 Dec, 2018 23:29
by sToLp
John Doe wrote: ↑Thu 06 Dec, 2018 12:23
Запустили макрос хоткеем, в ответ на приглашении ввели требуемую клавишу, получили список LuaManager, ей соответствующий.
Конец работы
Так ведь это же только для макроса конец работы. А для пользователя то это только начало работы со списком в макробраузере.
А как бы в данном случае проявлялось бы отображение списка в цикле? И чем бы оно могло бы быть полезно?
"FastMacro" через LuaManager
Posted: Fri 07 Dec, 2018 07:04
by IgorZ
Изменённый вариант. Вызывается из меню выбора макроса клавишей
F2
(просто для примера, можно поменять).
local FN = ...
local _,LM = pcall(require,"LuaManager")
LM = type(LM)=="table" and LM or nil
local MSMenuGuid = "165AA6E3-C89B-4F82-A0C5-C309243FD21B"
Macro{
id="0427E52D-7AD5-4719-B8C2-12D275294E2A";
area="Menu";
key="F2";
priority=100;
condition=function() return LM and Menu.Id==MSMenuGuid end;
action=function()
local a,k = Object.Title:match(" (%S+) | (%S+)$")
Keys("Esc")
LM({MaShow=true,KMShow=true,EvShow=false,MoShow=false,MIShow=false,PrShow=false,PMShow=false,AMShow=true,AFilter=a,KFilter=k,FFilter="*|"..FN})
end;
}
Кстати, в LuaManager есть как программный способ фильтровать по клавише (используется в данном макросе), так и ручной: вызвать LuaManager, нажать
CtrlK
и ввести искомую клавиатурную комбинацию.
"FastMacro" через LuaManager
Posted: Fri 07 Dec, 2018 08:44
by John Doe
sToLp wrote: ↑Thu 06 Dec, 2018 23:29
А как бы в данном случае проявлялось бы отображение списка в цикле? И чем бы оно могло бы быть полезно?
Вы макрос с прошлой страницы не ставили?
viewtopic.php?p=146604#p146604
"FastMacro" через LuaManager
Posted: Fri 07 Dec, 2018 13:29
by sToLp
John Doe wrote: ↑Fri 07 Dec, 2018 08:44
Вы макрос с прошлой страницы не ставили?
Видимо, Вы имели ввиду макрос
отсюда. Если это так, то да, пробовал. И, в таком случае, разницу понял. Спасибо за разъяснение! Разовое отображение списка представляется более полезным. А циклом, возможно, полезно искать макросы "на ощупь" и то, если их не очень много.
"FastMacro" через LuaManager
Posted: Fri 07 Dec, 2018 13:35
by sToLp
IgorZ wrote: ↑Fri 07 Dec, 2018 07:04
Изменённый вариант.
Спасибо! Интересное решение. Надо присмотреться к нему, приноровиться. С ходу кажется неожиданным, что список, если я только правильно понял, создаётся на основе ключа вызова меню выбора макроса, из которого запускается сабжевый макрос.
"FastMacro" через LuaManager
Posted: Mon 10 Dec, 2018 09:38
by IgorZ
Добавлен ещё один макрос: вывод всех макросов с невалидным
key
для текущей области. Клавиша:
CtrlShiftF2
Требует свежую (сегодняшнюю) веhсию
LuaManager 5.0.3.
local FN = ...
local _,LM = pcall(require,"LuaManager")
LM = type(LM)=="table" and LM or nil
local MSMenuGuid = "165AA6E3-C89B-4F82-A0C5-C309243FD21B"
Macro{
id="0427E52D-7AD5-4719-B8C2-12D275294E2A";
area="Menu";
key="F2";
priority=100;
condition=function() return LM and Menu.Id==MSMenuGuid end;
action=function()
local a,k = Object.Title:match(" (%S+) | (%S+)$")
Keys("Esc")
LM({MaShow=true,KMShow=true,EvShow=false,MoShow=false,MIShow=false,PrShow=false,PMShow=false,AMShow=true,AFilter=a,KFilter=k,FFilter="*|"..FN})
end;
}
Macro{
id="126FD368-BEDE-413D-B894-254E592C0C03";
area="Common";
key="CtrlShiftF2";
priority=100;
condition=function() return LM end;
action=function()
LM({MaShow=true,KMShow=true,EvShow=false,MoShow=false,MIShow=false,PrShow=false,PMShow=false,AFilter=Area.Current,KFilter="none"})
end;
}
"FastMacro" через LuaManager
Posted: Mon 10 Dec, 2018 19:25
by sToLp
IgorZ wrote: ↑Mon 10 Dec, 2018 09:38
Добавлен ещё один макрос: вывод всех макросов с невалидным key для текущей области. Клавиша: CtrlShiftF2
Круто! Для углублённого ознакомления пока что времени недостаточно, но уже при беглом ознакомлении очень даже хорошо! Спасибо большое!
"FastMacro" через LuaManager
Posted: Tue 31 Mar, 2020 13:49
by citRiks
Где тут последняя версия? Спасибо.