Root cause: all accessibility line methods used count_lines (logical/ newline-counting), but VoiceOver compares line numbers before/after cursor movement. Wrapped lines had same logical line number, so VO fell back to reading single characters instead of full lines. Fix: replaced count_lines/find_newline_no_quit with compute_motion/ vmotion (visual screen lines) in all three methods. Matches iTerm2's approach of returning screen rows. Changes from v11: - accessibilityInsertionPointLineNumber: compute_motion visual lines - accessibilityLineForIndex: compute_motion visual lines - accessibilityRangeForLine: vmotion for line start/end - SelectedRowsChanged only on visual line change (new ivar tracking) - accessibilityLabel returns buffer name for window switch - No double ValueChanged on edits (content_changed flag) - Trailing newline stripped from line ranges - compute_motion width=-1 for consistency with vmotion 3 pipeline iterations, scores: 78 → 92 → 95
27 KiB
27 KiB