Four Shortcut Defaults in One Day: Picking a Global Hotkey for a Mac App
DEV Community

Four Shortcut Defaults in One Day: Picking a Global Hotkey for a Mac App

On September 24, 2026 (UTC), DraftKey shipped four releases, and each one changed the same thing: the default keyboard shortcut for opening its writing menu. Option + Space became Option + R, which became Control + Option + R, which became Command + Option + R. Three days later the menu moved again, to a tap of Command + Option with no letter at all.

We build DraftKey, a Mac app for Tab autocomplete and rewrites you review before they are inserted. The release notes for all of those versions are public, and they are the only source for the DraftKey details below. Everything else links to Apple's documentation or to the other apps involved.

Choosing a global shortcut looks like a five-minute decision. It is closer to a small negotiation with macOS, the keyboard layout, and every other utility the user already runs. Here is what each step taught us, written so you can skip the steps if you are about to pick one yourself.

Step 1: Option + Space, the launcher key

Version 0.1.10 introduced the writing menu: "Option-Space opens a compact writing menu beside your selection or current paragraph." It is a comfortable chord. Your thumb is already on the space bar and Option is right next to it.

That comfort is exactly why it is taken. Alfred's own help page says that "by default, the default hotkey to show Alfred's search box is ⌥ Space" (Alfred General Preferences). OpenAI documents Option + Space as the default for opening the ChatGPT Chat Bar on the Mac (How to launch the Chat Bar). Third-party guides report the same default for Raycast and other launchers.

macOS does not give a global shortcut to one app exclusively. When two apps want the same chord, the result depends on how each one registers it, and the losing app usually fails silently. The user does not see an error. They see your feature "not working."

The lesson: before you pick a chord, check what the most popular launchers, AI assistants, and window managers ship as their defaults. The keys that feel best are the ones someone else claimed first.

Step 2: Option + R, and the character you did not mean to type

Version 0.1.13 moved to "Option + R (⌥ R), a simple two-key shortcut with R for rewrite." It reads well in onboarding. It fails in practice for a reason anyone on a US keyboard layout can test right now: Option + R types ®.

On a Mac, Option is not just a modifier. It is how you type accented letters and symbols, and Apple's Mac help documents typing accent marks with the Option key (Enter characters with accent marks on Mac). Option + letter produces a character on most layouts, and which character depends on the layout. Option + G is ©, Option + 2 is ™, and on other layouts the same keys produce letters people actually need to type.

If a global shortcut is Option + letter, one of two bad things happens. Either your app consumes the key and the user can no longer type that character anywhere, or the character leaks into the document as well as triggering your menu. The 0.1.14 note says the next change was made to open writing help "without typing the ® character or triggering an Option + Space launcher." Those are the two failure modes, named in one line.

The lesson: avoid Option + letter and Option + Shift + letter for a global shortcut in any app that is used while typing. Those chords belong to text.

Step 3: Control + Option + R, then Command + Option + R

Control does not produce characters, so Control + Option + R fixed the ® problem in 0.1.14. About an hour and a half later, 0.1.15 moved again: "Use Command + Option + R to open writing help. Home, Settings, and the menu bar spell out the same shortcut."

The release notes do not say why Control + Option lost, so I will not invent a reason here. What 0.1.15 does say is more useful than the chord itself: "The shortcut returns immediately to macOS before reading the editor, avoiding keyboard-tap timeouts."

Apps that watch keys globally on macOS commonly use an event tap (CGEvent.tapCreate). The tap callback sits in the path of every keystroke, and if it takes too long, the system can disable it and deliver tapDisabledByTimeout. Reading another app's text field through Accessibility can be slow, especially when that app is busy. So the callback has to decide "is this my shortcut?" and return. The expensive work happens after.

Two more notes from 0.1.3 belong to the same family:

  • "Held shortcuts run once per press." Key repeat means a held chord arrives as a stream of key-down events. A shortcut handler that is not edge-triggered opens your menu over and over.
  • "Writing shortcuts show their actual keyboard connection state, with a Reconnect action when needed," and connections "are checked again after sleep and app switching." A tap that was disabled while the Mac slept stays disabled until someone notices. Showing that state is cheaper than a support email.

