When people with blindness interact with desktop applications, they use standard keyboard navigation to manipulate controls. The BasicSpeechPerk narrates this interaction according to the design in Section 2, “Event Announcements”.
Giving feedback on the interaction between the user and an application is not enough, though. Blind and visually impaired users also need a way of listening to parts of the display without affecting it, much like a sighted user scans a GUI with his or her eyes. The ReviewPerk and AltShiftPerk define a keyboard interface for reviewing the visual display. The key map includes numerous commands for reviewing program information that does not get output automatically. One example of a keyboard-activated function is to say the font properties at the text caret.
Two points of regard (PORs) determine how the keys perform their functions. One POR is the cursor and the other is the pointer.
The cursor POR always falls in the control that has the application focus. For controls having a visible text caret, the cursor moves with the caret. It rests on the character under a block caret or to the right of a line caret. For controls supporting item selection, the cursor moves with the active selection. It rests on the first character of the active item. For all other simple controls, the cursor is fixed on the first character of the one and only item in the control.
The application dictates what controls the cursor can reach. For example, the user cannot move the cursor to a static text label deemed non-focusable by the application. The application also determines the keys available for moving the cursor. Tab for instance, switches the widget focus among the focusable controls is most applications. The ReviewPerk makes one exception to the rule of the application defining all aspects of cursor navigation. When activated, the route pointer to cursor function moves the cursor to the location of the pointer, if possible.
![]() | Important |
|---|---|
When the cursor changes location, the pointer is always automatically synchronized to it. |
The pointer POR may be moved to any control in an application. As a result, the pointer provides a useful way of browsing the view presented by an application without affecting it. For example, a user can read through a window by pressing the next item key. When the user activates the next item function, the ReviewPerk moves the pointer POR to that item and then BasicSpeechPerk announces it. The user may repeat the operation until reaching the end of the view. The application focus, and thus the cursor POR, remain unchanged while moving the pointer in this manner.
A practical use of the pointer is to read information that is not deemed focusable by an application. For example, a program might display a static text label with instructions. In many applications, focus cannot be given to this type of control, making the help string inaccessible to blind and visually impaired users. A user can overcome this problem by using the pointer to navigate to the static text and read it.
![]() | Important |
|---|---|
When the pointer changes location, the cursor is not automatically synchronized to it. |
The keyboard bindings attempt to accomplish the following:
The following ergonomic criteria are considered in the selection of key bindings. The most ergonomic conditions are listed first. The conditions that create an absolutely non-ergonomic conditions are listed last. Conditions beyond the top 5 most ergonomic should be seriously evaluated before use in any design.
![]() | Note |
|---|---|
On some, laptops there is only one of various modifier keys so it is nearly impossible to optimize for those keyboards unless one knows where the various modifier keys are located. |
The screen reader key sequences trigger functions in the ReviewPerk, BasicSpeechPerk, DeveloperPerk, and DefaultDialogPerk. Every key sequence starts with the press of one or more modifier keys followed by the press of a non-modifier. The function bound to a sequence is activated on the release of the first of any of the held keys. The use of release as the trigger is intentional: it avoids problems with accidental repeat key presses (e.g. typomatic repeat for held keys, users with poor hand control). Scan codes are used instead of keysyms to ensure the position of keys in a binding remain the same across keyboard layouts, not their mnemonic associations.
The basic screen reader functions are bound to sequences following the Alt-Shift key map defined in the AltShiftPerk. The sequences in this map are intended to avoid conflicts with standard application key sequences and keyboard accessibility features. For instance, the use of standard modifiers prevents unintended interactions with the Sticky Keys keyboard accessibility feature.
The functions in the DeveloperPerk are bound to keys prefixed with Alt-CapsLock. The use of a separate modifier distinguishes them from most of the basic user keys. The key map for the developer functions is defined in the DeveloperPerk itself.
The LSR Perk Writer's Guide advises that custom Perks use CapsLock as a modifier. This alternative helps users distinguish between standard functions and application specific functions.
![]() | Note |
|---|---|
Some bindings are exceptions to these rules. First, the user function |
All of the keys available in the current context are listed in the help dialog. The listing includes keys defined in the base screen reader Perks as well as custom Perks. See Section 4.2, “Help Chooser”.
The following table lists the functions provided by the ReviewPerk and the keys to which they are bound by the AltShiftPerk. All functions operate relative to the pointer POR unless otherwise indicated.
Table 1. Basic review functions and bindings
| Function | Binding | Notes |
|---|---|---|
review previous item | Alt-Shift-U | Moves the pointer to the start of the previous item. Stops at the first item of the foreground window. |
review current item | Alt-Shift-I | Moves the pointer to the start of the current item |
review next item | Alt-Shift-O | Moves the pointer to the start of the next item. Stops at the last item of the foreground window. |
review previous word | Alt-Shift-J | Moves the pointer to the start of the previous word. Stops at the first word in the foreground window or the current item depending on the wrapping setting. |
review current word | Alt-Shift-K | Moves the pointer to the start of the current word. |
review next word | Alt-Shift-L | Moves the pointer to the start of the next word. Stops at the last word in the foreground window or the current item depending on the wrapping setting. |
review previous char | Alt-Shift-M | Moves the pointer to the previous character. Stops at the first character of the foreground window or the current item depending on the wrapping setting. |
review current char | Alt-Shift-, | |
review next char | Alt-Shift-. | Moves the pointer to the next character. Stops at the last character of the foreground window or the current item depending on the wrapping setting. |
focus to por | Alt-Shift-R | Attempts to move the cursor to the pointer POR by default. If possible, sets the application focus, active selection, and caret at the pointer position. If not, reports that the cursor cannot be moved. |
pointer to por | Alt-Shift-F | Attempts to move the pointer to the cusror POR by default. |
mouse to por | Alt-Shift-X |
The following table lists the functions provided by the BasicSpeechPerk, the keys to which some are bound by the AltShiftPerk, and the functions in the ReviewPerk to which others are bound. All functions operate relative to the pointer POR unless otherwise indicated.
Table 2. Basic speech functions and bindings
| Function | Binding | Notes |
|---|---|---|
stop now | Ctrl | |
increase speech rate | Alt-Shift-T | Does nothing when the output device has no concept of rate. |
decrease speech rate | Alt-Shift-G | Does nothing when the output device has no concept of rate. |
read review item, read review skip |
review previous item,
review current item,
review next item
| Reads empty items only if the skipping setting is set to report. |
read review word, spell review word, pronounce review word |
review previous word,
review current word,
review next word
| The function cycles from reading, spelling, and pronouncing (using NATO phonetic alphabet code words) the current word when the |
read review char, spell review char, pronounce review char |
review previous char,
review current char,
review next char
| The function cycles from reading and pronouncing (using NATO phonetic alphabet code words) the current character when the |
read top | Alt-Shift-Y | Moves the pointer to the first item in the view and reads it. Usually, this command reads the title of the active window. |
read bottom | Alt-Shift-N | Moves the pointer to the last item in the view and reads it. Usually, this command reads the status bar of the active window. |
read description | Alt-Shift-D | Reads the accessible description of an item. |
read text color, read text attributes | Alt-Shift-B | This key sequence cycles. The first press says the foreground color name on the background color name, followed three (red, green, blue) decimal values for each. The next press reports all of the remaining name/value pairs of the text attributes. |
read all | Alt-Shift-H | |
where am i now, where am i ancestors | Alt-Shift-1 | This key sequence cycles. The first press reports the details of the current accessible. The second press reports abbreviated details of each ancestor up the chain to the root of the active window. |
When navigating across items, the template for output is the same as the one used for active selection events. See Section 2.4.1, “Item Activation”.
The following table lists the functions provided by the BookmarkPerk and the keys to which they are bound.
Table 3. Bookmark functions and bindings
| Function | Bindings | Notes |
|---|---|---|
bookmark reg add gesture | Alt-CapsLock-2 through Alt-CapsLock-0 | Stores the current pointer POR in the given slot. If the slot already stores a bookmark, asks for confirmation. A second consecutive press confirms the overwrite. |
bookmark reg goto gesture | CapsLock-2 through CapsLock-0 | Moves the pointer to the bookmarked POR. |
bookmark reg where am i gesture | Alt-Shift-2 through Alt-Shift-0 | Compares the bookmarked POR to the root of the view. |
bookmark reg bm compare gesture | Alt-CapsLock-Shift-2 through Alt-CapsLock-Shift-0 | Compares the bookmarked POR to the pointer POR. |
The following table lists the functions provided by the SearchPerk and the keys to which they are bound by the AltShiftPerk.
Table 4. Search functions and bindings
| Function | Bindings | Notes |
|---|---|---|
search show chooser | Alt-Shift-S | See Section 4.3, “Search Chooser” |
search find next | Alt-Shift-E | |
search find previous | Alt-Shift-W |
The following table lists the functions provided by the DefaultDialogPerk and the keys to which they are bound by the AltShiftPerk.
Table 5. Dialog functions and bindings
| Function | Bindings | Notes |
|---|---|---|
show settings chooser | Alt-Shift-Q | See Section 4.1, “Settings Chooser” |
show perk chooser | Alt-Shift-A | See Section 4.4, “Perk Chooser” |
show help chooser | Alt-Shift-Z | See Section 4.2, “Help Chooser” |
The following table lists the functions provided by the DeveloperPerk and the keys to which they are bound.
Table 6. Developer functions and bindings
| Function | Key Sequence | Notes |
|---|---|---|
toggle mute | Left Ctrl-Right Ctrl | |
say perks | Alt-CapsLock-J | Says the names of the active Perks starting with the one that will process events first. |
reload perks | Alt-CapsLock-K | Reloads all Perks in the current application. Any change to the Perk code since the last load will take effect immediately. |
toggle monitors | Alt-CapsLock-L | Shows all monitors registered in the current profile if any one monitor is not shown. Hides all monitors if all of them are shown. See Section 4.5, “Developer Dialogs” |