Hacker Newsnew | past | comments | ask | show | jobs | submitlogin

that grid mode has huge binary search vibes, and is an absolutely amazing concept i've never seen before, that is awesome


Thanks! 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


Hi! 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?


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/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


Thanks for the explanation! I got it working!

One last feature request: currently, the grid mode doesn't seem to support multiple monitors, i.e., it only splits the screen where the mouse pointer is. Would that be possible to add a "teleport" feature? For example, pressing CTRL-J would teleport the mouse pointer, say, 75% of the screen's resolution to the left. If there are two monitors, the pointer would be moved to the screen on the left in at most two teleports. If there is only one monitor, then it would move the pointer close to its left edge. (There would be similar "teleports" for CTRL-I, CTRL-K, and CTRL-L to support different display set-ups.) In theory, this can be accomplished by switching to the inertia mode, but that's not very convenient. I would contribute some code myself if TPMouse were written in Python, but I can't help with .au3 :/

Thanks for again for the explanation and being so receptive!




Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: