diff --git a/src/vs/workbench/contrib/chat/browser/actions/chatAccessibilityHelp.ts b/src/vs/workbench/contrib/chat/browser/actions/chatAccessibilityHelp.ts index e296b155dd3..af8b0111506 100644 --- a/src/vs/workbench/contrib/chat/browser/actions/chatAccessibilityHelp.ts +++ b/src/vs/workbench/contrib/chat/browser/actions/chatAccessibilityHelp.ts @@ -13,6 +13,7 @@ import { IChatWidgetService } from 'vs/workbench/contrib/chat/browser/chat'; import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; import { EditMode } from 'vs/workbench/contrib/inlineChat/common/inlineChat'; import { IAccessibleViewService } from 'vs/workbench/contrib/accessibility/browser/accessibleView'; +import { InteractiveEditorController } from 'vs/workbench/contrib/inlineChat/browser/inlineChatController'; export function getAccessibilityHelpText(accessor: ServicesAccessor, type: 'chat' | 'editor', currentInput?: string): string { const keybindingService = accessor.get(IKeybindingService); @@ -74,16 +75,18 @@ export async function runAccessibilityHelpAction(accessor: ServicesAccessor, edi inputEditor.getSupportedActions(); const helpText = getAccessibilityHelpText(accessor, type, type === 'editor' ? cachedInput : undefined); const provider = accessibleViewService.registerProvider({ - id: 'chat', + id: type, provideContent: () => helpText, onClose: () => { - if (cachedPosition) { + if (type === 'chat' && cachedPosition) { inputEditor.setPosition(cachedPosition); inputEditor.focus(); + } else if (type === 'editor') { + InteractiveEditorController.get(editor)?.focus(); } provider.dispose(); }, - options: { ariaLabel: localize('chat-help-label', "Chat accessibility help") } + options: { ariaLabel: type === 'chat' ? localize('chat-help-label', "Chat accessibility help") : localize('interactive-editor-label', "Editor chat accessibility help") } }); - accessibleViewService.show('chat'); + accessibleViewService.show(type); } diff --git a/src/vs/workbench/contrib/inlineChat/browser/inlineChat.contribution.ts b/src/vs/workbench/contrib/inlineChat/browser/inlineChat.contribution.ts index 597484479f9..b5c78ef378c 100644 --- a/src/vs/workbench/contrib/inlineChat/browser/inlineChat.contribution.ts +++ b/src/vs/workbench/contrib/inlineChat/browser/inlineChat.contribution.ts @@ -7,7 +7,7 @@ import { registerAction2 } from 'vs/platform/actions/common/actions'; import { EditorContributionInstantiation, registerEditorContribution } from 'vs/editor/browser/editorExtensions'; import { InteractiveEditorController } from 'vs/workbench/contrib/inlineChat/browser/inlineChatController'; import * as interactiveEditorActions from 'vs/workbench/contrib/inlineChat/browser/inlineChatActions'; -import { IInteractiveEditorService, INTERACTIVE_EDITOR_ID } from 'vs/workbench/contrib/inlineChat/common/inlineChat'; +import { IInteractiveEditorService, INTERACTIVE_EDITOR_ACCESSIBILITY_HELP_ID, INTERACTIVE_EDITOR_ID } from 'vs/workbench/contrib/inlineChat/common/inlineChat'; import { InstantiationType, registerSingleton } from 'vs/platform/instantiation/common/extensions'; import { InteractiveEditorServiceImpl } from 'vs/workbench/contrib/inlineChat/common/inlineChatServiceImpl'; import { IInteractiveEditorSessionService, InteractiveEditorSessionService } from 'vs/workbench/contrib/inlineChat/browser/inlineChatSession'; @@ -20,6 +20,7 @@ registerSingleton(IInteractiveEditorService, InteractiveEditorServiceImpl, Insta registerSingleton(IInteractiveEditorSessionService, InteractiveEditorSessionService, InstantiationType.Delayed); registerEditorContribution(INTERACTIVE_EDITOR_ID, InteractiveEditorController, EditorContributionInstantiation.Eager); // EAGER because of notebook dispose/create of editors +registerEditorContribution(INTERACTIVE_EDITOR_ACCESSIBILITY_HELP_ID, interactiveEditorActions.InlineAccessibilityHelpContribution, EditorContributionInstantiation.Eventually); registerAction2(interactiveEditorActions.StartSessionAction); registerAction2(interactiveEditorActions.UnstashSessionAction); @@ -38,7 +39,6 @@ registerAction2(interactiveEditorActions.NextFromHistory); registerAction2(interactiveEditorActions.ViewInChatAction); registerAction2(interactiveEditorActions.ExpandMessageAction); registerAction2(interactiveEditorActions.ContractMessageAction); -registerAction2(interactiveEditorActions.AccessibilityHelpEditorAction); registerAction2(interactiveEditorActions.ToggleInlineDiff); registerAction2(interactiveEditorActions.FeebackHelpfulCommand); diff --git a/src/vs/workbench/contrib/inlineChat/browser/inlineChatActions.ts b/src/vs/workbench/contrib/inlineChat/browser/inlineChatActions.ts index 2ccdcc6490e..85d4291f6a0 100644 --- a/src/vs/workbench/contrib/inlineChat/browser/inlineChatActions.ts +++ b/src/vs/workbench/contrib/inlineChat/browser/inlineChatActions.ts @@ -26,6 +26,8 @@ import { fromNow } from 'vs/base/common/date'; import { IInteractiveEditorSessionService, Recording } from 'vs/workbench/contrib/inlineChat/browser/inlineChatSession'; import { runAccessibilityHelpAction } from 'vs/workbench/contrib/chat/browser/actions/chatAccessibilityHelp'; import { CONTEXT_ACCESSIBILITY_MODE_ENABLED } from 'vs/platform/accessibility/common/accessibility'; +import { AccessibilityHelpAction } from 'vs/workbench/contrib/accessibility/browser/accessibilityContribution'; +import { Disposable } from 'vs/base/common/lifecycle'; export class StartSessionAction extends EditorAction2 { @@ -589,20 +591,15 @@ export class ContractMessageAction extends AbstractInteractiveEditorAction { } } -export class AccessibilityHelpEditorAction extends EditorAction2 { +export class InlineAccessibilityHelpContribution extends Disposable { constructor() { - super({ - id: 'interactiveEditor.accessibilityHelp', - title: localize('actions.interactiveSession.accessibiltyHelpEditor', "Interactive Session Editor Accessibility Help"), - category: AbstractInteractiveEditorAction.category, - keybinding: { - when: CTX_INTERACTIVE_EDITOR_FOCUSED, - primary: KeyMod.Alt | KeyCode.F1, - weight: KeybindingWeight.EditorContrib + super(); + this._register(AccessibilityHelpAction.addImplementation(106, 'editor', async accessor => { + const codeEditor = accessor.get(ICodeEditorService).getActiveCodeEditor() || accessor.get(ICodeEditorService).getFocusedCodeEditor(); + if (!codeEditor) { + return; } - }); - } - async runEditorCommand(accessor: ServicesAccessor, editor: ICodeEditor): Promise { - runAccessibilityHelpAction(accessor, editor, 'editor'); + runAccessibilityHelpAction(accessor, codeEditor, 'editor'); + }, CTX_INTERACTIVE_EDITOR_FOCUSED)); } } diff --git a/src/vs/workbench/contrib/inlineChat/common/inlineChat.ts b/src/vs/workbench/contrib/inlineChat/common/inlineChat.ts index e43266f00c6..005c1c738d9 100644 --- a/src/vs/workbench/contrib/inlineChat/common/inlineChat.ts +++ b/src/vs/workbench/contrib/inlineChat/common/inlineChat.ts @@ -99,6 +99,7 @@ export interface IInteractiveEditorService { } export const INTERACTIVE_EDITOR_ID = 'interactiveEditor'; +export const INTERACTIVE_EDITOR_ACCESSIBILITY_HELP_ID = 'interactiveEditorAccessiblityHelp'; export const CTX_INTERACTIVE_EDITOR_HAS_PROVIDER = new RawContextKey('interactiveEditorHasProvider', false, localize('interactiveEditorHasProvider', "Whether a provider for interactive editors exists")); export const CTX_INTERACTIVE_EDITOR_VISIBLE = new RawContextKey('interactiveEditorVisible', false, localize('interactiveEditorVisible', "Whether the interactive editor input is visible"));