Enable Mac Full Keyboard Access, but beware!


On my Mac, by default, the keyboard cannot be used to navigate and trigger dialog box buttons. To “fix” this shortcoming - enable Full Keyboard Access to use the tab key to navigate controls! But beware of downsides too...

I hate that I have to resort to using the mouse to click on dialog buttons like this (when launching Vivaldi, my browser of choice):

Vivaldi Dialog Box

Changing the Full Keyboard Access setting allows one to press tab to highlight the next button and shift-tab to highlight the previous. Press space to activate the button (return, a.k.a. enter, is supposed to trigger the default button but in this case, there is no default button).

This feature is really very deeply hidden in System Preferences > Keyboard > Shortcuts. At the bottom under Full Keyboard Access, select All Controls. Also, note that control-F7 toggles the setting. If this keystroke combination does not work, then check Keyboard > Change the way Tab moves focus in the lists at the top:

Keyboard Shortcuts Full Keyboard Access

There are downsides though:

  • You now have to navigate through all controls (even tiny drop down arrows, check boxes, etc.)
  • Arrow keys do not navigate between buttons.
  • You will often get lost when the focused control is scrolled away, hidden or obscured by the selection.
  • You may get stuck in lists (Shift-Control-Tab does not work for me).
  • Plus, clicking a control sometimes does not set focus on it, so you can't navigate from that point forward.

This is so silly, when compared to Windows! How is the keyboard an "Accessibility" "feature" and not standard behaviour?

With Windows, I disable all accessibility settings like Sticky Keys, whereas on iOS and Mac / OS X, I do the exact opposite (for iOS, check out this previous post, AssistiveTouch Customisation on iOS 9).

Anyway, the Apple support page Mac keyboard shortcuts for accessibility features lists the shortcuts enabled by this setting. Here is a summary:

Control-F7Switch between navigation of all controls on the screen, or only text boxes and lists.
TabMove to the next control.
Shift-TabMove to the previous control.
Control-TabMove to the next control when a text field is selected.
Shift-Control-TabMove the focus to the previous grouping of controls.
Arrow keysUse Left Arrow, Right Arrow, Up Arrow, and Down Arrow to move to the adjacent item in a list, tab group, or menu. Or move sliders and adjusters: Up Arrow to increase values, Down Arrow to decrease values.
Control-arrow keysUse Control with Left Arrow, Right Arrow, Up Arrow, and Down Arrow to move to a control adjacent to the text field.
Space barChoose the selected menu item.
Return or EnterClick the default button, or perform the default action.
EscClick the Cancel button, or close a menu without choosing an item.
Shift-Control-F6Move the focus to the previous panel.
Control-F8Move to the status menu in the menu bar.
Command-AccentActivate the next open window in the front app.
Command-Shift-AccentActivate the previous open window in the front app.
Command-Option-AccentMove the focus to the window drawer.