I used to use software to map keys. I religiously want to get rid of caps lock and use it as escape... but I also want control near by.<p>But let me tell you something; if you are a power user, then relying on software to map keys kind of sucks. I couldn't dual boot windows and linux without everything getting screwed up. I also can't easily switch from mac to linux when I get off work. So I decided to start buying fully programmable keyboards and doing all of it at the firmware. I use QMK (<a href="https://github.com/qmk/qmk_firmware" rel="nofollow">https://github.com/qmk/qmk_firmware</a>) and do very similar things to op. For instance, where my caps lock is, I have set to tap for escape, hold for function layer and where tab is, I have tap for tab and hold for control. There's a ton of other bindings I have, but these are the heavy hitters that have made me very happy.<p>I killed Karabiner Elements. I removed my software bindings in Widnows and deleted my Xmodmap file in Linux because I can finally just plug a keyboard into a computer and have it behave the same everywhere.<p>The only drawback is laptop keyboards. I really wish those were programmable (if anyone knows of a way, I would love to hear about it ;)). I have to start Karabiner once in a while when I don't have one of my keyboards handy, or if I'm floating around coffeeshops.
A buddy just PoC'd a key binding system for OS X to do arbitrary complex remappings like this (exactly to facilitate nonstandard esc, ctrl, hyper usage), represented as one or more state machines similar to this syntax:<p><pre><code> STATE1:
caps down:
ctrl+alt+cmd down
STATE2
STATE2:
caps up:
ctrl+alt+cmd up
press esc
STATE1
after 1000ms, default:
ctrl+alt+cmd up
STATE1
</code></pre>
This would allow us to layer, say, half qwerty on top of hyper with the same system. Or map caps to esc and ctrl, and map caps+shift to hyper, or a non-meta like tab to hyper.<p>Also could do state transitions on external events (like new app focused), and execute templated applescript.<p>An easy state machine to build would be this, which would prevent keypresses after focus stealing:<p><pre><code> STATE1:
new window focused: STATE2
STATE2:
after 250ms: STATE1
default:
drop keypress
STATE2</code></pre>
I just bought an ergodox ez (ergodox-ez.com) that has hyper and meh keys built in.<p>Quite a learning curve for the new layouts so far, but I think it will be great once I have it down.<p>For now, ctrl-alt-del is a big pita.
Slightly off-topic: Why is JSON so popular for this sort of thing? I think it's fine for programs communicating with each other, but I really don't understand why anyone would want to have to match brackets when writing a configuration file
Not to be confused with the actual, crufty old HYPER key, I guess. Which I'm reminded of solely because it was mentioned in something I was reading, yesterday.<p><a href="https://en.wikipedia.org/wiki/Space-cadet_keyboard" rel="nofollow">https://en.wikipedia.org/wiki/Space-cadet_keyboard</a><p>More on-topic: Suggestions for comparable utilities on Linux as opposed to Mac? (Not complaining about Mac; just don't use one.) I've run across a few, without yet using any. Wonder what others use.
It's a very personal preference of course, but I can't recommend higly enough to try mapping caps to command. My wrists are very grateful.<p>As a vim user I use Ctrl+[ for escape. I like it because it is a standard system mapping, so it works everywhere. Further, many systems (incl macOS) have standard options to map caps to control, so I can carry the habit pretty much everywhere, even if using someone else's computer temporarily.
The heading does not fit with the article body. I don't quite understand what it is about, but I can see it's not about Hyper keys.<p>If you lack a physical Hyper key and want to change Capslock into Hyper, simply run:<p><pre><code> xkbcomp -xkb $DISPLAY -o my.xkb
perl -0777 -i -pe's/key <CAPS> [{]\K[^}]+/[ Hyper_L ]/ms' my.xkb
xkbcomp my.xkb -o $DISPLAY
xev # for testing</code></pre>
I don't have the muscle memory to use CapsLock as Control, but I have enjoyed using it as a shortcut to double-click the left mouse button. Probably a symptom of the visual programming environments I use most of the time, but it does reduce strain on my clicker finger. For "hyper" duties the Windows key is conveniently located and easy to map in AutoHotKey.
I believe you need to add the .json extension in your Karabiner URL for this to work - once I did that locally I finally have my hyper key back! Thanks!
on windows I use autohotkey, and you can make it program specific what happens, like<p><pre><code> SetTitleMatchMode, RegEx
#IfWinActive .*Microsoft Visual Studio|JetPopupMenuView|ReSharper|.*GVIM|.*Visual Studio Code
Capslock::Esc
#IfWinActive</code></pre>