Making macOS VoiceOver only speak visible text in NSTextView

I have an editable NSTextView in a scrollview, and when the user selects it, I want VoiceOver to read the text visible on the screen, not start from the very top of the (off-screen) text. Does anyone have an idea how to accomplish this seemingly simple task?

If I change the role of the text view to NSAccessibilityNavigableStaticText, it will only read the visible text most of the time, but this breaks text entry. If I try to roll my own accessibility element, both the text navigation and the text entry breaks.

Alternatively, is there a way to detect when the accessibility cursor moves to the textview, so that I can interrupt the VoiceOver speech with my own announcement?

Making macOS VoiceOver only speak visible text in NSTextView
 
 
Q