Хочу переназначить клавишу, заданную для вызова макроса, в диалоге настройки этого макроса. Можно ли это как-то сделать "на лету". Т.е. без того, чтобы:
(а) в тексте макроса указать
key = cKey
;
(б) значение переменной записать (
mload
/
msave
);
(в) перезагрузить макросы (
far.MacroLoadAll
) ?
Пробовал после назначения нового хоткея вызвать Macro (пришлось обманывать систему макросов, т.к. функция Macro почему-то обнулялась) - в принципе работает, но остаются активными старые хоткеи. А вот как их заблокировать - не врублюсь!…
Привожу простенький пример. Изначально три макроса, повешенные на
CtrlAltFn. Выводят просто сообщение
Example-n. Кроме того, есть макрос "переназначения", повешенный на
AltShiftF12
; он присваивает тем же самым макросам хоткеи
AltShiftFn. В результате выполнения макроса переназначения те же макросы вызываются и
новыми хоткеями, и
старыми. Вот как отключить старые?
local aMacros, fMacro = {}, Macro
local function AddMacro(a) table.insert(aMacros, a) end
local function RegMacro(_key)
for _,v in ipairs(aMacros) do
if _key then
--v.disabled = true
--fMacro(v)
--v.disabled = nil
v.key = _key
end
fMacro(v)
end
end
----------------- Начальное задание макросов -----------------
AddMacro{
id="586B977F-971D-4D1E-B83E-FBD619DC0370";
area="Shell";
key="CtrlAltF1";
description="Example-1";
flags="";
action=function(data)
far.Show('22: Example-1')
end;
}
AddMacro{
id="3ED3B69B-63D4-4F0E-B4FE-E25FED037A5E";
area="Shell";
key="CtrlAltF2";
description="Example-2";
flags="";
action=function(data)
far.Show('22: Example-2')
end;
}
AddMacro{
id="0215C466-357D-4EB2-B485-6B48DF6AFCE9";
area="Shell";
key="CtrlAltF3";
description="Example-3";
flags="";
action=function(data)
far.Show('22: Example-3')
end;
}
RegMacro()
----------------- Макрос смены хоткея ----------------------
Macro{
id="811877F5-6F1F-4E4B-A625-914E0670C086";
area="Shell";
key="AltShiftF12";
description="Смена хоткея";
flags="";
action=function(data)
for i,v in ipairs(aMacros) do
v.key = 'AltShiftF'..i
end
RegMacro()
end;
}