Latest post of the previous page:
Вариантов не так много, т.ч. когда без разницы, несложно назначить все.
Latest post of the previous page:
Вариантов не так много, т.ч. когда без разницы, несложно назначить все.
По какому вопросу?
Стоит ли придавать значение порядку нажатия/отпускания отдельных клавиш комбинации?
Предлагаю быстрый и грязный proof of concept
Code: Select all
local F = far.Flags
local mods = {}
for i,v in ipairs{"Ctrl","Alt"} do
local r = far.NameToInputRecord(v)
mods[r.VirtualKeyCode] = true
end
local mask = bor(F.LEFT_ALT_PRESSED,F.RIGHT_ALT_PRESSED,F.LEFT_CTRL_PRESSED,F.RIGHT_CTRL_PRESSED,F.SHIFT_PRESSED)
local CtrlAlt = bor(F.LEFT_ALT_PRESSED,F.LEFT_CTRL_PRESSED)
local wait
Event{
group="ConsoleInput";
description="CtrlAlt";
id="2EEE56E1-228B-4087-B583-6E0612E6DF0B";
action=function(r)
if r.EventType~=F.KEY_EVENT then
return
elseif wait then
if mods[r.VirtualKeyCode] then
if not r.KeyDown then
wait = false
mf.postmacro(mf.eval,"CtrlAlt",2)
end
else
wait = false
end
elseif mods[r.VirtualKeyCode] then
if r.KeyDown and band(mask,r.ControlKeyState)==CtrlAlt then wait = true end
end
end;
}
Macro { description="CtrlAlt sample";
area="Common"; key="CtrlAlt";
id="D1A40884-785D-4996-A71B-4FB05296A571";
action=function()
far.Message(mf.akey(1,1),Area.Current)
end;
}
Code: Select all
local F = far.Flags
local mods = {[0x11]="Ctrl",[0x12]="Alt",[0x10]="Shift"}
local A,rA,C,rC,S = F.LEFT_ALT_PRESSED,F.RIGHT_ALT_PRESSED,F.LEFT_CTRL_PRESSED,F.RIGHT_CTRL_PRESSED,F.SHIFT_PRESSED
local mask = bor(A,rA,C,rC,S)
local keys = {
--[[
[c]="Ctrl",
[rC] ="RCtrl",
[A] ="Alt",
[rA] ="RAlt",
[S] ="Shift",
--]]
[C+A] ="CtrlAlt",
[C+rA] ="CtrlRAlt",
[rC+A] ="RCtrlAlt",
[rC+rA]="RCtrlRAlt",
[A+rA] ="LRAlt",
[C+rC] ="LRCtrl",
[C+S] ="CtrlShift",
[rC+S] ="RCtrlShift",
[A+S] ="AltShift",
[rA+S] ="RAltShift",
[C+A+S] ="CtrlAltShift",
[C+rA+S] ="CtrlRAltShift",
[rC+A+S] ="RCtrlAltShift",
[rC+rA+S]="RCtrlRAltShift",
[A+rA+S] ="LRAltShift",
[C+rC+S] ="LRCtrlShift",
}
local wait
Event{
group="ConsoleInput";
description="CtrlAlt";
id="2EEE56E1-228B-4087-B583-6E0612E6DF0B";
action=function(r)
if r.EventType~=F.KEY_EVENT then
return
elseif mods[r.VirtualKeyCode] then
if r.KeyDown then
wait = band(mask,r.ControlKeyState)
if not keys[wait] then wait = false end --to filter single mods
elseif wait then
mf.postmacro(mf.eval,keys[wait],2)
wait = false
end
else
wait = false
end
end;
}
Macro { description="CtrlAlt sample";
area="Common"; key="CtrlAlt LRCtrl LRAlt CtrlShift AltShift CtrlAltShift LRCtrlShift LRAltShift";
id="D1A40884-785D-4996-A71B-4FB05296A571";
action=function()
far.Message(mf.akey(1,1),Area.Current)
end;
}
LRCtrl
(LCtrl+RCtrl) и LRAlt
(LAlt+RAlt)