Navigation without Pointer Devices
If you have any thoughts please add them!
Goals
To Whom it may Concern
- People with visual and motor disabilities who cannot use pointer devices easily
- Power users who may use keyboard navigation to get things done faster
- Normal users who use common shortcuts for common operation (copying, pasting...)
Goals
- Fast and consistent keyboard navigation throughout all applications and GNOME itself
- Intuitive keyboard navigation for power users and disabled users
- Intuitive common keyboard shortcuts for normal users
What's There Right Now?
Mnemonics
Pros:
- Show up on buttons/labels when you press ALT
Activate the element on pressing ALT + <assigned char>
- Everyone interested in keyboard navigation knows they're there
Cons:
- Limited to one char by GTK
- Buttons with icons-only can't show there mnemonic (if they have one)
- Mnemonics are not read out by Orca
Search
Pros:
- Great for selecting a single element or multiple elements with a similar name
- Intuitive
- Fast (just type!)
Cons:
- Ever tried to select multiple elements out of a small set which dont have a common substring to search for?
- Sometimes we have several searches (e.g. in yelp you can search everything or just the current page) - thats bad
Tabbing
If other solutions fail the user can tab through the elements on the screen. Sometimes arrow keys do also work.
Pros:
- You can usually reach all elements
- Orca reads out some information about the focused object
Cons:
- It's painful; takes time and many desperate hits on the tab key
- It is not obvious what the "next" item is
- Sometimes focus changes and user has no idea where it is
Common Shortcuts
Most apps implement common shortcuts (e.g. F1 for help, F11 for fullscreen and so on.)
Problems: In the mind of the user these shortcuts are percepted as system wide things. You can do F1 in every context to open the appropriate help. These shortcuts are not globally implemented. This makes them sometimes inconsistent and sometimes the developers don't think about them. So maybe an app has a help accessible via the usual menu but the shortcut does not work.
The current common shortcuts are a bit chaotic: Ctrl, Alt, Super and the function buttons are used regardlessly by the shell or the apps and for a large number of very different uses with no general pattern, which doesn't help their discoverability and memorisation.
In addition having only one set of shortcuts makes it difficult for left moused users and users with a very different keyboard layout to operate the application with one hand on the mouse and the other available for shortcuts.
Gamepad Navigation
Gamepad navigation is poor if not just non existant. However I can imagine the gamepad to be quite efficient with appropriate support.
Other environments
Numeric Mnemonics
Ubuntu allows launching apps via Super + <number> and shows the number for each app when pressing Super. Microsoft does a similar thing in Windows 7. (Super + <number> launches the app but the user has to count manually)
Vimperator
Vimperator is a firefox plugin providing vim-like navigation for the web. This works very well and makes by definition the web browser accessible via keyboard only. E.g. links are numerized as follows when pressing f in the normal mode.
Ideas for the Future
Mnemonics
Mnemonics are great. Everything that has a mnemonic can easily be accessed.
It would be good to have them for every non-dynamic action item.
Can we find a way to (assign and) show mnemonics for buttons with icons only on it when pressing ALT?
Numeric Mnemonics
Numeric mnemonics are not the holy grale for everything. However they could be useful for:
- launching apps out of a finite and small set of favorites
- accessing a finite and small set of elements in a sidebar which is not searchable
However in most cases (shell overview, Boxes VMs, ...) the search will do a good and more flexible job. Numeric mnemonics are only useful for a small set of elements. Currently the set of elements cannot exceed the size of ten since GTK does not allow mnemonics with more than one char.
Tabbing
There are some ideas about having a distinct functionality for the tab and the arrow keys. This allows faster tabbing but enforces the user to think about the difference.
Idea: When tabbing/arrowing through elements we should have a better visible focus. Currently the focus is almost invisible (and it can stay this way when using a pointing device.)
Common Shortcuts
1. Globalization
Just like Alt + F4 works with every application F1 and so on should. Programs may also choose to ignore a signal.
This abstraction would also allow to change and customize shortcuts globally.
I would try to do this with as many common shortcuts as possible. Things like:
- Saving something
- Loading/opening a file
- Searching
- ...
An application could decide to listen to these kinds of signals or ignore the signals and listen to keyboard shortcuts directly. This way the functionality of third-party software will not be disrupted (but the shortcut consistency may be).
2. Theming
Some global shortcuts are currently configurable. However it would be good to have some keyboard "themes" so you can set the shortcuts to the "Windows" ones for migrators, "QWERTY" for usual keyboards, "DVORAK" optimized for dvorak keyboards or define own sets and so on. In addition you could link a shortcut theme with a keyboard layout so that a change of the layout also changes the shortcuts.
3. Consistency
As the current shortcuts are not following strictly a distinct pattern, a new default theme could be introduced. This default theme should be understandable and consistent in which modifier controls what. An example may be:
- Ctrl: application specific functionalities (copy, cut, invert the colors, make a diff, save…)
- Alt: navigation inside the application (previous/next, tab switch, mnemonics…, maybe switching between windows of the app and closing windows)
- F keys: application and shell global functionalities (about dialog, quit the app, show the app's help, show the shell's help, go fullscreen…)
- Super: navigation inside the shell (navigate between windows, navigate between desktops, maximize a window…)
- Shift: variation of the action (Alt+Shift+Tab = previous tab, Ctrl+Shift+Save = Save as)
Testing
How about having a keyboard-only day on hackfests where we all plug out our mouses?