"FastMacro" через LuaManager

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

"FastMacro" через LuaManager

Post by IgorZ » Thu 29 Nov, 2018 10:08

Ради интереса попробовал решить задачу с помощью 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: 12075
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 28 times
Been thanked: 152 times

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

Post by John Doe » Thu 29 Nov, 2018 13:32

IgorZ, как-то странно работает, ловит только некоторые макросы.
(Плюс для реального использования нужна возможность и отключить перехват нажатий)

IgorZ
Posts: 568
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 9 times
Been thanked: 32 times

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

Post by IgorZ » Fri 30 Nov, 2018 08:05

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: 12075
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 28 times
Been thanked: 152 times

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

Post by John Doe » Fri 30 Nov, 2018 08:34

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

IgorZ
Posts: 568
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 9 times
Been thanked: 32 times

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

Post by IgorZ » Mon 03 Dec, 2018 04:34

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. 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. if not LM or in_process then return false end -- нет LuaManager - не работаем; уже работаем - повторно не запускаемся
  10. for k=1,math.huge do -- переберём все мыслимые idы
  11.   local me = mf.GetMacroCopy(k) -- получим макрос/обработчик событий
  12.   if not me then return false end -- кончились - закончим перебор
  13.   if me.FileName~=FN and me.area then -- это макрос, но не этот?
  14.     local infilter = ((me.key:match("^/.*/$") and regex.find(key,me.key,1,"i")) or regex.find(me.key,"(^| )"..key.."($| )",1,"i")) -- отсеем клавиши
  15.     infilter = infilter and regex.find(" "..me.area.." ","( Common | "..Area.Current.." )",1,"i") -- отсеем нетекущие области
  16.     infilter = infilter and (not me.condition or me.condition()) -- нашли - проверим условия, если есть
  17.     if infilter then return true end -- точно нашли - закончим перебор
  18.   end
  19. end -- for - перебор id
  20.   end;
  21.   action=function()
  22. in_process = true
  23. LM({MaShow=true,KMShow=true,EvShow=false,MoShow=false,MIShow=false,PrShow=false,PMShow=false,AMShow=false,KFilter=akey(1,0),FFilter="*|"..FN})
  24. in_process = false
  25.   end;
  26. }
Last edited by IgorZ on Mon 03 Dec, 2018 05:21, edited 1 time in total.

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

"FastMacro" через LuaManager

Post by John Doe » Mon 03 Dec, 2018 08:12

IgorZ wrote:
Mon 03 Dec, 2018 04:34
А там-то он к чему?
Как скажете.
IgorZ wrote:
Mon 03 Dec, 2018 04:34
Выкладываю правленную версию:
Да, теперь работает ожидаемо.

User avatar
sToLp
Posts: 924
Joined: Thu 23 Jul, 2009 10:16
Has thanked: 106 times
Been thanked: 8 times

"FastMacro" через LuaManager

Post by sToLp » Mon 03 Dec, 2018 16:28

IgorZ wrote:
Fri 30 Nov, 2018 08:05
это концепт, просто для примера, даже не бета, наверное. Если будет оценен, как нужный, можно и доработать.
Нужный. Однозначно нужный.

IgorZ
Posts: 568
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 9 times
Been thanked: 32 times

"FastMacro" через LuaManager

Post by IgorZ » Tue 04 Dec, 2018 06:25

sToLp wrote:
Mon 03 Dec, 2018 16:28
IgorZ wrote:
Fri 30 Nov, 2018 08:05
это концепт, просто для примера, даже не бета, наверное. Если будет оценен, как нужный, можно и доработать.
Нужный. Однозначно нужный.
Тогда с Вас заявки по доработке.

User avatar
sToLp
Posts: 924
Joined: Thu 23 Jul, 2009 10:16
Has thanked: 106 times
Been thanked: 8 times

"FastMacro" через LuaManager

Post by sToLp » Tue 04 Dec, 2018 10:44

IgorZ wrote:
Tue 04 Dec, 2018 06:25
Тогда с Вас заявки по доработке.
Желательно просто дооформить концепт в качестве макроса, приглашающего нажать клавишу/сочетание, и далее по концепту.
А из особых пожеланий — хорошо бы иметь и дополнительный макрос, выводящий список макросов с невалидными ключами.

IgorZ
Posts: 568
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 9 times
Been thanked: 32 times

"FastMacro" через LuaManager

Post by IgorZ » Thu 06 Dec, 2018 06:27

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: 12075
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 28 times
Been thanked: 152 times

"FastMacro" через LuaManager

Post by John Doe » Thu 06 Dec, 2018 08:16

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: 924
Joined: Thu 23 Jul, 2009 10:16
Has thanked: 106 times
Been thanked: 8 times

"FastMacro" через LuaManager

Post by sToLp » Thu 06 Dec, 2018 10:30

IgorZ wrote:
Thu 06 Dec, 2018 06:27
Где и в какой момент должно появляться приглашение?
Наверное, в любой области. С самого начала. К примеру — нажимаю CtrlShiftJ, появляется диалог приглашения, нажимаю клавишу или сочетание и получаю соответствующим образом наполненное меню LuaManager`а.
Что значит "невалидными" в данном случае?
Любыми, не соответствующими стандартным ключам.
P. S. Собственно, я вообще не вижу полезности данного макроса после того, как Шмуэль доработал список конфликтующих макросов. Единственно - когда макрос с наибольшим приоритетом один: тогда меню конфликта не появится, а данный макрос всё равно выведет все варианты.
Невалидные ключи гораздо чаще используются преднамеренно, чем по ошибке. И в меню выбора макроса они чаще всего не попадают. И сами по себе, не взирая на наивысший приоритет, макросы они не вызывают (а как их набрать с клавиатуры?). Они используются для вызова из других макросов функцией eval. Вот для интереса посмотрел в своей тестовой коллекции макросов и оказалось, что с невалидными ключами там аж 82 штуки.
Но есть ли в этом практическая ценность?
На этот вопрос уже очень верно ответил John Doe.

IgorZ
Posts: 568
Joined: Wed 13 Jul, 2011 03:32
Has thanked: 9 times
Been thanked: 32 times

"FastMacro" через LuaManager

Post by IgorZ » Thu 06 Dec, 2018 10:59

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: 924
Joined: Thu 23 Jul, 2009 10:16
Has thanked: 106 times
Been thanked: 8 times

"FastMacro" через LuaManager

Post by sToLp » Thu 06 Dec, 2018 11:28

IgorZ wrote:
Thu 06 Dec, 2018 10:59
То есть, мой макрос должен вызываться из меню конфликта макросов, так?
Не обязательно, но и не исключается. Это же пользователь определит — будут ли у него на вызывающий ключ ещё макросы или нет. Лично я планирую дать 2 ключа. Один для вызова из меню выбора макроса и один — для индивидуального вызова.
Не знаю, не знаю... Так, с ходу, решения не вижу
Желательно бы, чтобы "невалидноключники" были бы выведены в меню LuaManager`а, как это уже было отмечено. Но, поскольку лучшее — враг хорошего, то можно, разумеется, чтобы и в стандартное меню было бы выведено. Тоже польза. Как сочтёте возможным.

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

"FastMacro" через LuaManager

Post by John Doe » Thu 06 Dec, 2018 11:33

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

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

"FastMacro" через LuaManager

Post by John Doe » Thu 06 Dec, 2018 11:46

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

Post Reply

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