The macOS Globe key cycles: every press moves to the next input source in the list, through everything you have installed, in order. Cycling treats all layouts as equals — and nobody’s layouts are equals. I flip between U.S. and Russian all day; Finnish and Japanese are installed because I occasionally need them, not because they deserve a slot in my hourly loop. betterglobekey exists because that asymmetry is the whole problem: it partitions input sources into collections, makes a single press a deterministic toggle within the hot pair, and exiles the rare layouts behind a double press. I built it for my own hands. The shape of the problem is anyone’s who types in two languages and keeps a third around.
The pain is arithmetic. With four sources, reaching a specific one takes up to three presses — and you don’t know how many without watching the bezel, so every switch is an eyes-on operation: press, read, press again. Muscle memory needs the same gesture to mean the same thing every time; a cycle through four states can’t offer that, so switching layouts never leaves conscious attention. Dozens of times a day.
macOS knows, and ships two half-fixes. There’s a chord — Ctrl-Space, “Select the previous input source” — that toggles between your two most recent sources. It’s a toggle, but a most-recently-used one: visit Finnish once and the pair silently reshuffles under your fingers. The other fix is discipline: uninstall the layouts you rarely use and take a trip through System Settings every time “rarely” arrives. One fix is nondeterministic, the other is a chore. The missing piece is the same in both: the system has no idea which of your layouts are hot and which are luggage.
So you tell it. This is my config, minus nothing that matters:
collections:
- name: primary
sources:
- com.apple.keylayout.US
- com.apple.keylayout.Russian
- name: secondary
sources:
- com.apple.keylayout.Finnish
- com.apple.inputmethod.Kotoeri.RomajiTyping.Japanese
A single press cycles within the current collection — and with two sources, a cycle is a toggle: U.S., Russian, U.S., eyes on the text the whole time. A double press jumps to the other collection, landing on whichever source you last used there. Shift reverses either motion. A HUD names what you landed on — and the measure of the design is that you stop reading it, because a deterministic toggle has nothing to check. The rare layouts are still one gesture away; they just no longer tax every switch that happens between their appearances.
If you type in one layout, there is nothing here for you — the stock key already does the right thing when there’s nothing to cycle through. Everyone else has a version of my config: two sources that matter, and luggage. Name the difference and the Globe key gets flat-out good.
It’s a Go daemon, no Xcode anywhere in sight — the how is the next post’s story. This one only had to name the problem.