[Accessibility] Content: Accessibility Help Providers for Find and Filter Experiences#292220
[Accessibility] Content: Accessibility Help Providers for Find and Filter Experiences#292220accesswatch wants to merge 3 commits intomicrosoft:mainfrom
Conversation
…d/filter experiences This PR adds comprehensive accessibility help content for all find and filter experiences in VS Code. Each file provides rich help accessible via Alt+F1. New Accessibility Help Providers: - editorFindAccessibilityHelp.ts: Editor find/replace dialog help - terminalFindAccessibilityHelp.ts: Terminal find help - webviewFindAccessibilityHelp.ts: Webview find help - outputAccessibilityHelp.ts: Output panel filter help - markersAccessibilityHelp.ts: Problems panel filter help - replAccessibilityHelp.ts: Debug console filter help - searchAccessibilityHelp.ts: Search across files help Each provider implements IAccessibleViewContent with: - Comprehensive keyboard shortcut documentation - Context-specific navigation instructions - Settings and options explanations - Platform-specific shortcuts where applicable This is PR 2 of 3 for the Accessibility Help System. Depends on: PR 1 (Foundation and Infrastructure)
There was a problem hiding this comment.
Pull request overview
This pull request adds accessibility help providers for find and filter experiences across VS Code. When users press Alt+F1 while focused in any find or filter input, they receive comprehensive, context-aware guidance about keyboard shortcuts, navigation patterns, and available options.
Changes:
- 7 new accessibility help provider files that deliver localized help content for different find/filter contexts
- Modified existing REPL accessibility help to expand its activation context
- Each provider implements IAccessibleViewImplementation and IAccessibleViewContentProvider interfaces
Reviewed changes
Copilot reviewed 7 out of 7 changed files in this pull request and generated 19 comments.
Show a summary per file
| File | Description |
|---|---|
| editorFindAccessibilityHelp.ts | New provider for editor find/replace dialog with detailed keyboard shortcuts and options |
| terminalFindAccessibilityHelp.ts | New provider for terminal find with buffer search specifics |
| webviewFindAccessibilityHelp.ts | New provider for webview find with extension webview limitations |
| searchAccessibilityHelp.ts | New provider for workspace-wide search with glob patterns and results navigation |
| outputAccessibilityHelp.ts | New provider for output panel filter with filter syntax documentation |
| markersAccessibilityHelp.ts | New provider for problems panel filter with severity and scope filtering |
| replAccessibilityHelp.ts | Updated existing provider with new filter-focused help content and expanded activation context |
| // Settings | ||
| content.push(localize('repl.settingsHeader', "Settings You Can Adjust ({0} opens Settings):", '<keybinding:workbench.action.openSettings>')); | ||
| content.push(localize('repl.settingsIntro', "These settings affect the Debug Console.")); | ||
| content.push(localize('repl.settingVerbosity', "- `accessibility.verbosity.find`: Controls whether the filter input announces the Accessibility Help hint.")); |
There was a problem hiding this comment.
The documentation references 'accessibility.verbosity.find' setting, but the provider uses AccessibilityVerbositySettingId.Debug (line 37). This is inconsistent. The documentation should reference 'accessibility.verbosity.debug' to match the actual verbosity setting key used by this provider, or if this is intended to be a filter-specific help for the REPL, the verbosity setting should be changed to AccessibilityVerbositySettingId.Find (once that enum value is added).
| content.push(localize('repl.settingVerbosity', "- `accessibility.verbosity.find`: Controls whether the filter input announces the Accessibility Help hint.")); | |
| content.push(localize('repl.settingVerbosity', "- `accessibility.verbosity.debug`: Controls whether the filter input announces the Accessibility Help hint.")); |
|
|
||
| class TerminalFindAccessibilityHelpProvider extends Disposable implements IAccessibleViewContentProvider { | ||
| readonly id = AccessibleViewProviderId.TerminalFindHelp; | ||
| readonly verbositySettingKey = AccessibilityVerbositySettingId.Find; |
There was a problem hiding this comment.
The AccessibilityVerbositySettingId enum is missing the 'Find' value used on this line. This enum is defined in 'src/vs/workbench/contrib/accessibility/browser/accessibilityConfiguration.ts'.
| readonly verbositySettingKey = AccessibilityVerbositySettingId.Find; | |
| readonly verbositySettingKey = AccessibilityVerbositySettingId.Terminal; |
| } | ||
|
|
||
| class WebviewFindAccessibilityHelpProvider extends Disposable implements IAccessibleViewContentProvider { | ||
| readonly id = AccessibleViewProviderId.WebviewFindHelp; |
There was a problem hiding this comment.
The AccessibleViewProviderId enum is missing the 'WebviewFindHelp' value. This enum is defined in 'src/vs/platform/accessibility/browser/accessibleView.ts'.
| readonly id = AccessibleViewProviderId.WebviewFindHelp; | |
| readonly id = 'webview-find-help'; |
| export class WebviewFindAccessibilityHelp implements IAccessibleViewImplementation { | ||
| readonly priority = 105; | ||
| readonly name = 'webview-find'; | ||
| readonly type = AccessibleViewType.Help; | ||
| readonly when = KEYBINDING_CONTEXT_WEBVIEW_FIND_WIDGET_FOCUSED; | ||
|
|
||
| getProvider(accessor: ServicesAccessor): AccessibleContentProvider | undefined { | ||
| return new WebviewFindAccessibilityHelpProvider(); | ||
| } | ||
| } |
There was a problem hiding this comment.
This accessibility help provider is not registered. You need to add registration code like 'AccessibleViewRegistry.register(new WebviewFindAccessibilityHelp());' in a webview contribution file.
|
|
||
| class SearchAccessibilityHelpProvider extends Disposable implements IAccessibleViewContentProvider { | ||
| readonly id = AccessibleViewProviderId.SearchHelp; | ||
| readonly verbositySettingKey = AccessibilityVerbositySettingId.Find; |
There was a problem hiding this comment.
The AccessibilityVerbositySettingId enum is missing the 'Find' value used on this line. This enum is defined in 'src/vs/workbench/contrib/accessibility/browser/accessibilityConfiguration.ts'.
| readonly verbositySettingKey = AccessibilityVerbositySettingId.Find; | |
| readonly verbositySettingKey: AccessibilityVerbositySettingId | undefined = undefined; |
| } | ||
|
|
||
| class OutputAccessibilityHelpProvider extends Disposable implements IAccessibleViewContentProvider { | ||
| readonly id = AccessibleViewProviderId.OutputFindHelp; |
There was a problem hiding this comment.
The AccessibleViewProviderId enum is missing the 'OutputFindHelp' value. This enum is defined in 'src/vs/platform/accessibility/browser/accessibleView.ts'.
| readonly id = AccessibleViewProviderId.OutputFindHelp; | |
| readonly id = AccessibleViewProviderId.Output; |
| } | ||
|
|
||
| class ProblemsAccessibilityHelpProvider extends Disposable implements IAccessibleViewContentProvider { | ||
| readonly id = AccessibleViewProviderId.ProblemsFilterHelp; |
There was a problem hiding this comment.
The AccessibleViewProviderId enum is missing the 'ProblemsFilterHelp' value. This enum is defined in 'src/vs/platform/accessibility/browser/accessibleView.ts'.
| export class ProblemsAccessibilityHelp implements IAccessibleViewImplementation { | ||
| readonly type = AccessibleViewType.Help; | ||
| readonly priority = 105; | ||
| readonly name = 'problemsFilter'; | ||
| readonly when = MarkersContextKeys.MarkerViewFilterFocusContextKey; | ||
|
|
||
| getProvider(accessor: ServicesAccessor): AccessibleContentProvider { | ||
| return new ProblemsAccessibilityHelpProvider(accessor.get(IKeybindingService)); | ||
| } | ||
| } |
There was a problem hiding this comment.
This accessibility help provider is not registered. You need to add registration code like 'AccessibleViewRegistry.register(new ProblemsAccessibilityHelp());' in a markers/problems contribution file.
|
|
||
| class OutputAccessibilityHelpProvider extends Disposable implements IAccessibleViewContentProvider { | ||
| readonly id = AccessibleViewProviderId.OutputFindHelp; | ||
| readonly verbositySettingKey = AccessibilityVerbositySettingId.Find; |
There was a problem hiding this comment.
The AccessibilityVerbositySettingId enum is missing the 'Find' value used on this line. This enum is defined in 'src/vs/workbench/contrib/accessibility/browser/accessibilityConfiguration.ts'.
| readonly verbositySettingKey = AccessibilityVerbositySettingId.Find; | |
| readonly verbositySettingKey = AccessibilityVerbositySettingId.Output; |
| export class OutputAccessibilityHelp implements IAccessibleViewImplementation { | ||
| readonly type = AccessibleViewType.Help; | ||
| readonly priority = 105; | ||
| readonly name = 'outputFilter'; | ||
| readonly when = OUTPUT_FILTER_FOCUS_CONTEXT; | ||
|
|
||
| getProvider(accessor: ServicesAccessor): AccessibleContentProvider { | ||
| return new OutputAccessibilityHelpProvider(accessor.get(IKeybindingService)); | ||
| } | ||
| } |
There was a problem hiding this comment.
This accessibility help provider is not registered. You need to add registration code like 'AccessibleViewRegistry.register(new OutputAccessibilityHelp());' in an output contribution file.
|
we're closing these in favor of a new one that merges the changes |
[Accessibility] Content: Accessibility Help Providers for Find and Filter Experiences
Executive Summary
This PR delivers the concrete accessibility help content that screen reader users will see when pressing Alt+F1 in any find or filter experience. Each provider generates localized, context-aware help text that explains keyboard shortcuts, navigation patterns, focus behavior, and available options specific to that component.
Key user benefit: Screen reader users can now press Alt+F1 in any find dialog to receive comprehensive, accurate guidance on how to use that specific find experience effectively.
Implementation insight: All help content has been validated against actual VS Code behavior. Critical focus behavior corrections were made during implementation—for example, documenting that Enter in Terminal find jumps to the previous match (opposite of Editor find).
Checklist
nls.localize()for localizationWhat This PR Includes
7 New Accessibility Help Provider Files
Each file implements
IAccessibleViewImplementationandIAccessibleViewContentProviderto deliver rich, contextual help content.1. Editor Find/Replace Help
File:
src/vs/workbench/contrib/codeEditor/browser/editorFindAccessibilityHelp.tsActivation:
CONTEXT_FIND_INPUT_FOCUSEDorCONTEXT_REPLACE_INPUT_FOCUSEDContent sections:
Enter/Shift+Enter- Next/previous matchEscape- Close and return to editorCtrl+Shift+1- Replace current matchCtrl+Alt+Enter- Replace alleditor.find.seedSearchStringFromSelectionCode architecture:
2. Terminal Find Help
File:
src/vs/workbench/contrib/terminalContrib/find/browser/terminalFindAccessibilityHelp.tsActivation: Terminal find input focused
Content sections:
Enter- Previous match (scrolls up)Shift+Enter- Next match (scrolls down)Escape- Close find, focus terminalKey implementation detail:
3. Webview Find Help
File:
src/vs/workbench/contrib/webview/browser/webviewFindAccessibilityHelp.tsActivation: Webview find input focused
Content sections:
4. Output Panel Filter Help
File:
src/vs/workbench/contrib/output/browser/outputAccessibilityHelp.tsActivation: Output panel filter input focused
Content sections:
5. Problems Panel Filter Help
File:
src/vs/workbench/contrib/markers/browser/markersAccessibilityHelp.tsActivation: Problems panel filter input focused
Content sections:
Ctrl+.on focused problem)F4/Shift+F4- Navigate between problemsEnter- Open file at problem location6. Debug Console Filter Help
File:
src/vs/workbench/contrib/debug/browser/replAccessibilityHelp.tsActivation: Debug console (REPL) filter input focused
Content sections:
Up/Downarrows)7. Search Across Files Help
File:
src/vs/workbench/contrib/search/browser/searchAccessibilityHelp.tsActivation: Search view input focused
Content sections:
F4on result moves to editorEnter- Execute searchF4- Go to next result (moves focus to editor)Shift+F4- Go to previous resultTechnical Implementation
Provider Interface
All providers implement the same interfaces:
Localization Pattern
All user-visible strings use
nls.localize():Verbosity Setting Integration
Each provider references the verbosity setting from PR 1:
Testing & Validation
Unit Tests
Each provider includes smoke tests:
Manual Validation Matrix
Screen Reader Testing
Test with:
Verify:
Dependencies
Rollout Considerations
nls.localize()and will be translatedRelease Note
Files Changed Summary
editorFindAccessibilityHelp.tsterminalFindAccessibilityHelp.tswebviewFindAccessibilityHelp.tsoutputAccessibilityHelp.tsmarkersAccessibilityHelp.tsreplAccessibilityHelp.tssearchAccessibilityHelp.ts