"FastMacro" через LuaManager

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

"FastMacro" через LuaManager

Post by IgorZ »

Ради интереса попробовал решить задачу с помощью LuaManager. Получилось где-то так:
  1. local FN = ...
  2.  
  3. local in_process = false
  4.  
  5. local _,LM = pcall(require,"LuaManager")
  6.  
  7. LM = type(LM)=="table" and LM or nil
  8.  
  9.  
  10.  
  11. Macro{
  12.  
  13.   id="3E17F380-3D44-491C-A2B5-F60C6944A57C"; area="Common"; key="/.+/"; priority=100;
  14.  
  15.   condition=function(key)
  16.  
  17. for k=1,math.huge do -- переберём все мыслимые idы
  18.  
  19.   local me = mf.GetMacroCopy(k) -- получим макрос/обработчик событий
  20.  
  21.   if not me then return false end -- кончились - закончим перебор
  22.  
  23.   if me.FileName~=FN and me.area then -- это макрос, но не этот?
  24.  
  25.     local infilter = ((me.key:match("^/.*/$") and regex.find(key,me.key,1,"i")) or regex.find(me.key,"(^| )"..key.."($| )",1,"i")) -- отсеем клавиши
  26.  
  27.     infilter = infilter and regex.find(" "..me.area.." ","( Common | "..Area.Current.." )",1,"i") -- отсеем нетекущие области
  28.  
  29.     if infilter then return LM and not in_process and (not me.condition or me.condition()) end -- нашли - закончим перебор
  30.  
  31.   end
  32.  
  33. end -- for - перебор id
  34.  
  35.   end;
  36.  
  37.   action=function()
  38.  
  39. in_process = true
  40.  
  41. LM({MaShow=true,KMShow=true,EvShow=false,MoShow=false,MIShow=false,PrShow=false,PMShow=false,AMShow=false,KFilter=akey(1,0),FFilter="*|"..FN})
  42.  
  43. in_process = false
  44.  
  45.   end;
  46.  
  47. }
Last edited by IgorZ on Thu 29 Nov, 2018 10:10, edited 1 time in total.
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

"FastMacro" через LuaManager

Post by John Doe »

Latest post of the previous page:

IgorZ wrote: Thu 06 Dec, 2018 10:59 Так, с ходу, решения не вижу
far.NameToInputRecord или mf.key позволят проверить "корректность".
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

"FastMacro" через LuaManager

Post by John Doe »

