Github repository:
https://github.com/pmartz/vo-ignore.git
I vibe-coded a small Swift command-line utility that sets VoiceOver’s Mouse Pointer setting to “Ignores VoiceOver Cursor,” regardless of its current state.
Here's exactly what it does: It uses the private ScreenReaderCore framework and SCRCUserDefaults to set SCRConfigurationCursorTrackingMToVO and SCRConfigurationCursorTrackingVOToM to false, synchronizes the settings, then announces the change in your VoiceOver voice using AV Foundation.
You'll need the XCode command line tools. Pull or download the source code repository and build it with the Makefile. The project includes an AppleScript launcher so you can tie the utility to a keyboard shortcut. I used Option+I.
This code works for me on Golden Gate. But it relies on a private Apple framework, so there’s no guarantee Apple won’t change or break it in a future macOS release.
Comments
Thanks
It’s so interesting to see developers accomplishing what Apple itself should have done. Clearly, we need to take matters into our own hands to address long-standing issues with VoiceOver.
Paul, I suggest sharing this solution with Apple’s Accessibility team—it might help show them how this issue can finally be resolved.
Thanks again!
Thanks
Thanks, Paul.
You just switched on a little lightbulb in my brain and I got Claude to write a couple of little apple scripts for me so I can hear indentation for a single line and make sense of long pascal case words. That was stupidly easy. For some reason I hadn't thought about doing that before. Now to think about what else might be possible.
AI as accessibility tool
AI is an accessibility breakthrough. Making sense of logging output, coding Objective-C namespace probes, using nm at the command line, This could've taken me weeks; AI does it in seconds.
Still, it takes some guidance. After working on this for a day and a half, ChatGPT was running out of options. Finally, I told it that VO was developed around 2005, and any solution would have to use APIs contemporary to that era. A few exchanges later, we had working code.
Agree
I think AI is amazing for this sort of thing. I would never in a million years be motivated enough to try to learn Apple Script - I have zero interest in it. But to just be able to summon up some magic genie and have it handle all that for me is pretty liberating. There are so many things that used to cause me so much frustration that I can basically ask Claude to take that away. Using my Mac has become so much less annoying since I started doing that. In an ideal world, Apple would just make using Safari and other apps tolerable, but as a plan B it's pretty good.
On the downside, it's probably going to take my job, it's making us all into idiots, tech is now too expensive for any of us to afford and it'll probably destroy the world and everything in it. But you can't have everything. :)
Github
Quick update. This is now on github under the MIT license.
Repository:
https://github.com/pmartz/vo-ignore.git
If anyone tries it on a non-Golden Gate MacOS release, I'd be interested to hear whether it works there.
Updated
The current Github repository includes some solid changes.
I added a real Makefile and install targets.
I also replaced use of say() with a call into AV Foundation so that the voice will match VoiceOver.
Changes in Golden Gate release
The vo-ignore utility still works. However, related VoiceOver functionality has changed significantly in Golden Gate.
VO+Shift+F3: "Toggle cursor tracking on or off." The Golden Gate VO+H Commands menu incorrectly lists the shortcut as VO+Shift+Fn. The beta had this correct as VO+Shift+F3. The shortcut was absent in Tahoe and earlier.
This key formerly toggled between mouse pointer Moves VO Cursor and Ignores VO Cursor. Under Golden Gate, executing the shortcut announces "Cursor tracking on" and "Cursor tracking off." That's an improvement, as it didn't announce anything prior to the release. However, it does not change the mouse pointer behavior. So it's safe to assume that whatever cursor it's controlling is no longer the mouse pointer. The bottom line: If your mouse pointer incorrectly flips to Follows, this keyboard shortcut is no longer a workaround.
The behavior of Follows Mouse Pointer has changed. When this setting is active, the mouse pointer follows the VoiceOver cursor as expected, with one significant difference. It no longer seems to follow the VoiceOver cursor to the menubar. For example: Set mouse pointer to Follows; press VO+F5 to hear where the mouse pointer is located on the desktop; press VO+M to jump to the menubar; press VO+F5 again and observe that the mouse pointer location hasn't changed.
I'm not sure whether I should be concerned about this change or not. Anyone who is already used to having mouse pointer set to Follows is going to be surprised at the change in behavior, as menus will no longer open automatically. And if the setting ever incorrectly flips from Ignores to Follows, I'm unsure how I would ever know it happened, as this change removes the primary symptom.
Importantly, mouse pointer set to Follows still changes the user interface subtly. For example: in Google Drive, open the context menu and arrow down. Observe that submenus for Open With and Share open automatically. This behavior doesn't occur when Mouse Pointer is set to Ignores.
Perhaps the most worrisome thing is that we still have no idea whether the underlying issue was fixed. All we know is that someone tinkered with the code. Let's all hope they found the actual issue and silently fixed it. Personally, I'm grateful they didn't introduce any changes that would break vo-ignore.
Re: Changes in Golden Gate release
When you first mentioned this problem in Golden Gate, I think you said that it became impossible to open up VO Utility and fix the problem. Is this still the case? If so your script might be even more important.
Is VO+Shift+F3 now handling the text cursor rather than the mouse pointer?
I think I'm glad that the menu problem is fixed, but then as you suggest it might result in various other subtle issues that are harder to pin-point. At least with the menu thing it was pretty obvious very quickly that it had happened.
Re: Changes in Golden Gate release
You recall correctly. In early Golden Gate, with mouse pointer set to Follows, you could not navigate a menu with normal up and down arrow keys. I think Tyler found a workaround, that you could navigate them with VO+arrow keys.
Regardless, they fixed that issue in a subsequent beta. It's not a problem in release Golden Gate.