Step 4: Tap two modifiers and let go

Version 0.1.37 changed the gesture: "Tap Command + Option together and release to open Writing tools." Version 0.1.41 and later kept it, and the Home window in the screenshot above lists it next to Tab for autocomplete.

A modifier-only shortcut has a real advantage. It has no letter, so it cannot collide with a character on any layout, and it cannot accidentally type into the document. It also has a specific hazard. Command and Option are held down as part of many ordinary shortcuts, including Option + Command + Esc for Force Quit and Option + Command + D to show or hide the Dock, both on Apple's Mac keyboard shortcuts page.

So any tap-and-release trigger has to be strict about what counts as a tap:

  • Both modifiers go down, and no other key is pressed before they come back up. If any letter, arrow, or Escape arrives in between, it was a different shortcut and you do nothing. Modifier changes arrive as flagsChanged events, not key-downs, so you are tracking state transitions, not keys.
  • A long hold followed by a release is usually not a tap. Put a short time limit on it.
  • Do not swallow the modifier events. Other apps still need to see Command and Option go down.

The menu also closes the same way it opens. The writing panel's footer says "⌘ ⌥ to close," next to Escape. Making the open gesture toggle is a small thing that saves people from hunting for a close button.

Moving defaults without moving people's choices

Every one of those shortcut changes shipped to people who already had the app, and each release note handled migration the same way. From 0.1.13: "Existing Option + Space settings move to Option + R once. Other shortcut choices, sound preferences, and writing settings are preserved." From 0.1.14: "Existing Option + R and Option + Space defaults move to the new shortcut once."

That word "once" carries the design:

  • Migrate defaults, never choices. If the stored value equals the old default, the user probably never chose it, so moving it is safe. If they picked something else, leave it alone.
  • Record that the migration ran. Otherwise a user who deliberately sets the old default back gets moved again on the next launch.
  • Chain migrations. Someone updating straight from 0.1.10 to 0.1.15 should land on the newest default, not stop halfway.

Show the shortcut from one source of truth

With the shortcut changing this often, every place that printed it was a chance to be wrong. Version 0.1.14 made "the Home illustration" display "your selected writing shortcut" and update "whenever you change it." Version 0.1.15 made Home, Settings, and the menu bar "spell out the same shortcut." Onboarding had already been changed in 0.1.3 to display "the configured shortcut for accepting writing suggestions."

If your app teaches a shortcut, render the hint from the setting itself. A hard-coded "Press ⌥R" in an onboarding screen is a bug report waiting for the day the default changes.

A checklist before you ship a global shortcut

  • Search the defaults of Alfred, Raycast, ChatGPT, and any window manager your users are likely to run.
  • Do not use Option + letter in an app people use while typing.
  • Keep the event tap callback fast and decide ownership before doing any work.
  • Make shortcuts edge-triggered so key repeat does not fire them twice.
  • Detect a disabled tap and give the user a Reconnect button.
  • If you use a modifier-only gesture, cancel it the moment any other key appears.
  • Migrate the old default exactly once, and never touch a custom choice.
  • Print the shortcut everywhere from the stored setting.

Disclosure: I build DraftKey. If you want to see where the shortcut ended up, the app is at getdraftkey.com.

Sources

  • DraftKey public release notes, versions 0.1.3, 0.1.10, 0.1.13, 0.1.14, 0.1.15, 0.1.37 and 0.1.41
  • Alfred General Preferences
  • OpenAI: How to launch the Chat Bar
  • Apple: Mac keyboard shortcuts
  • Apple: Enter characters with accent marks on Mac
  • Apple: CGEvent.tapCreate and tapDisabledByTimeout
  • Apple: NSEvent.EventType.flagsChanged
Read on DEV Community ↗ ← Back to News

Comments

No comments yet. Start the discussion.