> I have no idea what glove size I am... but yeah I'm a dude.
My prediction wasn't very risky given the demographics of HN :)
> The teeny tiny arrow keys on modern laptops is actually part of the reason why I have Caps+IJKL be arrow keys.
I'm currently back to Lenovo, mostly for the wonderful keyboards that still have decent sized arrow keys and Page Up / Page Down nearby on both side of the up arrow, so I don't feel this need, but the modern trend of teeny up/down next tothe HUGE left/right is concerning.
I might end up doing like just you. In fact, I might start adding shortcuts right now.
I'm thinking of doing a mapping with Alt, as my Caps key is chorded as Control, and I can't imagine doing without Ctrl-K or Ctrl-L, but. Did you have any specific reason to go with IJKL instead of WASD?
> Everything combos with Ctrl and Shift for wordskipping/selection which is really nice.
It's wonderful to meet fellow minded people :)
My AHK scripts work the same: to go to the beginning of a webpage, I press and hold right Alt, then press on left Alt to send a Home. To to go the end, I use the same keys, but in the opposite order!
It quickly gets into muscle memory!
> I haven't tried making modifiers do different things when used alone - that's a neat idea.
Here's my current implementation which still leaves much to be desired but mostly perform acceptably. Try it for yourself and see if you like it! I've found using less chording whenever possible made sense, and I find myself often scrolling down page by using the Shift key instead of space, as it's just more conveniently placed as a big button right where my thumb rests while holding my laptop
~LShift::
KeyWait, LShift
If (A_TimeSinceThisHotkey < 300 and A_PriorKey = "LShift") {
if (GetKeyState("RAlt", "P") || ( GetKeyState("LAlt", "P") && !(GetKeyState("CapsLock", "P") || GetKeyState("Enter", "P") ) ) ) {
SendInput !{PgUp}
} else {
SendInput,{PgUp}
}
}
return
~RShift::
if (GetKeyState("RAlt", "P") || ( GetKeyState("LAlt", "P") && !(GetKeyState("CapsLock", "P") || GetKeyState("Enter", "P") ) ) ) {
SendInput !{PgDn}
} else {
SendInput {PgDn}
}
}
return
*LAlt::
KeyWait, LAlt
If (A_TimeSinceThisHotkey < 300 and A_PriorKey = "LAlt") {
if (GetKeyState("LShift", "P") || ( GetKeyState("RShift", "P") && !(GetKeyState("CapsLock", "P") || GetKeyState("Enter", "P") ) ) ) {
SendInput +{Home}
} else {
SendInput {Home}
}
}
return
*RAlt::
KeyWait, RAlt
If (A_TimeSinceThisHotkey < 300 and A_PriorKey = "RAlt") {
if (GetKeyState("RShift", "P") || ( GetKeyState("LShift", "P") && !(GetKeyState("CapsLock", "P") || GetKeyState("Enter", "P") ) ) ) {
SendInput +{End}
} else {
SendInput {End}
}
}
return
Replace CapsLock and Enter by your own chording keys if needed, to allow composition.
If you end up improving on that, please send me your improved AHK script! My email is my username at outlook dot com.