Hold down a hotkey to turn your trackball into a scroll wheel! You can either set it to snap to the X-Y axes, or have it scroll along both axes at once to emulate 2D panning!
You don't have to install AutoHotKey to use this - check the releases for a .exe
download.
Other people have written several great alternatives to this script, such as TrackballScroll. However, this script seeks to differentiate itself by implementing continuous scrolling motion, as opposed to stepped.
Hotkey 1
: What key to use as the hotkey.- See the AHK docs for more information on how to format this.
- Only single keys (keyboard or mouse) can be used - no combinations or modifiers.
- If you end up accidently locking yourself out of your system, first use
CTRL+SHIFT+ESCAPE
to launch task manager and killsmooth_trackball_scrolling.exe
. Then, runsmooth_trackball_scrolling_reset.exe
. This will reset all your settings back to default.
Hotkey 2
- Formatted the same way as
Hotkey 1
. - Only used for two-key modes. See below for more details.
- Formatted the same way as
Mode
MO (1 key)
: Smooth scrolling is active whenHotkey 1
is held, and inactive whenHotkey 1
isn't held.Hotkey 2
doesn't do anything.TG (1 key)
: Smooth scrolling is toggled whenHotkey 1
is pressed down.Hotkey 2
doesn't do anything.MO (2 key sym.)
: Smooth scrolling is active whenHotkey 1
andHotkey 2
are both held.- This mode is intended for use with two keyboard keys.
- You can start holding the two hotkeys in either order.
- The original functionality of both hotkeys can still be used by tapping/holding the key individually.
- If you tap a hotkey individually, the tap action will be sent upon key release.
- If you hold a hotkey individually, the hold will start after a hold delay (configurable via
Hold Duration
).
MO (2 key asym.)
: Smooth scrolling is active whenHotkey 1
andHotkey 2
are both held.- This mode is intended for use with the two mouse buttons (
LButton
andRButton
). - You must start holding
Hotkey 2
beforeHotkey 1
. - The original functionality of both hotkeys can still be used by tapping/holding the key individually.
- If you tap
Hotkey 1
individually, the tap action will be sent immediately. - If you hold
Hotkey 1
individually, the hold action will start immediately. - If you tap
Hotkey 2
individually, the tap action will be sent upon key release. - If you hold
Hotkey 2
individually, the hold action will start after a hold delay (configurable viaHold Duration
).
- If you tap
- This mode is intended for use with the two mouse buttons (
TG (2 key asym.)
:Hotkey1
turns smooth scrolling on, whileHotkey2
turns smooth scrolling off.- This mode is intended to make it easier to integrate this script with QMK keyboard firmware and stuff.
Hold Duration
: Only applicable when using 2 key MO modes. The duration of the delay before a hold action starts.
Refresh Interval
: How often the script sends mouse wheel updates. The minimum and default value is 10 (ms). I recommend trying to use this value, but if you experience some apps behaving weirdly or inconsistently in response to scrolling, try bumping it up to something like 16 or 20. Basically set this to as low as it can go without causing problems.Smoothing Window Size
: How much smoothing to apply. Higher values correspond to more smoothing and "momentum". Lower settings are snappier and more responsive. I recommend a value around 3 to 10, depending on your personal preference. If you increase yourRefresh Interval
, you might want to decrease yourSmoothing Window Size
, as the total amount of smoothing actually scales with the product of these two parameters.Sensitivity
: Movement sensitivity.Invert Direction
: Inverts scrolling direction.
Angle Snapping Threshold
: Controls how hard it is to break away from being snapped to an axis. This parameter sets how much you have to move perpendiular to the axis to become un-snapped. A higher value will make it harder to un-snap from an axis. I recommend a value around 10, but this depends on how you want your snapping to work.Angle Snapping Ratio
: Controls how hard it is to break away from being snapped to an axis. This parameter sets how much your movement direction can deviate angularly from the axis before you become un-snapped. A higher value will make it harder to un-snap from an axis. I recommend a value around 1.5, but this depends on how you want your snapping to work.Angle Snapping On
: Whether or not you want angle snapping at all.Always Angle Snap
: If this is on, when you become un-snapped from one axis, you snap to the other axis. If this is off, when you un-snap from one axis, you stay un-snapped.
Emulate Ctrl
,Emulate Shift
, andEmulate Alt
: If you check one or more of these boxes, the hotkey will add the respective key or key combination when you scroll with your real physical scroll wheel (not your trackball). This is to allow you to use your mouse wheel to zoom while holding down the hotkey (check the box or boxes corresponding to your software's zoom modifier key), thus allowing you to control pan and zoom using a single hotkey.
- Unfortunately, I've found that some programs will not respond to the scroll inputs from my script, most notably Windows Explorer. I think a re-write of this script in a low-level language that can interface properly with the Windows input API will solve this, but I won't have time for this in the forseeable future.
- Some software, most notably Chromium-based browsers, do not respond well to simultaneous scrolling inputs along both the X and Y axes. Using angle snap will fix this.
- Using key combinations as the hotkey is currently not supported. I think I know how to fix this; I just need to rewrite the relevant part of the script, which I might not have time to do for the time being.