HackerReposA FIELD GUIDE TO OPEN SOURCE
ProSponsor the shelf♧ 0
← Back to top all-time
EsportToys
TPMouse
AutoIt2022–2025
EsportToys / TPMouse

TPMouse

A virtual trackball for Windows, via vim-like homerow controls.

3Distinct people
17Mentions
0Explicit recommenders
154GitHub stars
REPOSITORY AT A GLANCE

What to know before exploring

What it is

A virtual trackball for Windows, via vim-like homerow controls.

GitHub

Where it is used

No documented product use has been verified yet.

What people are saying

No recommendation phrase was found in the indexed comments.

No classified warning is attached to this page. Read the discussions before treating silence as approval.

Also in these discussions

Mentioned in the same Hacker News threads. That is not proof they are substitutes.

This week on Hacker News

Nov 7–Nov 14 UTC · Direct repository links and separately labeled related project stories. Indexed through 11/14/2026, 5:04:57 PM UTC.

No direct repository links were found in the indexed HN discussions over the past seven days. Older discussions are available below.

Mentions over time

HN mentions by year17 dated mentions

Observed mentions: 2022-10-19 13:37:14 UTC to 2025-09-10 19:35:22 UTC.

0369122022-01-01 00:00:00 UTC to 2023-01-01 00:00:00 UTC (exclusive): 4 mentions; 3 submissions, 1 comments20222023-01-01 00:00:00 UTC to 2024-01-01 00:00:00 UTC (exclusive): 11 mentions; 1 submissions, 10 comments20232024-01-01 00:00:00 UTC to 2025-01-01 00:00:00 UTC (exclusive): 1 mentions; 0 submissions, 1 comments2025-01-01 00:00:00 UTC to 2026-01-01 00:00:00 UTC (exclusive): 1 mentions; 0 submissions, 1 comments2025

Counts come from the repository’s dated source evidence. Index cutoff: 2026-11-02 08:16:59 UTC.

View mention counts and date ranges
UTC ranges include their start and exclude their end. Select a period to filter the source evidence.
PeriodStart (UTC)End (exclusive, UTC)MentionsSubmissionsComments
20222022-01-01 00:00:00 UTC2023-01-01 00:00:00 UTC431
20232023-01-01 00:00:00 UTC2024-01-01 00:00:00 UTC11110
20242024-01-01 00:00:00 UTC2025-01-01 00:00:00 UTC101
20252025-01-01 00:00:00 UTC2026-01-01 00:00:00 UTC101

What Hacker News says

17 sources
The friction/acceleration awkwardness can be solved by using a physically based timestep-independent formulation, which I implemented in TPMouse[0] and explained its derivation in a previous comment reply[1]. The gist of it is that the solution to a linearly damped particle is a linear system, so the x and y components can be calculated completely independently and the analytic solution is just an exponential of time. It is a special case of the timestep-independent damped harmonic oscillator, which I previously wrote a blogpost about [10]. Namely it is the "unsprung" special case under "Overdamped" The very same formulation is also what I used to implement LibreScroll[11] to add inertial scrolling to any mouse. [0] https://github.com/EsportToys/TPMouse [1] https://www.reddit.com/r/Trackballs/comments/ym9q2t/tpmouse_... [10] https://news.
Read the rest
In Turning a keyboard into a mouse with Libevdev
I'm actually in the process of reworking it so that the keybinds can be fully remapped via a GUI. In fact, LibreScroll is my first step experimenting with multi-process delegation that will enable that functionality, since the current way of having to edit the code directly in scattered locations is very much not ergonomic. In the meantime, for the current version of TPMouse on the dev branch, to change the remapping of arrows and mouse buttons, you need to edit `keybinds.au3` in three spots: 1. the virtual-key constant at the static array at the top 2. the hotkey string at the static array at the top 3. (this is really poor UX I know) in the static struct declaration inside the respective callback function, change the referenced virtual-key constant. The list of virtual key codes can be found in `vkeys.au3`: https://github.com/EsportToys
Read the rest
/TPMouse/blob/dev/vkeys.au3 So for example, to remap mouse1 from F to A, I need to do the following: Line 10: <<< before >>> $mb1 = [ $VK_F , '{f}' , callback_f ] , _ <<< after >>> $mb1 = [ $VK_A , '{a}' , callback_f ] , _ Lin 68: <<< before >>> Local Static $struct = DllStructCreate('ushort MakeCode;ushort Flags;ushort VKey;'), $vkey = DllStructSetData($struct,'VKey',$VK_F) <<< after >>> Local Static $struct = DllStructCreate('ushort MakeCode;ushort Flags;ushort VKey;'), $vkey = DllStructSetData($struct,'VKey',$VK_A) As for changing the activation hotkeys, if you wish to use a different modifier other than CapsLk, change the vkey code on line 74, 90, and line 107 of TPMouse.au3; for example, to change it from CapsLk to Alt: Line 74: <<< before >>> Case $VK_CAPS <<< after >>> Case $VK_ALT Line 90: <<< before >>> If $VK_Q = $struct.VKey And Not ( $sks($VK_CAPS) Or ($sks($VK_LSHIFT) And $sks($VK_RSHIFT)) ) Then Return <<< after >>> If $VK_Q = $struct.VKey And Not ( $sks($VK_ALT) Or ($sks($VK_LSHIFT) And $sks($VK_RSHIFT)) ) Then Return Line 107: <<< before >>> If $sks($VK_CAPS) Or ($sks($VK_LSHIFT) And $sks($VK_RSHIFT)) Then <<< after >>> If $sks($VK_ALT) Or ($sks($VK_LSHIFT) And $sks($VK_RSHIFT)) Then
In Show HN: LibreScroll – enable flywheel-scrolling on any generic mouse

