"FastMacro" через LuaManager

Здесь обсуждается всё, что касается макросов.
IgorZ
Posts: 660
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 12 times
Been thanked: 52 times

"FastMacro" через LuaManager

Post by IgorZ »

Ради интереса попробовал решить задачу с помощью LuaManager. Получилось где-то так:
  1. local FN = ...
  2. local in_process = false
  3. local _,LM = pcall(require,"LuaManager")
  4. LM = type(LM)=="table" and LM or nil
  5.  
  6. Macro{
  7.   id="3E17F380-3D44-491C-A2B5-F60C6944A57C"; area="Common"; key="/.+/"; priority=100;
  8.   condition=function(key)
  9. for k=1,math.huge do -- переберём все мыслимые idы
  10.   local me = mf.GetMacroCopy(k) -- получим макрос/обработчик событий
  11.   if not me then return false end -- кончились - закончим перебор
  12.   if me.FileName~=FN and me.area then -- это макрос, но не этот?
  13.     local infilter = ((me.key:match("^/.*/$") and regex.find(key,me.key,1,"i")) or regex.find(me.key,"(^| )"..key.."($| )",1,"i")) -- отсеем клавиши
  14.     infilter = infilter and regex.find(" "..me.area.." ","( Common | "..Area.Current.." )",1,"i") -- отсеем нетекущие области
  15.     if infilter then return LM and not in_process and (not me.condition or me.condition()) end -- нашли - закончим перебор
  16.   end
  17. end -- for - перебор id
  18.   end;
  19.   action=function()
  20. in_process = true
  21. LM({MaShow=true,KMShow=true,EvShow=false,MoShow=false,MIShow=false,PrShow=false,PMShow=false,AMShow=false,KFilter=akey(1,0),FFilter="*|"..FN})
  22. in_process = false
  23.   end;
  24. }
Last edited by IgorZ on Thu 29 Nov, 2018 10:10, edited 1 time in total.

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

"FastMacro" через LuaManager

Post by John Doe »

Latest post of the previous page:

