AutoHotkey scripts
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 

87 lines
2.3 KiB

; Functions for holding and repeating keys
;
; Private Functions
;
_HoldRepeat_LoopState := Map()
_HoldRepeat_IsActive := Map()
_HoldRepeat_Handler(Mode, TargetKey, CancelKeys:=[], HoldKey?, BlindMode:="{Blind}") {
global _HoldRepeat_IsActive
if (_HoldRepeat_IsActive.Has(TargetKey) AND _HoldRepeat_IsActive[TargetKey]) {
return
}
_HoldRepeat_IsActive[TargetKey] := true
Send BlindMode "{" TargetKey " down}"
if (Mode == "Hold") {
if _HoldRepeat_LoopState.Has(TargetKey) {
_HoldRepeat_LoopState.Delete(TargetKey)
}
} else if (Mode == "Repeat") {
_HoldRepeat_LoopState[TargetKey] := true
} else {
return
}
SetTimer _HoldRepeat_Loop.Bind(TargetKey,CancelKeys,HoldKey?,BlindMode), 50
}
_HoldRepeat_Loop(TargetKey, CancelKeys, HoldKey?, BlindMode:="{Blind}") {
global _HoldRepeat_LoopState
global _HoldRepeat_IsActive
endLoop := false
for index,key in CancelKeys {
if GetKeyState(key,"P") {
Send BlindMode "{" TargetKey " up}"
endLoop := true
}
}
if IsSet(HoldKey) {
if !GetKeyState(HoldKey,"P") {
Send BlindMode "{" TargetKey " up}"
endLoop := true
}
} else {
if GetKeyState(TargetKey,"P") {
endLoop := true
}
}
if endLoop {
SetTimer , 0
_HoldRepeat_IsActive[TargetKey] := false
return
}
if _HoldRepeat_LoopState.Has(TargetKey) {
updown := (_HoldRepeat_LoopState[TargetKey] ? "up" : "down")
Send BlindMode "{" TargetKey " " updown "}"
_HoldRepeat_LoopState[TargetKey] := !_HoldRepeat_LoopState[TargetKey]
}
}
;
; Public Functions
;
Hold := _HoldRepeat_Handler.Bind("Hold")
Repeat := _HoldRepeat_Handler.Bind("Repeat")
; Sets key to hold if single tap, or repeat if double tap
HoldOrRepeat(TargetKey, CancelKeys?, BlindMode:="{Blind}") {
Send BlindMode "{" TargetKey " down}"
if KeyWait(TargetKey, "D T0.2") {
mode := "Repeat"
} else {
mode := "Hold"
}
_HoldRepeat_Handler(mode, TargetKey, CancelKeys,, BlindMode)
}
; Press Target button extremely rapidly while Hold button is held down
Turbo(TargetKey, HoldKey:=TargetKey,BlindMode:="{Blind}") {
While GetKeyState(HoldKey,"P") {
Send BlindMode "{" TargetKey "}"
}
}