client: announce new output to NVDA and VoiceOver #241
Labels
No labels
Area/ci
Area/cli
Area/client
Area/client-core
Area/daemon
Area/deps
Area/docs
Area/grid
Area/manual
Area/nix
Area/protocol
Area/pty
Area/render
Area/shaping
Area/skills
Area/transport
Area/vt
Compat/Breaking
Kind/Bug
Kind/Documentation
Kind/Enhancement
Kind/Feature
Kind/Performance
Kind/Security
Kind/Testing
perf-regression-accepted
Reviewed
Confirmed
Reviewed
Duplicate
Reviewed
Invalid
Reviewed
Won't Fix
Status
Blocked
Status
Need More Info
Status
Upstream
No milestone
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
felis-terminal/felis#241
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Follow-up to #240.
#240 exposes the terminal as an accessibility tree with text-changed and caret events. That is enough for Orca, whose terminal script keys on the AT-SPI
terminalrole and speakstext-changed:insert. It is not enough on Windows and macOS:TermControl/WPFTermControlor to conhost's window class (source/NVDAObjects/UIA/__init__.py). AccessKit mapsRole::Terminalto a UIA Document, so NVDA reads felis as a document.AXTextAreaonValueChanged; iTerm2 postsNSAccessibilityAnnouncementRequestedNotificationfor that reason.So with #240 alone, NVDA and VoiceOver users read new output through review commands.
First step
Observe NVDA, Narrator, and VoiceOver against the #240 tree before designing. The design should start from what they actually do with text-changed events, not from assumptions.
Constraints
TermControlwould give felis NVDA's terminal handling, butdocs/explanation/architecture/terminal-identity.mdkeeps impersonation a user opt-in.Candidates
UIA_LiveRegionChangedEventId, the macOS adapter an announcement, on node add; the node must not behidden). Two review rounds on a cursor-boundary state machine found holes each time: typing that wraps across a soft wrap, a prompt redrawn on the same row, the first output row after a slow Enter, rows scrolling off between flushes. The client shadow holds no scrollback, so output faster than a screenful per frame cannot be announced in full.LocalizedControlType"terminal" or an ARIA role AccessKit sets), so every AccessKit terminal benefits.