Show HN: LibreScroll – enable flywheel-scrolling on any generic mouse

Based on the framerate-independent momentum simulation[0] that I used in my TPMouse script[1] If you've ever used a mouse with Infinite-scrollwheel such as Logitech, this utility for Windows basically recreates that functionality for any generic mouse. Actually, it's even better than that: this allows for simultaneous horizontal and vertical scrolling, so essentially it combines two of the best features of the Logitech MX Master -- horizontal wheel, and unlocked momentum scrolling -- into one intuitive control scheme. To enable horizontal scrolling, set the X-sensitivity to a value you prefer. [0] https://old.reddit.com/r/Trackballs/comments/ym9q2t/tpmouse_... [1] https://github.com/EsportToys/TPMouse
43 points · Open discussion
I had written a Windows script for adding three-finger drag[0] that I use daily, perhaps it could provide some inspiration. Basically, it is an independent subscriber to RawInput messages that only keeps track of whether or not to send three-finger drag, and posts emulated mouse messages using SendInput. I have a few other scripts that each run as independent userland processes that only monitors their own trigger and nothing else. Tangentially, my TPMouse[1] script implemented inertia in a framerate-independent way so that it uses very little resource while having perfect simulation stability. A previous discussion where I explained the analytic derivation for this low-resource exact-solution damped inertia can be seen in [10] [0] https://github.com/EsportToys/PrecisionThreeFingerDrag/blob/... [1] https://github.com/EsportToys/TPMouse [1
Read the rest
In COSMIC DE: Desktop environment created for Pop!_OS and other Linux distros
Fun fact: every videogame on Windows is potentially a userspace keylogger if you let it run in the background while, e.g. browsing the web etc. Basically, any application that uses the Raw Input API can request to receive raw device events even when the application is not running in the foreground, by using the RIDEV_INPUTSINK flag. The app will then receive every raw device input packet that the hardware sends to the system, replete with timestamps[0] and your mouse position when the event happened[1]. In the case of keyboards it would provide the virtuak-key codes and scancodes[10]. Rawinput is used by modern FPS game like Valorant[11], so if you leave it running in the background it may potentially be able to observe your every single keystroke while you use your browser, enter passwords, etc. TPMouse, my opensource trackball-emulation
Read the rest
script that lets you use the homerow as a trackball for your cursor[100], uses Raw Input with the RIDEV_INPUTSINK option so that it runs entirely in userspace without needing to hook to low level drivers. It is certainly a double-edged sword -- for open source it's a convenience blessing since what you're running can be inspected directly, but in the case of close-sourced games like Valorant you're relying on your trust of Riot Games's intentions and competence. [0] https://learn.microsoft.com/en-us/windows/win32/api/winuser/... [1] https://learn.microsoft.com/en-us/windows/win32/api/winuser/... [10] https://learn.microsoft.com/en-us/windows/win32/api/winuser/... [11] https://playvalorant.com/en-gb/news/game-updates/valorant-pa... [100] https://github.com/EsportToys/TPMouse
In [dead]
With the TPMouse script, I implemented the activation shortcut as [LShift][RShift][C (trackball mode) / G (grid mode) / Q (quit)], which I felt had a nice balance between deliberateness and easy-to-reach (since you are using it with your hands on homerow). Though because some keyboards have key rollover issues with using both Shifts, [Capslock][<modekey>] is also allowed as an alternative activation shortcut. [0] https://github.com/EsportToys/TPMouse
In Toward a more useful keyboard
AutoIt is also great especially for quickly prototyping GUIs. I recently built a proof-of-concept for a modernized method of interacting with RTS cameras[0], which unfortunately could not be achieved with frameworks like SDL due to their abstraction obscuring some of the native OS functions needed to create my idea. Using AutoIt lets me basically just treat it as a minimal-boilerplate sandbox to make DllCalls. This also means that I could directly listen as well as post raw device messages. For example, I implemented an inertia-based cursor script that basically lets you use your homerow vim keys like it's a trackball[1], which I now use everyday whenever I'm not with my ThinkPad. [0] https://github.com/EsportToys/NaturalEdgePan [1] https://github.com/EsportToys/TPMouse
In Somehow AutoHotKey is kinda good now
I personally use AutoIt a ton as a super fast way to quickly prototype GUIs. It's basically a really simple entrypoint for WinAPI. Shameless plug: my script for emulating a trackball with your keyboard [0], and my tray app for quickly tweaking your cursor speed (usually for when I'm drawing something)[1] There are also some really useful utility apps like WhyNotWin11[2] that's made entirely using AutoIt [0] https://github.com/EsportToys/TPMouse [1] https://github.com/EsportToys/MouseTray [2] https://github.com/rcmaehl/WhyNotWin11
In AutoHotKey V2 (Breaking Upgrade)

Ask HN: Tips for making concise demo clips?

Recently I released v1.0 of my vim-like cursor control for Windows[0], and for its README I recorded some clips of myself using the various modes, but constantly find the result unsatisfactory when played back. I was quite baffled as to how to contrive short use-case scenarios that are self-explanatory without explicitly annotating what is happening on the screen. It seems to me that doing it well is a sophisticated art, yet I could hardly find any satisfactory literature in helping one become proficient at it. I would very much appreciate if folks here could kindly share insights and experiences about this particular art. Thanks. [0] https://github.com/EsportToys/TPMouse
5 points · Open discussion

Showing the 15 most recent of 17 sources. Enable JavaScript to search and browse every indexed mention.

MAKE YOURSELF AT HOME

A few shortcuts

/
Search the collection
?
Open this guide
Esc
Close dialogs and navigation

Your saved repositories and interests stay in this browser.