"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: 13801
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 72 times
Been thanked: 425 times
Contact:

Поведение, когда нужно сделать выбор из нескольких макросов

Post by John Doe »

IgorZ, как-то странно работает, ловит только некоторые макросы.
(Плюс для реального использования нужна возможность и отключить перехват нажатий)
IgorZ
Posts: 790
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 15 times
Been thanked: 93 times

FastMacro – Быстрый поиск доступных макросов

Post by IgorZ »

John Doe wrote: Thu 29 Nov, 2018 13:32 IgorZ, как-то странно работает, ловит только некоторые макросы.
(Плюс для реального использования нужна возможность и отключить перехват нажатий)
Так это концепт, просто для примера, даже не бета, наверное. Если будет оценен, как нужный, можно и доработать.
Макросы отсеиваются по текущей (или Common) области, а также по condition, если оно есть. Пропускаются какие-то макросы с той же областью и без condition (или с condition, возвращающим не ложь и не nil)?
Last edited by IgorZ on Fri 30 Nov, 2018 08:05, edited 1 time in total.
User avatar
John Doe
Бюрократ
Posts: 13801
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 72 times
Been thanked: 425 times
Contact:

FastMacro – Быстрый поиск доступных макросов

Post by John Doe »

IgorZ wrote: Fri 30 Nov, 2018 08:05 Так это концепт, просто для примера, даже не бета, наверное. Если будет оценен, как нужный, можно и доработать.
Вот сложно оценить в таком состоянии)
И чтобы чужую тему не засорять, давайте я перенесу последние посты к LuaManager? (перекрёстные ссылки добавите потом)
IgorZ wrote: Fri 30 Nov, 2018 08:05 Пропускаются какие-то макросы с той же областью и без condition (или с condition, возвращающим не ложь и не nil)?
Да. Например в панелях макрос на Esc.
IgorZ
Posts: 790
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 15 times
Been thanked: 93 times

FastMacro – Быстрый поиск доступных макросов

Post by IgorZ »

John Doe wrote: Fri 30 Nov, 2018 08:34
IgorZ wrote: Fri 30 Nov, 2018 08:05 Так это концепт, просто для примера, даже не бета, наверное. Если будет оценен, как нужный, можно и доработать.
Вот сложно оценить в таком состоянии)
И чтобы чужую тему не засорять, давайте я перенесу последние посты к LuaManager? (перекрёстные ссылки добавите потом)
А там-то он к чему?
John Doe wrote: Fri 30 Nov, 2018 08:34
IgorZ wrote: Fri 30 Nov, 2018 08:05 Пропускаются какие-то макросы с той же областью и без condition (или с condition, возвращающим не ложь и не nil)?
Да. Например в панелях макрос на Esc.
Можно конкретный код? Потому что, вроде бы, не должно такого быть.

P. S. Посмотрел ещё раз - таки чуток намудрил я в condition. Выкладываю правленную версию:
  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. if not LM or in_process then return false end -- нет LuaManager - не работаем; уже работаем - повторно не запускаемся
  18.  
  19. for k=1,math.huge do -- переберём все мыслимые idы
  20.  
  21.   local me = mf.GetMacroCopy(k) -- получим макрос/обработчик событий
  22.  
  23.   if not me then return false end -- кончились - закончим перебор
  24.  
  25.   if me.FileName~=FN and me.area then -- это макрос, но не этот?
  26.  
  27.     local infilter = ((me.key:match("^/.*/$") and regex.find(key,me.key,1,"i")) or regex.find(me.key,"(^| )"..key.."($| )",1,"i")) -- отсеем клавиши
  28.  
  29.     infilter = infilter and regex.find(" "..me.area.." ","( Common | "..Area.Current.." )",1,"i") -- отсеем нетекущие области
  30.  
  31.     infilter = infilter and (not me.condition or me.condition()) -- нашли - проверим условия, если есть
  32.  
  33.     if infilter then return true end -- точно нашли - закончим перебор
  34.  
  35.   end
  36.  
  37. end -- for - перебор id
  38.  
  39.   end;
  40.  
  41.   action=function()
  42.  
  43. in_process = true
  44.  
  45. LM({MaShow=true,KMShow=true,EvShow=false,MoShow=false,MIShow=false,PrShow=false,PMShow=false,AMShow=false,KFilter=akey(1,0),FFilter="*|"..FN})
  46.  
  47. in_process = false
  48.  
  49.   end;
  50.  
  51. }
Last edited by IgorZ on Mon 03 Dec, 2018 05:21, edited 1 time in total.
User avatar
John Doe
Бюрократ
Posts: 13801
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 72 times
Been thanked: 425 times
Contact:

"FastMacro" через LuaManager

Post by John Doe »

IgorZ wrote: Mon 03 Dec, 2018 04:34 А там-то он к чему?
Как скажете.
IgorZ wrote: Mon 03 Dec, 2018 04:34 Выкладываю правленную версию:
Да, теперь работает ожидаемо.
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 30 Nov, 2018 08:05 это концепт, просто для примера, даже не бета, наверное. Если будет оценен, как нужный, можно и доработать.
Нужный. Однозначно нужный.
IgorZ
Posts: 790
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 15 times
Been thanked: 93 times

"FastMacro" через LuaManager

Post by IgorZ »

sToLp wrote: Mon 03 Dec, 2018 16:28
IgorZ wrote: Fri 30 Nov, 2018 08:05 это концепт, просто для примера, даже не бета, наверное. Если будет оценен, как нужный, можно и доработать.
Нужный. Однозначно нужный.
Тогда с Вас заявки по доработке.
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: Tue 04 Dec, 2018 06:25 Тогда с Вас заявки по доработке.
Желательно просто дооформить концепт в качестве макроса, приглашающего нажать клавишу/сочетание, и далее по концепту.
А из особых пожеланий — хорошо бы иметь и дополнительный макрос, выводящий список макросов с невалидными ключами.
IgorZ
Posts: 790
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 15 times
Been thanked: 93 times