sToLp wrote:
Thu 06 Dec, 2018 10:30
К примеру — нажимаю CtrlShiftJ, появляется диалог приглашения, нажимаю клавишу или сочетание и получаю соответствующим образом наполненное меню LuaManager`а.
В LuaManager наверняка уже предусмотрена подобная функциональность.
Я верно понял, что достаточно однократно отобразить список, а не в цикле?

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

"FastMacro" через LuaManager

Post by John Doe »

IgorZ wrote:
Thu 29 Nov, 2018 10:08
Получилось где-то так:
Вижу не проверяются флаги макросов.
И при проверке областей следует учитывать, что области автодополнения "прозрачны" для макросов.

IgorZ
Posts: 660
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 12 times
Been thanked: 52 times

"FastMacro" через LuaManager

Post by IgorZ »

John Doe wrote:
Thu 06 Dec, 2018 11:33
IgorZ wrote:
Thu 06 Dec, 2018 10:59
Так, с ходу, решения не вижу
far.NameToInputRecord или mf.key позволят проверить "корректность".
Точно, спасибо.

User avatar
sToLp
Posts: 938
Joined: Thu 23 Jul, 2009 10:16
Has thanked: 107 times
Been thanked: 12 times

"FastMacro" через LuaManager

Post by sToLp »

John Doe,
Прошу прощения, но я не понял, что значит:
однократно отобразить список, а не в цикле

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

"FastMacro" через LuaManager

Post by John Doe »

Запустили макрос хоткеем, в ответ на приглашении ввели требуемую клавишу, получили список LuaManager, ей соответствующий.
Конец работы, для продолжения надо снова запустить макрос.

User avatar
sToLp
Posts: 938
Joined: Thu 23 Jul, 2009 10:16
Has thanked: 107 times
Been thanked: 12 times

"FastMacro" через LuaManager

Post by sToLp »

John Doe wrote:
Thu 06 Dec, 2018 12:23
Запустили макрос хоткеем, в ответ на приглашении ввели требуемую клавишу, получили список LuaManager, ей соответствующий.
Конец работы
Так ведь это же только для макроса конец работы. А для пользователя то это только начало работы со списком в макробраузере.

А как бы в данном случае проявлялось бы отображение списка в цикле? И чем бы оно могло бы быть полезно?

IgorZ
Posts: 660
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 12 times
Been thanked: 52 times

"FastMacro" через LuaManager

Post by IgorZ »

Изменённый вариант. Вызывается из меню выбора макроса клавишей F2 (просто для примера, можно поменять).
  1. local FN = ...
  2. local _,LM = pcall(require,"LuaManager")
  3. LM = type(LM)=="table" and LM or nil
  4. local MSMenuGuid = "165AA6E3-C89B-4F82-A0C5-C309243FD21B"
  5. Macro{
  6.   id="0427E52D-7AD5-4719-B8C2-12D275294E2A";
  7.   area="Menu";
  8.   key="F2";
  9.   priority=100;
  10.   condition=function() return LM and Menu.Id==MSMenuGuid end;
  11.   action=function()
  12. local a,k = Object.Title:match(" (%S+) | (%S+)$")
  13. Keys("Esc")
  14. LM({MaShow=true,KMShow=true,EvShow=false,MoShow=false,MIShow=false,PrShow=false,PMShow=false,AMShow=true,AFilter=a,KFilter=k,FFilter="*|"..FN})
  15.   end;
  16. }
Кстати, в LuaManager есть как программный способ фильтровать по клавише (используется в данном макросе), так и ручной: вызвать LuaManager, нажать CtrlK и ввести искомую клавиатурную комбинацию.

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

"FastMacro" через LuaManager

Post by John Doe »

sToLp wrote:
Thu 06 Dec, 2018 23:29
А как бы в данном случае проявлялось бы отображение списка в цикле? И чем бы оно могло бы быть полезно?
Вы макрос с прошлой страницы не ставили?
viewtopic.php?p=146604#p146604

User avatar
sToLp
Posts: 938
Joined: Thu 23 Jul, 2009 10:16
Has thanked: 107 times
Been thanked: 12 times

"FastMacro" через LuaManager

Post by sToLp »

John Doe wrote:
Fri 07 Dec, 2018 08:44
Вы макрос с прошлой страницы не ставили?
Видимо, Вы имели ввиду макрос отсюда. Если это так, то да, пробовал. И, в таком случае, разницу понял. Спасибо за разъяснение! Разовое отображение списка представляется более полезным. А циклом, возможно, полезно искать макросы "на ощупь" и то, если их не очень много.
Last edited by sToLp on Fri 07 Dec, 2018 13:30, edited 1 time in total.

User avatar
sToLp
Posts: 938
Joined: Thu 23 Jul, 2009 10:16
Has thanked: 107 times
Been thanked: 12 times

"FastMacro" через LuaManager

Post by sToLp »

IgorZ wrote:
Fri 07 Dec, 2018 07:04
Изменённый вариант.
Спасибо! Интересное решение. Надо присмотреться к нему, приноровиться. С ходу кажется неожиданным, что список, если я только правильно понял, создаётся на основе ключа вызова меню выбора макроса, из которого запускается сабжевый макрос.

IgorZ
Posts: 660
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 12 times
Been thanked: 52 times

"FastMacro" через LuaManager

Post by IgorZ »

Добавлен ещё один макрос: вывод всех макросов с невалидным key для текущей области. Клавиша: CtrlShiftF2Требует свежую (сегодняшнюю) веhсию LuaManager 5.0.3.
  1. local FN = ...
  2. local _,LM = pcall(require,"LuaManager")
  3. LM = type(LM)=="table" and LM or nil
  4. local MSMenuGuid = "165AA6E3-C89B-4F82-A0C5-C309243FD21B"
  5.  
  6. Macro{
  7.   id="0427E52D-7AD5-4719-B8C2-12D275294E2A";
  8.   area="Menu";
  9.   key="F2";
  10.   priority=100;
  11.   condition=function() return LM and Menu.Id==MSMenuGuid end;
  12.   action=function()
  13. local a,k = Object.Title:match(" (%S+) | (%S+)$")
  14. Keys("Esc")
  15. LM({MaShow=true,KMShow=true,EvShow=false,MoShow=false,MIShow=false,PrShow=false,PMShow=false,AMShow=true,AFilter=a,KFilter=k,FFilter="*|"..FN})
  16.   end;
  17. }
  18.  
  19. Macro{
  20.   id="126FD368-BEDE-413D-B894-254E592C0C03";
  21.   area="Common";
  22.   key="CtrlShiftF2";
  23.   priority=100;
  24.   condition=function() return LM end;
  25.   action=function()
  26. LM({MaShow=true,KMShow=true,EvShow=false,MoShow=false,MIShow=false,PrShow=false,PMShow=false,AFilter=Area.Current,KFilter="none"})
  27.   end;
  28. }

User avatar
sToLp
Posts: 938
Joined: Thu 23 Jul, 2009 10:16
Has thanked: 107 times
Been thanked: 12 times

"FastMacro" через LuaManager

Post by sToLp »

IgorZ wrote:
Mon 10 Dec, 2018 09:38
Добавлен ещё один макрос: вывод всех макросов с невалидным key для текущей области. Клавиша: CtrlShiftF2
Круто! Для углублённого ознакомления пока что времени недостаточно, но уже при беглом ознакомлении очень даже хорошо! Спасибо большое!

Post Reply

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