Accessing a Glanceable Information When You Are Visually Impaired

4 min read

Most users used to get various type of information by just look on their screen. As a VoiceOver user, it requires you to navigate the VO cursor to this item. If you are sighted user and not aware about how VO acts. Imagine that you need to move your mouse cursor to word count item by moving piece by piece until you came to the right position on the screen. It can be time-consuming and requires you to make extra steps to get to the stats.

Since VoiceOver is based on audio information, it can be more convenient to get same type information by voiceOver as well. Moreover, you can automate by AppleScript and in addition Assign keyboard shortcut, you have quick and painless way to save you a tiny amount of time.

All started when I discovered an article about built in announce clock and after that been more interested to figure out which things can be automated.

In system preferences, you have the option to announce current time on an hourly or a half-hourly basis. I, personally, chose 1 hour because each half-hour will be to often.

I trigger those commands from Keyboard Maestro or VoiceOver commander.

Here is the list of what type of information I often access with this method:

  • Time
    • macOS ships with built-in script which combines both date and time. Mostly, I need to know the time, so I created the current time version.
  • Day and date
    • I have custom format of current day name and date. I’m had no idea how to solve it by pure AppleScript. Thanks to Keyboard Maestro, I quickly created format as I wanted, passed as variable to in AppleScript and announce result with output command by VoiceOver.
  • Battery percentage
    • Since I don’t have a M1 powered MacBook, it means that I still need to check from time to time, level of battery. Or should I say, keep an eye on it.
  • System volume level
  • Word count
  • Line count
    • To get brief overview and actually length of code snippets from forums. Both word and line count processed in clipboard by Keyboard Maestro.
  • Name of the feed of selected article in NetNewsWire
    • Occasionally, I’m not interested in the article itself after hearing the first few lines. Having said that, eventually, I want quickly to know who has written this piece. Instead, to wait until VO processes the snippet, I can run this command without waiting until VoiceOver finishes reading.
  • Currently, playing song
    • This one might be one of my favourites. I don’t use it often, but such a joy to press a keyboard shortcut and immediately get both artist and song name.

Areas Which Good in Theory, but Not So Efficient in Practice

There are many more options, and it obviously depends on your workflow. Some pure AppleScripts will announce how many events you have on your schedule or how many unread messages you have in your inbox.
Sounds great, But in practice I would rather get events names them self than just pure number of events. I’m very new to AppleScript, and to script a Calendar application is not fun at all. Therefore, I have a feeling that it will be much easier to accomplish it when Shortcuts will be available on macOS later this fall.

When it comes to email, I don’t get so much email that I need to have quick access about the amount of unread messages in the inbox.

Example: Announce AppleScript

Below is an example of an AppleScript which will announce current time. This script first extracts current time via calling Command-Line Tools, saves as variable and after that VoiceOver announces it.

set theTime to (do shell script "date +\"%H:%M \" | awk '{$1=$1;print}'")
tell application "VoiceOver"
    output theTime
end tell

You may wonder why I chose VoiceOver command instead of "Say" command.
If you have experimented with AppleScript, you probably have come over "Say" command.

For example, when VoiceOver reads a piece of text or other information, and you want simultaneously to check current time. "Say" command will not overwrite VoiceOver, and instead you will end up with two soundtracks which runs at the same time. Often it is difficult to catch up both on the piece you are reading and information outputted by a script.

The advantage of standard VoiceOver voice is that it is more robotic than other voices. Therefore, you can speed up speaking rate and still understand what has been announced. Many of human voices sounds terrible if you speed up them just a little. Since this is a pure utility information, it is fine to get it quickly.

Over time, I discovered that best automations not which consisting of over a hundred lines of code. But small utilities which smoothly fits in your everyday workflow.