4 ms·
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_a_virtual_trackball_for_windows/ivl0sr8/ https://old.reddit.com/r/Trackballs/comments/ym9q2t/tpmouse_...
[1] https://github.com/EsportToys/TPMouse https://github.com/EsportToys/TPMouse
- Woshiwuja 3y agoDont we already all have this?
- KJBweb 3y agoNo, we don't, this is awesome.
- EsportToys 3y agoI'm curious about what you think of Hold mode vs Flick mode? I personally use Flick mode myself but thought that it might confuse the user on first-impression, so I have it default to Hold mode to be on the safe side.
- arc-in-space 3y agoI like it! No real use for me since linux + already have a g502 but I like the idea. This kind of momentum scrolling is already ubiquitous in phones and video games (probably Macs, too?) so I wonder why it otherwise hasn't caught on for viewing documents.
- EsportToys 3y agoThank you for the kind words! I’ve never used Linux before, I wonder if it will work well with Wine since this script only uses very old WinAPIs, namely SendInput+RawInput+ClipCursor, and native win32 controls/tray, I would imagine that wine would have pretty good coverage of them.
- Given_47 3y agoI primarily use the g604 (more buttons and thicker hump so also more comfortable) but the g502 scroll wheel is so much better
- EsportToys 3y agoI use the G305 which is even more barebones in the buttons, however I remapped the dpi button to be a sort of "omnifunctional activator" that I combine Lua scripting from LGS with other Autoit scripting for accessing WinAPI to achieve multitouch gestures with my mouse. The UX isn't quite refined enough to be a standalone application that I can share on GitHub yet, but eventually I'll figure out how to turn them into a self-contained package.
- Given_47 3y agoThat’s dope! I’m macOS so I just use karabiner for all button remapping. Tho I recently got a QMK board and have been meaning to add some mouse actions to it (purely ergonomic reasons, ideally use my mouse less and less). That’s nice u have LGS tho it’s at least ostensibly better than the absolute trash ghuh is. Also pretty cool u can extend LGS with lua!
- EsportToys 3y agoA little known secret on Windows is that you can still get LGS via winget: winget install Logitech.LGS
- deleted 3y ago[deleted]
- LoganDark 3y agothat grid mode has huge binary search vibes, and is an absolutely amazing concept i've never seen before, that is awesome
- EsportToys 3y agoThanks! It was actually inspired by rvaiya's warpd [0] which has a similar grid mode but with quadrants instead. I thought that needing to choose out of four quadrants at once is a bit overwhelming on cognitive load for something that is meant to be a subconscious extension of your hands, so instead I just unified it with the arrow keys as a "shrink in this direction" choice rather than "choose one of four quadrants". Changing it to bisection/binary partitioning also means that don't need any visual aids as it's exceedingly simple to see which edge your target is the closest to. [0] https://github.com/rvaiya/warpd https://github.com/rvaiya/warpd
- dr_kiszonka 3y agoHi! Thanks for building so many useful utilities! I tried your TPMouse a few months ago, but had two problems: 1. I couldn't figure out how to remap F/E/R in grid mode to, e.g., A/S/D (left/middle/right). I tried editing the code but didn't get anywhere. 2. CapsLk G/Q didn't work for on my PC and the longer shortcuts were a bit too inconvenient for me. Would you consider adding a brief document about customizing TPMouse to you repo?
- EsportToys 3y agoI'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/TPMouse/blob/dev/vkeys.au3 https://github.com/EsportToys/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
- zote 3y agoWell this is the sort of thing that I'd share with friends. Great work
- EsportToys 3y agoThank you! Another applet I made that I personally think is neat, although I see why it's not something many would care about, is the MouseTray[0] utility that gives me a quick "volume popup" but for mouse cursor speeds, it makes it quite easy for me to switch between using a mouse normally and drawing precisely without needing to reaching for my tablet. Although it didn't get as much attention as my other utility, it's actually the app that I'm most happy about having made. [0] https://github.com/esporttoys/mousetray https://github.com/esporttoys/mousetray
- MattDemers 3y agoI like this a lot, thanks!
- EsportToys 3y agoGlad that you like it! You might also find my MouseTray utility useful (which I mentioned in another comment), since seeing from your bio that you're familiar with esports you might care a bit more about configurations.
- KomoD 3y agoPretty cool, if I weren't using Linux I'd totally use this, it's one of the features I missed when I moved from G502 to G Pro X Superlight
- EsportToys 3y agoTry running the exe version with wine and see if it works on your system -- this uses only very old/stable WinAPIs so I'd imagine that wine would have it well-covered by now.