
New Hyper Key - joshbetz
https://josh.blog/2017/07/new-hyper-key
======
vhost-
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.

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
([https://github.com/qmk/qmk_firmware](https://github.com/qmk/qmk_firmware))
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.

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.

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.

~~~
joatmon-snoo
Did the idea come to out of the blue or did something inspire you? + what
keyboards do you use?

~~~
jacobolus
Beware, the mucking-with-keybaords rabbit hole is deep. Don’t say nobody
warned you.

[https://geekhack.org](https://geekhack.org)
[https://deskthority.net](https://deskthority.net)

------
lunixbochs
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:

    
    
      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
    

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.

Also could do state transitions on external events (like new app focused), and
execute templated applescript.

An easy state machine to build would be this, which would prevent keypresses
after focus stealing:

    
    
      STATE1:
        new window focused: STATE2
      STATE2:
        after 250ms: STATE1
        default:
          drop keypress
          STATE2

------
eyeball
I just bought an ergodox ez (ergodox-ez.com) that has hyper and meh keys built
in.

Quite a learning curve for the new layouts so far, but I think it will be
great once I have it down.

For now, ctrl-alt-del is a big pita.

~~~
z1mm32m4n
I have an Ergodox and I love it. I don't use hyper keys, but the sheer
configurability of the keyboard has meant that I never feel limited by my
keyboard (compare that with the new MacBook Pro keyboards which don't even
have ESC keys!)

For some advice on how to deal with the layouts: I cleared most of the non
alphanumeric keys in all layers and started adding things in when I needed
them. It made the transition easier.

~~~
eyeball
Thanks, I'll try that. I'm going to be doing a lot of remapping I can tell.
The default layout makes some strange choices to me, like ctrl-alt-del
difficulty.

I do love the mouse control layer already. Very handy to be able to toss in a
quick mouse click without leaving the board.

It would be even better if they could add a thinkpad style mouse stick between
a couple of the keys on the left hand. That would be a dream keyboard.

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

~~~
eat_veggies
I like using JSON because

\- There are lots of great libraries for nearly every language to parse it, or
they're built in

\- It's got the benefits of XML (tags are right next to the data, unlike CSV)
while being way less typing

\- It's easy to scan since I'm already used to seeing [] and {} to represent
common data structures

\- I can pretty print it or remove whitespace

\- It's popular, meaning there are lots of tools to work with it, but it's
simple enough that a text editor will do

\- Most text editors will match brackets and indentation for me, so it's not a
huge issue

~~~
MichaelGG
If it just had comments, trailing commas, and didn't require quoting names, I
could forgive the brace matching. Really shortsighted.

~~~
captainmuon
Some implementations allow comments. There is a project called JSON5 that also
allows trailing commas, and maybe omitting quotes for keys.

I have some (private) libraries in C++, Python, and Nim that support those
features, too. Basically it understands JavaScript object literals. If I find
some time, I'll package them up and publish them.

One thing I'd really like to change is to make the parser round-trippable, so
it remembers all the whitespace and comments, and if you use these pseudo-json
as config files, you can make programmatic changes without loosing anything.

------
pasbesoin
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.

[https://en.wikipedia.org/wiki/Space-
cadet_keyboard](https://en.wikipedia.org/wiki/Space-cadet_keyboard)

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.

~~~
Symbiote
PC keyboards already have the "Super" key (Windows key), so there's less need
for something to make global shortcuts on Linux.

xmodmap can alter the behaviour of Caps Lock, I have it swapped with the left
control key. There are various utilities to control xmodmap, KDE and probably
Gnome include a settings dialog.

------
arnarbi
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.

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.

~~~
Graziano_M
You can have the best of both worlds: Caps for me is Control (could be cmd),
but if i release it without having pressed another key, it sends escape.

~~~
sillysaurus3
How?

~~~
bobwaycott
Caps as Ctrl & Esc guy here, too.

On OS X, I used to use Karabiner for this, but it stopped working after
Sierra. Karabiner Elements hasn’t quite gotten back on par with its former
self. I switched to Hammerspoon, and it’s been pretty good for this and other
tasks (like remapping standalone left/right shift presses to insert left/right
parens).

------
bmn__
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.

If you lack a physical Hyper key and want to change Capslock into Hyper,
simply run:

    
    
        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

------
jweather
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.

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

~~~
joshbetz
Thanks, I fixed it.

------
phyller
Does anyone else feel reluctant to install a tool that allows a link on a
website to remap your keyboard? Am I misunderstanding this?

------
keithnz
on windows I use autohotkey, and you can make it program specific what
happens, like

    
    
      SetTitleMatchMode, RegEx
      #IfWinActive .*Microsoft Visual Studio|JetPopupMenuView|ReSharper|.*GVIM|.*Visual Studio Code
        Capslock::Esc
      #IfWinActive

------
Animats
Mandatory XKCD: [https://xkcd.com/1172/](https://xkcd.com/1172/)

