JAWS Scripts For Slack
Doug Lee
Last Revised May, 2024

This document describes the scripts for Slack and provides tips for using this application with JAWS. The scripts will load and run when focus is in either the web portal for Slack or the Windows Desktop Slack application. The Desktop application is recommended for the additional keyboard shortcuts and is the best tested with these scripts as of this writing.

This document can be opened from within the application via a double press of JAWSKey+F1 (or Insert+F1) when the scripts are running.

For advice on how to use Slack with a screen reader, see the Slack-hosted article "Use a screen reader with Slack's desktop app." For an alternative, gentle introduction to using Slack with a screen reader, see J.J. Meddaugh's August, 2019 AccessWorld article, "An Introduction to Slack, A Popular Chat App for Teams and Workplaces."

Table of Contents

System Requirements For JAWS Users

In addition to any system requirements for the application, the following apply for JAWS users:

Script Installation Instructions

To install these scripts on a new system:

  1. Load JAWS if this has not already been done. This will require administrative privileges on the computer.
  2. Run JAWS as the user for whom the scripts are to be installed. This and the following steps must be performed for each user of the computer who will be using JAWS with these scripts.
  3. Download and run, or run directly, the installer for these scripts; and follow the on-screen directions. Be sure to install the scripts in the currently running JAWS version if a JAWS version list is presented.
  4. To verify successful installation, type Insert+Q from within the application. Part of the JAWS spoken response should be a revision number. If you do not hear a revision number, the scripts are not correctly loaded. In some cases, restarting JAWS may fix this issue.

Key Sequences

These scripts incorporate commands that consist of sequences of keystrokes, all beginning with a common prefix, or "command keystroke." This approach allows many script commands without the risk of conflicting with application keystrokes. See the "Multi-Key Command Sequences" section of the "Common Script Elements" document for further details, including how to explore the available script commands (similar to exploring a menu system), and how to change the Command keystroke if necessary.

