; ; Functions for holding and repeating keys ; _HoldRepeat_TurboOn := Map() _GetPrefix(SendBlind) { if (SendBlind) { return "{Blind}" } else { return "" } } Hold(Primary, Secondary:=[],Tertiary:=[],SendBlind:=true) { Prefix := _GetPrefix(SendBlind) Send Prefix "{" Primary " down}" SetTimer HoldLoop.Bind(Primary,Secondary,Tertiary,Prefix), 50 } HoldLoop(Primary, Secondary, Tertiary,Prefix) { if GetKeyState(Primary,"P") { SetTimer , 0 return } for index,key in Secondary { if GetKeyState(key,"P") { Send Prefix "{" Primary " up}" SetTimer , 0 return } } keyHeld:=!Tertiary.Length for index,key in Tertiary { if GetKeyState(key) { keyHeld:=1 break } } if (!keyHeld) { Send Prefix "{" Primary " up}" SetTimer , 0 return } } Repeat(Primary, Secondary,SendBlind:=true) { Prefix := _GetPrefix(SendBlind) Send Prefix "{" Primary " up}" Sleep 100 RepeatVar := 0 Loop { if GetKeyState(Primary,"P") { return } for index,key in Secondary { if GetKeyState(key,"P") { return } } if (RepeatVar == 1) { Send Prefix "{" Primary " down}" RepeatVar := 0 } else { Send Prefix "{" Primary " down}" RepeatVar := 1 } Sleep 100 } } ; Sets key to hold if single tap, or repeat if double tap HoldOrRepeat(Primary, Secondary,SendBlind:=True) { Send _GetPrefix(SendBlind) "{" Primary " down}" if KeyWait(Primary, "D T0.2") { Repeat(Primary,Secondary,SendBlind) } else { Hold(Primary,Secondary,,SendBlind) } } ; Press Target button extremely rapidly while Hold button is held down Turbo(Target,Hold:=Target) { global _HoldRepeat_TurboOn If (_HoldRepeat_TurboOn.Has(Target "_" Hold) and _HoldRepeat_TurboOn[Target "_" Hold]) { return } else { _HoldRepeat_TurboOn[Target "_" Hold]:=1 While GetKeyState(Hold,"P") { Send "{Blind}{" Target " down}" Sleep 10 Send "{Blind}{" Target " up}" Sleep 10 } _HoldRepeat_TurboOn[Target "_" Hold]:=0 } }