Skip to content

Commit f5658f0

Browse files
committed
scm.acceptInput command
fixes microsoft#42862
1 parent 18f7271 commit f5658f0

2 files changed

Lines changed: 35 additions & 21 deletions

File tree

src/vs/workbench/parts/scm/electron-browser/scm.contribution.ts

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,11 @@ import { SCMViewlet } from 'vs/workbench/parts/scm/electron-browser/scmViewlet';
2020
import { LifecyclePhase } from 'vs/platform/lifecycle/common/lifecycle';
2121
import { IConfigurationRegistry, Extensions as ConfigurationExtensions } from 'vs/platform/configuration/common/configurationRegistry';
2222
import { IEditorGroupsService } from 'vs/workbench/services/group/common/editorGroupsService';
23+
import { ContextKeyDefinedExpr, IContextKeyService } from 'vs/platform/contextkey/common/contextkey';
24+
import { ISCMRepository } from 'vs/workbench/services/scm/common/scm';
25+
import { TPromise } from 'vs/base/common/winjs.base';
26+
import { ICommandService } from 'vs/platform/commands/common/commands';
27+
import { KeybindingsRegistry, KeybindingWeight } from 'vs/platform/keybinding/common/keybindingsRegistry';
2328

2429
class OpenSCMViewletAction extends ToggleViewletAction {
2530

@@ -99,3 +104,26 @@ MenuRegistry.appendMenuItem(MenuId.MenubarViewMenu, {
99104
},
100105
order: 3
101106
});
107+
108+
KeybindingsRegistry.registerCommandAndKeybindingRule({
109+
id: 'scm.acceptInput',
110+
description: { description: localize('scm accept', "SCM: Accept Input"), args: [] },
111+
weight: KeybindingWeight.WorkbenchContrib,
112+
when: new ContextKeyDefinedExpr('scmRepository'),
113+
primary: KeyMod.CtrlCmd | KeyCode.Enter,
114+
handler: accessor => {
115+
const contextKeyService = accessor.get(IContextKeyService);
116+
const context = contextKeyService.getContext(document.activeElement);
117+
const repository = context.getValue<ISCMRepository>('scmRepository');
118+
119+
if (!repository || !repository.provider.acceptInputCommand) {
120+
return TPromise.as(null);
121+
}
122+
123+
const id = repository.provider.acceptInputCommand.id;
124+
const args = repository.provider.acceptInputCommand.arguments;
125+
126+
const commandService = accessor.get(ICommandService);
127+
return commandService.executeCommand(id, ...args);
128+
}
129+
});

src/vs/workbench/parts/scm/electron-browser/scmViewlet.ts

Lines changed: 7 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -39,12 +39,9 @@ import { IExtensionService } from 'vs/workbench/services/extensions/common/exten
3939
import { IWorkspaceContextService } from 'vs/platform/workspace/common/workspace';
4040
import { IStorageService } from 'vs/platform/storage/common/storage';
4141
import { InputBox, MessageType } from 'vs/base/browser/ui/inputbox/inputBox';
42-
import { StandardKeyboardEvent } from 'vs/base/browser/keyboardEvent';
43-
import { KeyMod, KeyCode } from 'vs/base/common/keyCodes';
4442
import { Command } from 'vs/editor/common/modes';
4543
import { renderOcticons } from 'vs/base/browser/ui/octiconLabel/octiconLabel';
4644
import { StandardMouseEvent } from 'vs/base/browser/mouseEvent';
47-
import * as platform from 'vs/base/common/platform';
4845
import { format } from 'vs/base/common/strings';
4946
import { ISpliceable, ISequence, ISplice } from 'vs/base/common/sequence';
5047
import { firstIndex } from 'vs/base/common/arrays';
@@ -748,6 +745,7 @@ export class RepositoryPanel extends ViewletPanel {
748745
private list: List<ISCMResourceGroup | ISCMResource>;
749746
private menus: SCMMenus;
750747
private visibilityDisposables: IDisposable[] = [];
748+
protected contextKeyService: IContextKeyService;
751749

752750
constructor(
753751
id: string,
@@ -762,12 +760,15 @@ export class RepositoryPanel extends ViewletPanel {
762760
@IEditorService protected editorService: IEditorService,
763761
@IInstantiationService protected instantiationService: IInstantiationService,
764762
@IConfigurationService protected configurationService: IConfigurationService,
765-
@IContextKeyService protected contextKeyService: IContextKeyService,
763+
@IContextKeyService contextKeyService: IContextKeyService,
766764
@IMenuService protected menuService: IMenuService
767765
) {
768766
super({ id, title: repository.provider.label }, keybindingService, contextMenuService, configurationService);
769767
this.menus = instantiationService.createInstance(SCMMenus, repository.provider);
770768
this.menus.onDidChangeTitle(this._onDidChangeTitleArea.fire, this._onDidChangeTitleArea, this.disposables);
769+
770+
this.contextKeyService = contextKeyService.createScoped(this.element);
771+
this.contextKeyService.createKey('scmRepository', repository);
771772
}
772773

773774
render(): void {
@@ -819,7 +820,7 @@ export class RepositoryPanel extends ViewletPanel {
819820
this.inputBoxContainer = append(container, $('.scm-editor'));
820821

821822
const updatePlaceholder = () => {
822-
const placeholder = format(this.repository.input.placeholder, platform.isMacintosh ? 'Cmd+Enter' : 'Ctrl+Enter');
823+
const placeholder = format(this.repository.input.placeholder, this.keybindingService.lookupKeybinding('scm.acceptInput').getLabel());
823824
this.inputBox.setPlaceHolder(placeholder);
824825
};
825826

@@ -854,14 +855,10 @@ export class RepositoryPanel extends ViewletPanel {
854855

855856
updatePlaceholder();
856857
this.repository.input.onDidChangePlaceholder(updatePlaceholder, null, this.disposables);
858+
this.keybindingService.onDidUpdateKeybindings(updatePlaceholder, null, this.disposables);
857859

858860
this.disposables.push(this.inputBox.onDidHeightChange(() => this.layoutBody()));
859861

860-
chain(domEvent(this.inputBox.inputElement, 'keydown'))
861-
.map(e => new StandardKeyboardEvent(e))
862-
.filter(e => e.equals(KeyMod.CtrlCmd | KeyCode.Enter) || e.equals(KeyMod.CtrlCmd | KeyCode.KEY_S))
863-
.on(this.onDidAcceptInput, this, this.disposables);
864-
865862
if (this.repository.provider.onDidChangeCommitTemplate) {
866863
this.repository.provider.onDidChangeCommitTemplate(this.updateInputBox, this, this.disposables);
867864
}
@@ -996,17 +993,6 @@ export class RepositoryPanel extends ViewletPanel {
996993
this.inputBox.value = this.repository.provider.commitTemplate;
997994
}
998995

999-
private onDidAcceptInput(): void {
1000-
if (!this.repository.provider.acceptInputCommand) {
1001-
return;
1002-
}
1003-
1004-
const id = this.repository.provider.acceptInputCommand.id;
1005-
const args = this.repository.provider.acceptInputCommand.arguments;
1006-
1007-
this.commandService.executeCommand(id, ...args);
1008-
}
1009-
1010996
dispose(): void {
1011997
this.visibilityDisposables = dispose(this.visibilityDisposables);
1012998
super.dispose();

0 commit comments

Comments
 (0)