Skip to content

Commit e24a783

Browse files
authored
Avoid tool confirm keybinding conflict with "keep edits" keybinding (microsoft#242269)
1 parent 2daf886 commit e24a783

File tree

3 files changed

+10
-2
lines changed

3 files changed

+10
-2
lines changed

src/vs/workbench/contrib/chat/browser/actions/chatToolActions.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import { KeyCode, KeyMod } from '../../../../../base/common/keyCodes.js';
77
import { ServicesAccessor } from '../../../../../editor/browser/editorExtensions.js';
88
import { localize2 } from '../../../../../nls.js';
99
import { Action2, registerAction2 } from '../../../../../platform/actions/common/actions.js';
10+
import { ContextKeyExpr } from '../../../../../platform/contextkey/common/contextkey.js';
1011
import { KeybindingWeight } from '../../../../../platform/keybinding/common/keybindingsRegistry.js';
1112
import { ChatContextKeys } from '../../common/chatContextKeys.js';
1213
import { IChatToolInvocation } from '../../common/chatService.js';
@@ -24,9 +25,10 @@ class AcceptToolConfirmation extends Action2 {
2425
f1: false,
2526
category: CHAT_CATEGORY,
2627
keybinding: {
27-
when: ChatContextKeys.inChatSession,
28+
when: ContextKeyExpr.and(ChatContextKeys.inChatSession, ChatContextKeys.Editing.hasToolConfirmation),
2829
primary: KeyMod.CtrlCmd | KeyCode.Enter,
29-
weight: KeybindingWeight.EditorContrib
30+
// Override chatEditor.action.accept
31+
weight: KeybindingWeight.WorkbenchContrib + 1,
3032
},
3133
});
3234
}

src/vs/workbench/contrib/chat/browser/chatContentParts/chatToolInvocationPart.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,10 @@ import { MarkdownRenderer } from '../../../../../editor/browser/widget/markdownR
1313
import { ILanguageService } from '../../../../../editor/common/languages/language.js';
1414
import { IModelService } from '../../../../../editor/common/services/model.js';
1515
import { localize } from '../../../../../nls.js';
16+
import { IContextKeyService } from '../../../../../platform/contextkey/common/contextkey.js';
1617
import { IInstantiationService } from '../../../../../platform/instantiation/common/instantiation.js';
1718
import { IKeybindingService } from '../../../../../platform/keybinding/common/keybinding.js';
19+
import { ChatContextKeys } from '../../common/chatContextKeys.js';
1820
import { IChatMarkdownContent, IChatProgressMessage, IChatTerminalToolInvocationData, IChatToolInvocation, IChatToolInvocationSerialized } from '../../common/chatService.js';
1921
import { IChatRendererContent } from '../../common/chatViewModel.js';
2022
import { CodeBlockModelCollection } from '../../common/codeBlockModelCollection.js';
@@ -127,6 +129,7 @@ class ChatToolInvocationSubPart extends Disposable {
127129
@IKeybindingService private readonly keybindingService: IKeybindingService,
128130
@IModelService private readonly modelService: IModelService,
129131
@ILanguageService private readonly languageService: ILanguageService,
132+
@IContextKeyService private readonly contextKeyService: IContextKeyService,
130133
) {
131134
super();
132135

@@ -291,11 +294,13 @@ class ChatToolInvocationSubPart extends Disposable {
291294
buttons
292295
));
293296

297+
ChatContextKeys.Editing.hasToolConfirmation.bindTo(this.contextKeyService).set(true);
294298
this._register(confirmWidget.onDidClick(button => {
295299
toolInvocation.confirmed.complete(button.data);
296300
}));
297301
this._register(confirmWidget.onDidChangeHeight(() => this._onDidChangeHeight.fire()));
298302
toolInvocation.confirmed.p.then(() => {
303+
ChatContextKeys.Editing.hasToolConfirmation.bindTo(this.contextKeyService).set(false);
299304
this._onNeedsRerender.fire();
300305
});
301306
return confirmWidget.domNode;

src/vs/workbench/contrib/chat/common/chatContextKeys.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,5 +84,6 @@ export namespace ChatContextKeys {
8484
hasToolsAgent: new RawContextKey<boolean>('chatHasToolsAgent', false, { type: 'boolean', description: localize('chatEditingHasToolsAgent', "True when a tools agent is registered.") }),
8585
agentMode: new RawContextKey<boolean>('chatAgentMode', false, { type: 'boolean', description: localize('chatEditingAgentMode', "True when edits is in agent mode.") }),
8686
agentModeDisallowed: new RawContextKey<boolean>('chatAgentModeDisallowed', undefined, { type: 'boolean', description: localize('chatAgentModeDisallowed', "True when agent mode is not allowed.") }), // experiment-driven disablement
87+
hasToolConfirmation: new RawContextKey<boolean>('chatHasToolConfirmation', false, { type: 'boolean', description: localize('chatEditingHasToolConfirmation', "True when a tool confirmation is present.") }),
8788
};
8889
}

0 commit comments

Comments
 (0)