Skip to content

Commit 1a38682

Browse files
authored
voice - support any focused code editor (including notebooks) (microsoft#202733)
1 parent 272d8f0 commit 1a38682

File tree

2 files changed

+11
-9
lines changed

2 files changed

+11
-9
lines changed

src/vs/workbench/contrib/chat/browser/contrib/chatInputEditorContrib.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -662,8 +662,8 @@ class ChatTokenDeleter extends Disposable {
662662
const change = e.changes[0];
663663

664664
// If this was a simple delete, try to find out whether it was inside a token
665-
if (!change.text) {
666-
parser.parseChatRequest(this.widget.viewModel!.sessionId, previousInputValue).then(previousParsedValue => {
665+
if (!change.text && this.widget.viewModel) {
666+
parser.parseChatRequest(this.widget.viewModel.sessionId, previousInputValue).then(previousParsedValue => {
667667
// For dynamic variables, this has to happen in ChatDynamicVariableModel with the other bookkeeping
668668
const deletableTokens = previousParsedValue.parts.filter(p => p instanceof ChatRequestAgentPart || p instanceof ChatRequestAgentSubcommandPart || p instanceof ChatRequestSlashCommandPart || p instanceof ChatRequestVariablePart);
669669
deletableTokens.forEach(token => {

src/vs/workbench/contrib/chat/electron-sandbox/actions/voiceChatActions.ts

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,6 @@ import { IChatService } from 'vs/workbench/contrib/chat/common/chatService';
2121
import { CTX_INLINE_CHAT_HAS_ACTIVE_REQUEST, MENU_INLINE_CHAT_INPUT } from 'vs/workbench/contrib/inlineChat/common/inlineChat';
2222
import { CONTEXT_CHAT_REQUEST_IN_PROGRESS, CONTEXT_PROVIDER_EXISTS } from 'vs/workbench/contrib/chat/common/chatContextKeys';
2323
import { InlineChatController } from 'vs/workbench/contrib/inlineChat/browser/inlineChatController';
24-
import { IEditorService } from 'vs/workbench/services/editor/common/editorService';
25-
import { getCodeEditor } from 'vs/editor/browser/editorBrowser';
2624
import { CommandsRegistry, ICommandService } from 'vs/platform/commands/common/commands';
2725
import { ActiveEditorContext } from 'vs/workbench/common/contextkeys';
2826
import { IViewsService } from 'vs/workbench/services/views/common/viewsService';
@@ -46,6 +44,7 @@ import { Registry } from 'vs/platform/registry/common/platform';
4644
import { IConfigurationRegistry, Extensions } from 'vs/platform/configuration/common/configurationRegistry';
4745
import { IStatusbarEntry, IStatusbarEntryAccessor, IStatusbarService, StatusbarAlignment } from 'vs/workbench/services/statusbar/browser/statusbar';
4846
import { IEditorGroupsService } from 'vs/workbench/services/editor/common/editorGroupsService';
47+
import { ICodeEditorService } from 'vs/editor/browser/services/codeEditorService';
4948

5049
const CONTEXT_VOICE_CHAT_GETTING_READY = new RawContextKey<boolean>('voiceChatGettingReady', false, { type: 'boolean', description: localize('voiceChatGettingReady', "True when getting ready for receiving voice input from the microphone for voice chat.") });
5150
const CONTEXT_VOICE_CHAT_IN_PROGRESS = new RawContextKey<boolean>('voiceChatInProgress', false, { type: 'boolean', description: localize('voiceChatInProgress', "True when voice recording from microphone is in progress for voice chat.") });
@@ -84,7 +83,7 @@ class VoiceChatSessionControllerFactory {
8483
const chatService = accessor.get(IChatService);
8584
const viewsService = accessor.get(IViewsService);
8685
const chatContributionService = accessor.get(IChatContributionService);
87-
const editorService = accessor.get(IEditorService);
86+
const codeEditorService = accessor.get(ICodeEditorService);
8887
const quickChatService = accessor.get(IQuickChatService);
8988
const layoutService = accessor.get(IWorkbenchLayoutService);
9089

@@ -114,7 +113,7 @@ class VoiceChatSessionControllerFactory {
114113
}
115114

116115
// Try with the inline chat
117-
const activeCodeEditor = getCodeEditor(editorService.activeTextEditorControl);
116+
const activeCodeEditor = codeEditorService.getFocusedCodeEditor();
118117
if (activeCodeEditor) {
119118
const inlineChat = InlineChatController.get(activeCodeEditor);
120119
if (inlineChat?.hasFocus()) {
@@ -136,7 +135,7 @@ class VoiceChatSessionControllerFactory {
136135

137136
// Inline Chat
138137
if (context === 'inline') {
139-
const activeCodeEditor = getCodeEditor(editorService.activeTextEditorControl);
138+
const activeCodeEditor = codeEditorService.getFocusedCodeEditor();
140139
if (activeCodeEditor) {
141140
const inlineChat = InlineChatController.get(activeCodeEditor);
142141
if (inlineChat) {
@@ -772,7 +771,8 @@ export class KeywordActivationContribution extends Disposable implements IWorkbe
772771
@IConfigurationService private readonly configurationService: IConfigurationService,
773772
@ICommandService private readonly commandService: ICommandService,
774773
@IEditorGroupsService private readonly editorGroupService: IEditorGroupsService,
775-
@IInstantiationService instantiationService: IInstantiationService
774+
@IInstantiationService instantiationService: IInstantiationService,
775+
@ICodeEditorService private readonly codeEditorService: ICodeEditorService
776776
) {
777777
super();
778778

@@ -879,7 +879,9 @@ export class KeywordActivationContribution extends Disposable implements IWorkbe
879879
case KeywordActivationContribution.SETTINGS_VALUE.QUICK_CHAT:
880880
return QuickVoiceChatAction.ID;
881881
case KeywordActivationContribution.SETTINGS_VALUE.CHAT_IN_CONTEXT:
882-
return StartVoiceChatAction.ID;
882+
if (this.codeEditorService.getFocusedCodeEditor()) {
883+
return InlineVoiceChatAction.ID;
884+
}
883885
default:
884886
return VoiceChatInChatViewAction.ID;
885887
}

0 commit comments

Comments
 (0)