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+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 if far.MacroGetState()==F.MACROSTATE_NOMACRO then mf.postmacro(mf.eval,keys[wait],2) end wait = false end else wait = false end end; } Macro { description="CtrlAlt sample"; area="Common"; key="CtrlAlt LRCtrl LRAlt CtrlShift AltShift CtrlAltShift LRCtrlShift LRAltShift"; priority=40; id="D1A40884-785D-4996-A71B-4FB05296A571"; action=function() far.Message(mf.akey(1,1),Area.Current) end; } |