I have an application where many forms are collected in a hierarchy. The hierarchy is presented on the left side, and a form with text-entries, tables, comboboxes, etc. occupies the main portion of the window. We'd like to make it easier for users to jump between the forms in the hierarchy while editing in forms so that they can, for instance, make a similar edit to various "siblings" without losing their momentum.

As a start, we've got the following keystrokes (with the control key on linux/win). Some of the keys are not enabled when a text editor is active, though, because they're used for cursor movement. This substantially reduces the benefits:

  • Cmd-page up/down - goes to the prev/next item in the hierarchy, opening up to show children if necessary.
  • Cmd-up/down - goes to the prev/next peer. I.e., the next item at the same level of the hierarchy, skipping children (to get to "siblings") or skipping the parent (to get to "cousins" under an earlier parent). These are often different instances of the same form.
  • Cmd-left/right - goes up/down levels of the hierarchy to a parent or child, skipping peers.

Cmd-up/down/left/right are used by the text-editors, though, to jump to the beginning/end of the line or the whole text. Although these are mostly short text-fields, I'd like to not clobber those OS-standard editing shortcuts. Are there some other keystrokes that could work well here?

A few other details: The application is cross-platform (written in Java.) The majority of users are on mac, with some linux and windows. Heavy users, who would benefit from the shortcuts, are generally scientists and engineers.

2 Answers 2


I think your problem is mostly one of changing the keyboard focus, isn't it?

Most platforms have existing shortcuts for some of these things. E.g. in pretty much every view in MacOS Finder you can use Cmd+Shift+Up-Arrow and Cmd+Shift+Down-Arrow to go one hierarchy level up or down. You could probably re-purpose that to let people move keyboard focus between the two panes.

If you don't need the tab key (but I suppose in a form you need it to jump between fields), you could do like Mail.app and use the tab key to jump between the two lists.

FWIW, I don't think there's a sensible shortcut for this use that's still completely unused on the Mac when text editing, as you can combine modifier keys. So E.g. Cmd+Shift+Left-Arrow is Cmd+Left-Arrow (move to start of line) plus Shift (change the selection), so would extend the selection to the start of the line.

As with all UI, you need to prioritize the commands. Certain less common operations just won't work anymore, to make way for more common ones. Also, keep in mind there are duplicates. E.g. Mac text fields support lots of Emacs key bindings, so apart from Cmd+Left-Arrow, you can also use Ctrl+A to jump to the start of a line, and Ctrl+E for the end (Cmd+Right-Arrow). So look what the OS offers, and make a list of unused shortcuts.

Also, don't forget you can use an application-specific shortcut. You could always create "go to next form" and "go to previous form" menu items and arbitrarily assign them the free shortcuts Cmd+Shift+Y and Cmd+Shift+U.

  • I think you've captured the issues and alternatives quite well. I'll consider "arbitrary" shortcuts (since that's about all that's left), and also whether a keystroke to switch focus to the hierarchy --- which we'd also added recently cmd-0/cmd-1 --- alleviates the need for shortcuts to switch while focus stays on the editor. One more possibility has come to mind, too: I don't think I've run into uses for cmd-alt / ctrl-alt combinations, so those may be possibilities. Commented Jul 15, 2014 at 0:22

Rather than having different key combinations to navigate parent to parent (skipping children), why not just use the up and down arrows, or the tab (forwards) and shift-tab (backwards) for moving through everything in the hierarchy that is open? This will free up the key combinations.

For this to work, you need a shortcut key to close and open the current node in the hierarchy (so the user can reduce the number of nodes to scroll through). Perhaps cmd + (plus) to open children of a node, and cmd - (minus) to close the current node (if a child node is selected, the parent node hides all children and the parent node becomes the selected one when the close command is pressed).

If closing nodes isn't convenient for your use case, you could use the up and down arrows for local, and the tab (forwards) and shift-tab (backwards) for parent navigation.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.