A well-designed keyboard user interface plays a key role when you are designing applications. Many power-users prefer to perform most operations with the keyboard rather than the mouse. Visually-impaired users can navigate software more effectively using the keyboard, because using the mouse depends on visual feedback of the mouse pointer location. And mobility impairments can prevent a user from successfully navigating using the mouse, because of the fine motor control skills required.
Make all mouse actions available from the keyboard, and include keyboard access to all toolbars, menus, links and buttons. Every function your application provides must be available using the keyboard alone. Hiding your mouse while you test your application is a great way to test this!

Most functionality is easy to make available from the keyboard, by using access keys and shortcut keys, and the toolkit's built-in keyboard navigation features. All controls with labels should have access keys, and frequently-used menu items should be assigned shortcut keys. However, operations that rely on drag-and-drop, for example, may require more thought to make them keyboard accessible.
Give all labelled components an access key (underlined letter), with the exception of toolbar controls which would use up too many access key combinations.
Choose access keys to be as easy to remember as possible. Normally, this means using the first letter of the label. However, in complex windows, the choice can become more difficult. Here are some simple rules:
If duplication of access keys in a window is unavoidable, you should still refrain from duplicating the access keys for any of these buttons that appear in the same window: OK, Cancel, Close, Apply or Help.
Also, it is better not to assign access keys to "thin" letters (such as lowercase i or l), or letters with descenders (such as lowercase g or y) unless it is unavoidable. The underline does not show up very well on those characters in some fonts.
Applications using a non-Roman writing system in conjunction with a standard keyboard can have control labels prefixed with Roman characters as access keys.
The tables in Section 10.2.4 ― Standard Application Shortcut Keys summarize the standard shortcut keys to use when your application supports those functions. Your application will not necessarily support all of these functions, see Section 4.4 ― Standard Menus for more information. However, use the recommended shortcut keys for those functions you do support.
You will probably want to add your own shortcut keys for functions specific to your application. If so, as well as following the guidelines below, look at any other existing similar applications to see which shortcut keys they have defined. Your users may already be using those or similar applications, so being consistent where it is possible and sensible to do so will provide a better user experience for them when they begin to use yours.
Note that you cannot use Shift+Ctrl+A-thru-F or Shift+Ctrl+0-thru-9 for your own purposes, as these combinations are used to enter unicode characters in text fields.
If your application uses any of the standard functions listed in the following tables, use the recommended standard keyboard shortcut for that function.
| Function | Shortcut | Description |
|---|---|---|
| New | Ctrl+N | Create a new document |
| Open | Ctrl+O | Open a document |
| Save | Ctrl+S | Save the current document |
| Ctrl+P | Print the current document | |
| Close | Ctrl+W | Close the current document |
| Quit | Ctrl+Q | Quit the application |
| Function | Shortcut | Description |
|---|---|---|
| Undo | Ctrl+Z | Undo the last operation |
| Redo | Shift+Ctrl+Z | Redo the last operation |
| Cut | Ctrl+X | Cut the selected area and store it in the clipboard |
| Copy | Ctrl+C | Copy the selected area into the clipboard |
| Paste | Ctrl+V | Paste contents of clipboard at mouse/cursor position |
| Duplicate | Ctrl+U | Duplicate the currently-selected items and add them to the same window, without affecting the clipboard |
| Select All | Ctrl+A | Select everything in focused control or window |
| Invert Selection | Ctrl+I | Select everything in focused control or window that was previously unselected, and deselect everything that was previously selected |
| Delete | Del | Delete selection |
| Find... | Ctrl+F | Find matches in the current document, highlighting them in-place |
| Search... | Ctrl+F (see note below) | Search for matches in multiple documents, files or other external sources |
| Find Next | Ctrl+G | Find the next match |
| Replace... | Ctrl+H | Find and replace matches |
| Rename | F2 | Switch the selected item's label into edit mode, allowing user to type in a new name. |
If your application requires both Edit ▸ Find and Edit ▸ Search menu items, use Shift+Ctrl+F as the shortcut for Search.
| Function | Shortcut | Description |
|---|---|---|
| Zoom In | Ctrl+Plus | Zoom in on the document |
| Zoom Out | Ctrl+Minus | Zoom out of the document |
| Normal Size | Ctrl+0 | Restore to zoom level to normal size (generally 100%) |
| Refresh | Ctrl+R | Redraw current view of document, without checking if content has changed |
| Reload | Ctrl+R (see note below) | Reload the current document, updating content from source if necessary |
| Properties | Alt+Enter | Display the selected object's Properties window. May alternatively appear on the File menu if the document itself is the only object in the application whose properties can be inspected. |
If your application requires both View ▸ Reload and View ▸ Refresh menu items, use Shift+Ctrl+R as the shortcut for Reload.
| Function | Shortcut | Description |
|---|---|---|
| Add Bookmark | Ctrl+D | Add a bookmark for the current location |
| Edit Bookmarks... | Ctrl+B (see note below) | Open a window in which the user can edit and organise saved bookmarks |
If your application requires both Format ▸ Bold and Bookmarks ▸ Edit Bookmarks... menu items, use Shift+Ctrl+D as the shortcut for Edit Bookmarks.
| Function | Shortcut | Description |
|---|---|---|
| Back | Alt+Left | Go to the previous location in the navigation chain |
| Next | Alt+Right | Go to the next location in the navigation chain |
| Up | Alt+Up | Go up one level in the navigation hierarchy |
| Home | Alt+Home | Go to the starting page defined by the user or application |
| Location... | Ctrl+L | Present or focus an entry field into which the user can type a new address or location to view |
| Function | Shortcut | Description |
|---|---|---|
| Bold | Ctrl+B | Make selected text bold/regular |
| Underline | Ctrl+U | Underline/remove underline from selected text |
| Italic | Ctrl+I | Make selected text italic/regular |
| Function | Shortcut | Description |
|---|---|---|
| Contents | F1 | Show help contents page for the current application |
The following shortcut keys are used by many window managers, and should not normally be over-ridden by your application.
| Function | Shortcut | Description |
|---|---|---|
| Switch primary windows | Alt+Tab, Shift+Alt+Tab | Switch focus to the next or previous top level window on the desktop |
| Switch panels | Ctrl+Alt+Tab, Shift+Ctrl+Alt+Tab | Switch focus to the next or previous panel on the desktop |
| Log out | Ctrl+Alt+Del | Open the session logout confirmation dialog |
| Window menu | Alt+Space | Open the window menu |
| Close | Alt+F4 | Close the focused window |
| Restore | Alt+F5 | Restore the focused to its previous size |
| Switch secondary windows | Alt+F6, Shift+Alt+F6 | Switch focus to the next or previous secondary window associated with the application () |
| Move | Alt+F7 | Move the focused window |
| Resize | Alt+F8 | Resize the focused window |
| Minimize | Alt+F9 | Minimze the focused window |
| Maximize | Alt+F10 | Maximize the focused window |
| Full Screen | Ctrl+F11 | Show the window in full screen mode, with no border, menubar, toolbar or statusbar |
The following shortcut keys are reserved for keyboard navigation use by the various widgets used in GNOME, and should not normally be over-ridden by your application.
| Key | Function |
|---|---|
| Tab, Shift+Tab | Moves keyboard focus to next/previous control |
| Ctrl+Tab, Shift+Ctrl+Tab | Moves keyboard focus out of enclosing widget to next/previous control, in those situations where Tab alone has another function (e.g. GtkTextView) |
| Ctrl+F1 | Pop up tooltip for currently-focused control |
| Shift+F1 | Show context-sensitive help for currently-focused window or control |
| F6, Shift+F6 | Give focus to next/previous pane in a GtkPaned window |
| F8 | Give focus to splitter bar in paned window |
| F10 | Give focus to window's menu bar |
| Shift+F10 | Pop up contextual menu for currently-selected objects |
| Space | Toggle selected state of focused check box, radio button, or toggle button |
| Return | Activate focused button, menu item etc. |
| Home, End | Select/move to first item in selected widget |
| PageUp, Ctrl+PageUp, PageDown, Ctrl+PageDown | Scroll selected view by one page up/left/down/right |
The following emacs-style navigation shortcut keys are still available in GNOME 2.0 text entry fields (by selecting the "emacs" scheme in the GNOME Keyboard Shortcuts preferences dialog), but are disabled by default. Since some users will still want to use them, do not over-ride them for your own purposes in any situations where a text entry control has focus.
| Key | Function |
|---|---|
| Ctrl+A | Move cursor to beginning of line |
| Ctrl+D | Delete character following/under cursor |
| Ctrl+E | Move cursor to end of line |
| Ctrl+K | Delete from cursor to end of line |
| Ctrl+U | Delete current line |
| Ctrl+W | Cut to clipboard |
| Ctrl+Y | Paste from clipboard |
| Ctrl+Space | Set mark |
| Ctrl+Del, Alt+D | Delete from cursor to end of word |
| Ctrl+Backspace | Delete from cursor to start of word |
| Alt+Space | Delete all whitespace around cursor, reinsert single space |
| Alt+\ | Delete all whitespace around cursor |
Panels have been fully keyboard navigable since GNOME 2.0. Since your panel application can gain keyboard focus, you must ensure that it is also keyboard navigable.
The rules for panel application keyboard navigation are mostly the same as those for any other window. However, there is one imporant difference:
When an object on a panel has focus, the Tab key normally moves focus to the next object on the panel. If your panel application also used Tab for its own internal navigation, the user would have to press Ctrl+Tab to move focus out of your panel application instead. This inconsistency would be detremental to the user experience.