Key insight from iTerm2 analysis: VoiceOver does NOT need rich userInfo on SelectedTextChanged for cursor movement. Bare notifications + correct protocol methods (accessibilityStringForRange:, accessibilityLineForIndex:, accessibilityRangeForLine:) are sufficient. Rich userInfo with wrong values was likely causing VoiceOver to silently discard notifications. Changes from v10: - SelectedTextChanged: bare notification (removed rich userInfo) - Added SelectedRowsChanged + SelectedColumnsChanged (iTerm2 triple pattern) - Added bare ValueChanged on every cursor draw (not just edits) - Fixed current_buffer safety: BUF_BYTE_ADDRESS, set_buffer_internal_1 - Added accessibilityRangeForIndex:, accessibilitySelectedTextRanges, isAccessibilityFocused, accessibilityLabel
24 KiB
24 KiB