sToLp wrote: Thu 06 Dec, 2018 10:30 К примеру — нажимаю CtrlShiftJ, появляется диалог приглашения, нажимаю клавишу или сочетание и получаю соответствующим образом наполненное меню LuaManager`а.
В LuaManager наверняка уже предусмотрена подобная функциональность.
Я верно понял, что достаточно однократно отобразить список, а не в цикле?
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

"FastMacro" через LuaManager

Post by John Doe »

IgorZ wrote: Thu 29 Nov, 2018 10:08 Получилось где-то так:
Вижу не проверяются флаги макросов.
И при проверке областей следует учитывать, что области автодополнения "прозрачны" для макросов.
IgorZ
Posts: 790
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 15 times
Been thanked: 93 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: 114 times
Been thanked: 12 times

"FastMacro" через LuaManager

Post by sToLp »

John Doe,
Прошу прощения, но я не понял, что значит:
однократно отобразить список, а не в цикле
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

"FastMacro" через LuaManager

Post by John Doe »

Запустили макрос хоткеем, в ответ на приглашении ввели требуемую клавишу, получили список LuaManager, ей соответствующий.
Конец работы, для продолжения надо снова запустить макрос.
User avatar
sToLp
Posts: 938
Joined: Thu 23 Jul, 2009 10:16
Has thanked: 114 times
Been thanked: 12 times

"FastMacro" через LuaManager

Post by sToLp »

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

А как бы в данном случае проявлялось бы отображение списка в цикле? И чем бы оно могло бы быть полезно?
IgorZ
Posts: 790
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 15 times
Been thanked: 93 times

"FastMacro" через LuaManager

Post by IgorZ »

Изменённый вариант. Вызывается из меню выбора макроса клавишей F2 (просто для примера, можно поменять).
  1. local FN = ...
  2.  
  3. local _,LM = pcall(require,"LuaManager")
  4.  
  5. LM = type(LM)=="table" and LM or nil
  6.  
  7. local MSMenuGuid = "165AA6E3-C89B-4F82-A0C5-C309243FD21B"
  8.  
  9. Macro{
  10.  
  11.   id="0427E52D-7AD5-4719-B8C2-12D275294E2A";
  12.  
  13.   area="Menu";
  14.  
  15.   key="F2";
  16.  
  17.   priority=100;
  18.  
  19.   condition=function() return LM and Menu.Id==MSMenuGuid end;
  20.  
  21.   action=function()
  22.  
  23. local a,k = Object.Title:match(" (%S+) | (%S+)$")
  24.  
  25. Keys("Esc")
  26.  
  27. LM({MaShow=true,KMShow=true,EvShow=false,MoShow=false,MIShow=false,PrShow=false,PMShow=false,AMShow=true,AFilter=a,KFilter=k,FFilter="*|"..FN})
  28.  
  29.   end;
  30.  
  31. }
Кстати, в LuaManager есть как программный способ фильтровать по клавише (используется в данном макросе), так и ручной: вызвать LuaManager, нажать CtrlK и ввести искомую клавиатурную комбинацию.
User avatar
John Doe
Бюрократ
Posts: 13807
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 73 times
Been thanked: 426 times
Contact:

"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: 114 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: 114 times
Been thanked: 12 times

"FastMacro" через LuaManager

Post by sToLp »

IgorZ wrote: Fri 07 Dec, 2018 07:04 Изменённый вариант.
Спасибо! Интересное решение. Надо присмотреться к нему, приноровиться. С ходу кажется неожиданным, что список, если я только правильно понял, создаётся на основе ключа вызова меню выбора макроса, из которого запускается сабжевый макрос.
IgorZ
Posts: 790
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 15 times
Been thanked: 93 times

"FastMacro" через LuaManager

Post by IgorZ »

Добавлен ещё один макрос: вывод всех макросов с невалидным key для текущей области. Клавиша: CtrlShiftF2Требует свежую (сегодняшнюю) веhсию LuaManager 5.0.3.
  1. local FN = ...
  2.  
  3. local _,LM = pcall(require,"LuaManager")
  4.  
  5. LM = type(LM)=="table" and LM or nil
  6.  
  7. local MSMenuGuid = "165AA6E3-C89B-4F82-A0C5-C309243FD21B"
  8.  
  9.  
  10.  
  11. Macro{
  12.  
  13.   id="0427E52D-7AD5-4719-B8C2-12D275294E2A";
  14.  
  15.   area="Menu";
  16.  
  17.   key="F2";
  18.  
  19.   priority=100;
  20.  
  21.   condition=function() return LM and Menu.Id==MSMenuGuid end;
  22.  
  23.   action=function()
  24.  
  25. local a,k = Object.Title:match(" (%S+) | (%S+)$")
  26.  
  27. Keys("Esc")
  28.  
  29. LM({MaShow=true,KMShow=true,EvShow=false,MoShow=false,MIShow=false,PrShow=false,PMShow=false,AMShow=true,AFilter=a,KFilter=k,FFilter="*|"..FN})
  30.  
  31.   end;
  32.  
  33. }
  34.  
  35.  
  36.  
  37. Macro{
  38.  
  39.   id="126FD368-BEDE-413D-B894-254E592C0C03";
  40.  
  41.   area="Common";
  42.  
  43.   key="CtrlShiftF2";
  44.  
  45.   priority=100;
  46.  
  47.   condition=function() return LM end;
  48.  
  49.   action=function()
  50.  
  51. LM({MaShow=true,KMShow=true,EvShow=false,MoShow=false,MIShow=false,PrShow=false,PMShow=false,AFilter=Area.Current,KFilter="none"})
  52.  
  53.   end;
  54.  
  55. }
User avatar
sToLp
Posts: 938
Joined: Thu 23 Jul, 2009 10:16
Has thanked: 114 times
Been thanked: 12 times

"FastMacro" через LuaManager

Post by sToLp »

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

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