Page 1 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;
}
Поведение, когда нужно сделать выбор из нескольких макросов
Posted: Thu 29 Nov, 2018 13:32
by John Doe
IgorZ, как-то странно работает, ловит только некоторые макросы.
(Плюс для реального использования нужна возможность и отключить перехват нажатий)
FastMacro – Быстрый поиск доступных макросов
Posted: Fri 30 Nov, 2018 08:05
by IgorZ
John Doe wrote: ↑Thu 29 Nov, 2018 13:32
IgorZ, как-то странно работает, ловит только некоторые макросы.
(Плюс для реального использования нужна возможность и отключить перехват нажатий)
Так это концепт, просто для примера, даже не бета, наверное. Если будет оценен, как нужный, можно и доработать.
Макросы отсеиваются по текущей (или Common) области, а также по condition, если оно есть. Пропускаются какие-то макросы с той же областью и без condition (или с condition, возвращающим не ложь и не nil)?
FastMacro – Быстрый поиск доступных макросов
Posted: Fri 30 Nov, 2018 08:34
by John Doe
IgorZ wrote: ↑Fri 30 Nov, 2018 08:05
Так это концепт, просто для примера, даже не бета, наверное. Если будет оценен, как нужный, можно и доработать.
Вот сложно оценить в таком состоянии)
И чтобы чужую тему не засорять, давайте я перенесу последние посты к LuaManager? (перекрёстные ссылки добавите потом)
IgorZ wrote: ↑Fri 30 Nov, 2018 08:05
Пропускаются какие-то макросы с той же областью и без condition (или с condition, возвращающим не ложь и не nil)?
Да. Например в панелях макрос на Esc.
FastMacro – Быстрый поиск доступных макросов
Posted: Mon 03 Dec, 2018 04:34
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. Выкладываю правленную версию:
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)
if not LM or in_process then return false end -- нет LuaManager - не работаем; уже работаем - повторно не запускаемся
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") -- отсеем нетекущие области
infilter = infilter and (not me.condition or me.condition()) -- нашли - проверим условия, если есть
if infilter then return true 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: Mon 03 Dec, 2018 08:12
by John Doe
IgorZ wrote: ↑Mon 03 Dec, 2018 04:34
А там-то он к чему?
Как скажете.
IgorZ wrote: ↑Mon 03 Dec, 2018 04:34
Выкладываю правленную версию:
Да, теперь работает ожидаемо.
"FastMacro" через LuaManager
Posted: Mon 03 Dec, 2018 16:28
by sToLp
IgorZ wrote: ↑Fri 30 Nov, 2018 08:05 это концепт, просто для примера, даже не бета, наверное. Если будет оценен, как нужный, можно и доработать.
Нужный. Однозначно нужный.
"FastMacro" через LuaManager
Posted: Tue 04 Dec, 2018 06:25
by IgorZ
sToLp wrote: ↑Mon 03 Dec, 2018 16:28
IgorZ wrote: ↑Fri 30 Nov, 2018 08:05 это концепт, просто для примера, даже не бета, наверное. Если будет оценен, как нужный, можно и доработать.
Нужный. Однозначно нужный.
Тогда с Вас заявки по доработке.
"FastMacro" через LuaManager
Posted: Tue 04 Dec, 2018 10:44
by sToLp
IgorZ wrote: ↑Tue 04 Dec, 2018 06:25 Тогда с Вас заявки по доработке.
Желательно просто дооформить концепт в качестве макроса, приглашающего нажать клавишу/сочетание, и далее по концепту.
А из особых пожеланий — хорошо бы иметь и дополнительный макрос, выводящий список макросов с невалидными ключами.
"FastMacro" через LuaManager
Posted: Thu 06 Dec, 2018 06:27
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. Собственно, я вообще не вижу полезности данного макроса после того, как Шмуэль доработал список конфликтующих макросов. Единственно - когда макрос с наибольшим приоритетом один: тогда меню конфликта не появится, а данный макрос всё равно выведет все варианты. Но есть ли в этом практическая ценность?
"FastMacro" через LuaManager
Posted: Thu 06 Dec, 2018 08:16
by John Doe
IgorZ wrote: ↑Thu 06 Dec, 2018 06:27
Но есть ли в этом практическая ценность?
Разумеется. Но если стандартное меню устраивает, то макрос можно сделать тривиальным.
В данном случае же отдельную ценность может представлять и то, что это меню LuaManager.
"FastMacro" через LuaManager
Posted: Thu 06 Dec, 2018 10:30
by sToLp
IgorZ wrote: ↑Thu 06 Dec, 2018 06:27
Где и в какой момент должно появляться приглашение?
Наверное, в любой области. С самого начала. К примеру — нажимаю CtrlShiftJ, появляется диалог приглашения, нажимаю клавишу или сочетание и получаю соответствующим образом наполненное меню LuaManager`а.
Что значит "невалидными" в данном случае?
Любыми, не соответствующими стандартным ключам.
P. S. Собственно, я вообще не вижу полезности данного макроса после того, как Шмуэль доработал список конфликтующих макросов. Единственно - когда макрос с наибольшим приоритетом один: тогда меню конфликта не появится, а данный макрос всё равно выведет все варианты.
Невалидные ключи гораздо чаще используются преднамеренно, чем по ошибке. И в меню выбора макроса они чаще всего не попадают. И сами по себе, не взирая на наивысший приоритет, макросы они не вызывают (а как их набрать с клавиатуры?). Они используются для вызова из других макросов функцией eval. Вот для интереса посмотрел в своей тестовой коллекции макросов и оказалось, что с невалидными ключами там аж 82 штуки.
Но есть ли в этом практическая ценность?
На этот вопрос уже очень верно
ответил John Doe.
"FastMacro" через LuaManager
Posted: Thu 06 Dec, 2018 10:59
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
" решение очевидно).
"FastMacro" через LuaManager
Posted: Thu 06 Dec, 2018 11:28
by sToLp
IgorZ wrote: ↑Thu 06 Dec, 2018 10:59То есть, мой макрос должен вызываться из меню конфликта макросов, так?
Не обязательно, но и не исключается. Это же пользователь определит — будут ли у него на вызывающий ключ ещё макросы или нет. Лично я планирую дать 2 ключа. Один для вызова из меню выбора макроса и один — для индивидуального вызова.
Не знаю, не знаю... Так, с ходу, решения не вижу
Желательно бы, чтобы "невалидноключники" были бы выведены в меню LuaManager`а, как это уже было отмечено. Но, поскольку лучшее — враг хорошего, то можно, разумеется, чтобы и в стандартное меню было бы выведено. Тоже польза. Как сочтёте возможным.
"FastMacro" через LuaManager
Posted: Thu 06 Dec, 2018 11:33
by John Doe
IgorZ wrote: ↑Thu 06 Dec, 2018 10:59
Так, с ходу, решения не вижу
far.NameToInputRecord или mf.key позволят проверить "корректность".