By default, the Command keystroke for these scripts is [. This document may refer to this keystroke as [ or Command; so, for example, [ Tab and Command Tab both refer to typing the prefix keystroke, then separately the Tab key. Some sequences may consist of more than two keystrokes, or "levels"; for example, [ d r would refer to typing [, then d, then finally r.

Script Commands and Features

These scripts provide the following commands beyond those provided by the application itself:

These scripts also provide the following features:

Tips, Tricks, and Tactics

This section presents some tricks for using Slack efficiently, according to this script author's experience.

Finding Keyboard Shortcuts

Use the Ctrl+/ Slack command to move to a list of keyboard shortcuts. Up and Down arrows can then move through available shortcuts.

Settings

Settings can be reached quickly in Slack by typing Ctrl+Comma. Settings appear in tabs reachable with Up and Down arrow keys and activated by Enter or Space. Do not use Left or Right arrows to move among these tabs; this will send focus elsewhere instead (tested August 27, 2020 against Slack 4.8.0).

The following settings may be of use to JAWS users:

Handling Calls

The pick-button command sequence, [ B, is especially helpful for finding call control buttons such as Accept and Leave Call quickly. When many buttons appear in the list, type the first letter or few letters of the desired name in order to find it more immediately.

In an active call, use the Slack native commands M and V to toggle the microphone or video (camera) on and off. If JAWS does not announce the new state, use the SayWindowTitle command, JAWSKey+T, to determine what is on and what is off.

The scripts include a set of command sequences for moving quickly to specific screen areas. As of this writing (August, 2020), this system is experimental but functional in at least Slack 4.8.0. All of these sequences begin with [ G and terminate with a digit. The following command sequences are available:

Caveats:

The Message Reading System

A Slack text message can include several types of information: content, reactions, reply count, list of reply authors, attachments, flags such as Edited or Pinned, etc. The message reading system described in this section can simplify accessing specific parts of a message. This is accomplished in two ways:

Message Reading Format Customization

The key sequence [ F will cycle between available message formats. The default format is "Default custom," which rearranges information in messages in a way pleasing at least to this script author. The "Native" option reverts message reading to the native format presented by Slack itself.

The "Default custom" message format presents message information in the following order:

Note that any change to the message reading format via [ F will remain in effect until changed again, even if JAWS is restarted.

Reading Specific Parts of a Message On Demand

Sequences consisting of [ followed by a digit between 1 and 7 will read specific portions of the current message:

Unrecognized Message Formats

From time to time, a message may appear that the scripts are unable to recognize for format alterations, separation into parts, etc. This can occur because

Messages with an unrecognized format are always presented as if the "Native" message reading format is in effect; that is, without alteration from what Slack natively presents. Command sequences for reading portions of a message may produce error messages instead of information when applied to a Slack message with an unrecognized format.

Staying Up To Date With Unread Messages and Activities

This author uses several means to keep up to date with new messages and activities across many channels and threaded conversations. Each method has pros and cons. A combination of methods will most likely be beneficial in a large or very busy Slack workspace.

By Notifications

Slack can send notifications for nothing, just mentions and direct messages, or all messages. In practice, this author finds that "all messages" might mean "most messages," though that may somehow be pilot error. Slack can also separate how to handle notifications for different devices, though this is not default behavior. Finally, Slack can include message text in notifications or, for increased privacy (and less verbosity), just notify of new messages without displaying their content. See the Settings > Notifications page for the available options.

By the "All Unreads" Pseudo-Channel

Note that the following feature must be enabled before it becomes operational. It is not enabled by default. Enable it by checking "Show All Unreads" in Preferences > Sidebar.

Typing Ctrl+Shift+A in Slack will display and update a "channel" containing all unread message threads, sorted by channel. Press Tab once after typing this native Slack command to focus the list of threads, then go up with the Up arrow as necessary to be sure to start at the top of the list. On encountering a thread with replies, use the Right arrow to move into the replies so that Up and Down arrows will move among its replies instead of among threads. The Left arrow will return to the thread list.

If new messages arrive while you are navigating the "All Unreads" list, they will be represented by buttons like "1 new message"; the new messages will not actually join the list unless you press the button. This is probably to prevent loss of messages while reading. Typing Ctrl+Shift+A a second time will also add such messages to the list without removing any messages that are not marked as read.

On finishing the reading of all messages from a particular chat or channel in the All Unreads list, press Esc to mark them all as read. Messages from other channels and chats that appear in the list will not be marked.

Typing Shift+Esc marks all messages shown in the All Unreads list as read at once. This commonly causes the announcement of a "You're all caught up" message, the wording of which may change, sometimes through amusing alternatives.

While the pseudo-channel is called "All Unreads," this author finds that it really means "All Unread Threads." Some replies to threads you've already seen may not be included. This gives rise to the next suggestion.

By the "Threads" Pseudo-Channel

Typing Ctrl+Shift+T will display a list of threads sorted by date, newest first. As with the "All Unreads" option, be sure after typing this command to Tab to and go up to the top of the list as necessary.

This view displays threads across channels, sorted by time of last post. Within each thread, all messages are shown unless there are many messages, in which case the original thread-starter messages and the new replies are shown along with an expandable indication of how many more replies are available between the two. The Down arrow is a sufficient means of reading new messages in this view. Using the Down arrow will cause focus to pass through these elements, in this useful though unusual order:

By Channel Directly

Slack includes an Alt+Shift+Down command to move to the next channel containing unread messages. This command places focus in the channel's new-message box, from which (with default settings) the Up arrow will move to the last thread in the channel. Exploration of recent additions then just consists of using the four arrows to explore threads and their replies normally for a channel.

Note that typing Alt+Shift+Down while in a channel's message entry box will change to the next channel with unread messages (if there is one) but may say nothing. This is because focus is not moved out of the edit box; the box is simply repurposed to apply to the new channel. To avoid this issue, be sure to have focus on a message in the current channel before typing the Alt+Shift+Down command. When there are no more channels with unread messages, the command will still move focus to the input box but will not leave the current channel.

By Activity

The Ctrl+Shift+M command brings up a list of activities, sorted by date, newest first. "Activities" here are those relevant to you, the logged-in Slack user, rather than all activities across all channels. The activities included are

This view is the only one this author has found that presents reactions as entries in a list of events. The Activities view is a good final check to make sure you did not miss anything directly applying to you in Slack.

Known Issues

The following issues are known and may be encountered during use of the application with these JAWS scripts. These issues may be fixed in a future update to the scripts or to the application itself.

It may sometimes be necessary to type Ctrl+Shift+A twice to get focus into the correct list. This is assumed to be a Slack issue.

The JAWS touch cursor sometimes provides more information than the PC cursor, especially in Settings pages where it can find hints for fields, group headings, etc.

Braille support is not well tested and is likely incomplete.

Revision History

This is the revision history of these scripts, most recent revision first:

Revision 129, released May 6, 2024, tested against application version 4.38.115

Warning: Do not use the BX Update method of updating to this script version. Run the installer as you would for a new script installation.

Translators: No substantive changes to the xml files except that slack_lang.xml is now named slack_dgl_lang.xml.

Revision 110, released June 11, 2022, tested against application version 4.25.2

Revision 88, released January 08, 2021, tested against application version 4.10.0

Revision 78, released September 28, 2020, tested against application versions 4.8.0 and 4.9.0

8 older revisions back through March 18, 2020

Revision 76, released September 01, 2020, tested against application version 4.8.0

Revision 59, April 21, 2020, tested against application version 4.4.2

Revision 54, April 14, 2020, tested against application version 4.4.0

Revision 50, March 29, 2020, tested against application version 4.4.0

Revision 48, March 26, 2020, tested against application version 4.4.0

Revision 40, March 21, 2020, tested against application version 4.4.0

Revision 32, March 20, 2020, tested against application version 4.3.2

Revision 27, March 18, 2020, tested against application version 4.3.2