Last active
March 19, 2025 00:25
-
-
Save jasonsparc/7cc1f2317aa9125dbd63e0bb5f3da0c6 to your computer and use it in GitHub Desktop.
AutoHotkey, Accelerated Scrolling v1.3, By BoffinbraiN
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
; Accelerated Scrolling | |
; V1.3 | |
; By BoffinbraiN | |
#NoEnv | |
#SingleInstance | |
#MaxHotkeysPerInterval 120 | |
;Process, Priority, , H | |
SendMode Input | |
; Show scroll velocity as a tooltip while scrolling. 1 or 0. | |
tooltips := 0 | |
; The length of a scrolling session. | |
; Keep scrolling within this time to accumulate boost. | |
; Default: 500. Recommended between 400 and 1000. | |
timeout := 500 | |
; If you scroll a long distance in one session, apply additional boost factor. | |
; The higher the value, the longer it takes to activate, and the slower it accumulates. | |
; Set to zero to disable completely. Default: 30. | |
boost := 30 | |
; Spamming applications with hundreds of individual scroll events can slow them down. | |
; This sets the maximum number of scrolls sent per click, i.e. max velocity. Default: 60. | |
limit := 60 | |
; Runtime variables. Do not modify. | |
distance := 0 | |
vmax := 1 | |
; Key bindings | |
WheelUp:: Goto Scroll | |
WheelDown:: Goto Scroll | |
#WheelUp:: Suspend | |
#WheelDown:: Goto Quit | |
Scroll: | |
t := A_TimeSincePriorHotkey | |
if (A_PriorHotkey = A_ThisHotkey && t < timeout) | |
{ | |
; Remember how many times we've scrolled in the current direction | |
distance++ | |
; Calculate acceleration factor using a 1/x curve | |
v := (t < 80 && t > 1) ? (250.0 / t) - 1 : 1 | |
; Apply boost | |
if (boost > 1 && distance > boost) | |
{ | |
; Hold onto the highest speed we've achieved during this boost | |
if (v > vmax) | |
vmax := v | |
else | |
v := vmax | |
v *= distance / boost | |
} | |
; Validate | |
v := (v > 1) ? ((v > limit) ? limit : Floor(v)) : 1 | |
if (v > 1 && tooltips) | |
QuickToolTip("×"v, timeout) | |
MouseClick, %A_ThisHotkey%, , , v | |
} | |
else | |
{ | |
; Combo broken, so reset session variables | |
distance := 0 | |
vmax := 1 | |
MouseClick %A_ThisHotkey% | |
} | |
return | |
Quit: | |
QuickToolTip("Exiting Accelerated Scrolling...", 1000) | |
Sleep 1000 | |
ExitApp | |
QuickToolTip(text, delay) | |
{ | |
ToolTip, %text% | |
SetTimer ToolTipOff, %delay% | |
return | |
ToolTipOff: | |
SetTimer ToolTipOff, Off | |
ToolTip | |
return | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Cool...well thanks for your considered reply
That all helps greatly. As Im getting older Im realisng some of the RSI on my hands and wrist; but also the benefits of muscle mem. So acceleration and mutlimode is foremost atm. Forking any motion that is navigationally up and down from the scroll wheel with qualirifers/context as well as accel control is my aim.
etc
Cheers Jason