"FastMacro" через LuaManager

Post by IgorZ »

sToLp wrote: Tue 04 Dec, 2018 10:44
IgorZ wrote: Tue 04 Dec, 2018 06:25 Тогда с Вас заявки по доработке.
Желательно просто дооформить концепт в качестве макроса, приглашающего нажать клавишу/сочетание, и далее по концепту.
Где и в какой момент должно появляться приглашение?
sToLp wrote: Tue 04 Dec, 2018 10:44 А из особых пожеланий — хорошо бы иметь и дополнительный макрос, выводящий список макросов с невалидными ключами.
Что значит "невалидными" в данном случае?
P. S. Собственно, я вообще не вижу полезности данного макроса после того, как Шмуэль доработал список конфликтующих макросов. Единственно - когда макрос с наибольшим приоритетом один: тогда меню конфликта не появится, а данный макрос всё равно выведет все варианты. Но есть ли в этом практическая ценность?
Last edited by IgorZ on Thu 06 Dec, 2018 06:31, edited 1 time in total.
User avatar
John Doe
Бюрократ
Posts: 13801
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 72 times
Been thanked: 425 times
Contact:

"FastMacro" через LuaManager

Post by John Doe »

IgorZ wrote: Thu 06 Dec, 2018 06:27 Но есть ли в этом практическая ценность?
Разумеется. Но если стандартное меню устраивает, то макрос можно сделать тривиальным.
В данном случае же отдельную ценность может представлять и то, что это меню LuaManager.
Last edited by John Doe on Thu 06 Dec, 2018 08:18, 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: Thu 06 Dec, 2018 06:27 Где и в какой момент должно появляться приглашение?
Наверное, в любой области. С самого начала. К примеру — нажимаю CtrlShiftJ, появляется диалог приглашения, нажимаю клавишу или сочетание и получаю соответствующим образом наполненное меню LuaManager`а.
Что значит "невалидными" в данном случае?
Любыми, не соответствующими стандартным ключам.
P. S. Собственно, я вообще не вижу полезности данного макроса после того, как Шмуэль доработал список конфликтующих макросов. Единственно - когда макрос с наибольшим приоритетом один: тогда меню конфликта не появится, а данный макрос всё равно выведет все варианты.
Невалидные ключи гораздо чаще используются преднамеренно, чем по ошибке. И в меню выбора макроса они чаще всего не попадают. И сами по себе, не взирая на наивысший приоритет, макросы они не вызывают (а как их набрать с клавиатуры?). Они используются для вызова из других макросов функцией eval. Вот для интереса посмотрел в своей тестовой коллекции макросов и оказалось, что с невалидными ключами там аж 82 штуки.
Но есть ли в этом практическая ценность?
На этот вопрос уже очень верно ответил John Doe.
IgorZ
Posts: 790
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 15 times
Been thanked: 93 times

"FastMacro" через LuaManager

Post by IgorZ »

sToLp wrote: Thu 06 Dec, 2018 10:30
IgorZ wrote: Thu 06 Dec, 2018 06:27 Где и в какой момент должно появляться приглашение?
Наверное, в любой области. С самого начала. К примеру — нажимаю CtrlShiftJ, появляется диалог приглашения, нажимаю клавишу или сочетание и получаю соответствующим образом наполненное меню LuaManager`а.
То есть, мой макрос должен вызываться из меню конфликта макросов, так?
sToLp wrote: Thu 06 Dec, 2018 10:30
Что значит "невалидными" в данном случае?
Любыми, не соответствующими стандартным ключам.
P. S. Собственно, я вообще не вижу полезности данного макроса после того, как Шмуэль доработал список конфликтующих макросов. Единственно - когда макрос с наибольшим приоритетом один: тогда меню конфликта не появится, а данный макрос всё равно выведет все варианты.
Невалидные ключи гораздо чаще используются преднамеренно, чем по ошибке. И в меню выбора макроса они чаще всего не попадают. И сами по себе, не взирая на наивысший приоритет, макросы они не вызывают (а как их набрать с клавиатуры?). Они используются для вызова из других макросов функцией eval. Вот для интереса посмотрел в своей тестовой коллекции макросов и оказалось, что с невалидными ключами там аж 82 штуки.
А, то есть "невалидные" - это те, которые невозможно набрать с клавиатуры, наподобие "none"?
Видимо, к эти же макросам следует прибавить и те, у которых поле key вообще не указано?
Не знаю, не знаю... Так, с ходу, решения не вижу (с невалидными, с "без 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 »

IgorZ wrote: Thu 06 Dec, 2018 10:59То есть, мой макрос должен вызываться из меню конфликта макросов, так?
Не обязательно, но и не исключается. Это же пользователь определит — будут ли у него на вызывающий ключ ещё макросы или нет. Лично я планирую дать 2 ключа. Один для вызова из меню выбора макроса и один — для индивидуального вызова.
Не знаю, не знаю... Так, с ходу, решения не вижу
Желательно бы, чтобы "невалидноключники" были бы выведены в меню LuaManager`а, как это уже было отмечено. Но, поскольку лучшее — враг хорошего, то можно, разумеется, чтобы и в стандартное меню было бы выведено. Тоже польза. Как сочтёте возможным.
User avatar
John Doe
Бюрократ
Posts: 13801
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 72 times
Been thanked: 425 times
Contact:

"FastMacro" через LuaManager

Post by John Doe »

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

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