diff --git a/extensions/git/src/repository.ts b/extensions/git/src/repository.ts index a0ebb292a51..0c7ab9fa573 100644 --- a/extensions/git/src/repository.ts +++ b/extensions/git/src/repository.ts @@ -385,6 +385,7 @@ export class Repository implements Disposable { const label = `${path.basename(repository.root)} (Git)`; this._sourceControl = scm.createSourceControl('git', label); + this._sourceControl.inputBox.placeholder = localize('commitMessage', "Message (press {0} to commit)", process.platform === 'darwin' ? 'Cmd+Enter' : 'Ctrl+Enter'); this._sourceControl.acceptInputCommand = { command: 'git.commitWithInput', title: localize('commit', "Commit"), arguments: [this._sourceControl] }; this._sourceControl.quickDiffProvider = this; this.disposables.push(this._sourceControl); diff --git a/src/vs/vscode.d.ts b/src/vs/vscode.d.ts index a7708f6555b..6994c453324 100644 --- a/src/vs/vscode.d.ts +++ b/src/vs/vscode.d.ts @@ -5326,6 +5326,11 @@ declare module 'vscode' { * Setter and getter for the contents of the input box. */ value: string; + + /** + * A string to show as place holder in the input box to guide the user. + */ + placeholder: string; } interface QuickDiffProvider { diff --git a/src/vs/workbench/api/electron-browser/mainThreadSCM.ts b/src/vs/workbench/api/electron-browser/mainThreadSCM.ts index 46b56f0e896..a4ed7afc043 100644 --- a/src/vs/workbench/api/electron-browser/mainThreadSCM.ts +++ b/src/vs/workbench/api/electron-browser/mainThreadSCM.ts @@ -343,4 +343,14 @@ export class MainThreadSCM implements MainThreadSCMShape { repository.input.value = value; } + + $setInputBoxPlaceholder(sourceControlHandle: number, placeholder: string): void { + const repository = this._repositories[sourceControlHandle]; + + if (!repository) { + return; + } + + repository.input.placeholder = placeholder; + } } diff --git a/src/vs/workbench/api/node/extHost.protocol.ts b/src/vs/workbench/api/node/extHost.protocol.ts index 3291bc7ef5f..f4c31081d8f 100644 --- a/src/vs/workbench/api/node/extHost.protocol.ts +++ b/src/vs/workbench/api/node/extHost.protocol.ts @@ -348,6 +348,7 @@ export interface MainThreadSCMShape extends IDisposable { $unregisterGroup(sourceControlHandle: number, handle: number): void; $setInputBoxValue(sourceControlHandle: number, value: string): void; + $setInputBoxPlaceholder(sourceControlHandle: number, placeholder: string): void; } export type DebugSessionUUID = string; diff --git a/src/vs/workbench/api/node/extHostSCM.ts b/src/vs/workbench/api/node/extHostSCM.ts index 60b4aee43f9..cafa3986f1c 100644 --- a/src/vs/workbench/api/node/extHostSCM.ts +++ b/src/vs/workbench/api/node/extHostSCM.ts @@ -43,6 +43,17 @@ export class ExtHostSCMInputBox { return this._onDidChange.event; } + private _placeholder: string = ''; + + get placeholder(): string { + return this._placeholder; + } + + set placeholder(placeholder: string) { + this._proxy.$setInputBoxPlaceholder(this._sourceControlHandle, placeholder); + this._placeholder = placeholder; + } + constructor(private _proxy: MainThreadSCMShape, private _sourceControlHandle: number) { // noop } diff --git a/src/vs/workbench/parts/scm/electron-browser/scmViewlet.ts b/src/vs/workbench/parts/scm/electron-browser/scmViewlet.ts index b5123eca628..c23e25a0802 100644 --- a/src/vs/workbench/parts/scm/electron-browser/scmViewlet.ts +++ b/src/vs/workbench/parts/scm/electron-browser/scmViewlet.ts @@ -48,7 +48,6 @@ import { IViewletService } from 'vs/workbench/services/viewlet/browser/viewlet'; import { ViewSizing } from 'vs/base/browser/ui/splitview/splitview'; import { IExtensionsViewlet, VIEWLET_ID as EXTENSIONS_VIEWLET_ID } from 'vs/workbench/parts/extensions/common/extensions'; import { InputBox } from 'vs/base/browser/ui/inputbox/inputBox'; -import * as platform from 'vs/base/common/platform'; import { domEvent } from 'vs/base/browser/event'; import { StandardKeyboardEvent } from 'vs/base/browser/keyboardEvent'; import { KeyMod, KeyCode } from 'vs/base/common/keyCodes'; @@ -307,15 +306,16 @@ class SourceControlView extends CollapsibleView { this.inputBoxContainer = append(container, $('.scm-editor')); this.inputBox = new InputBox(this.inputBoxContainer, this.contextViewService, { - placeholder: localize('commitMessage', "Message (press {0} to commit)", platform.isMacintosh ? 'Cmd+Enter' : 'Ctrl+Enter'), flexibleHeight: true }); this.disposables.push(attachInputBoxStyler(this.inputBox, this.themeService)); this.disposables.push(this.inputBox); this.inputBox.value = this.repository.input.value; + this.inputBox.setPlaceHolder(this.repository.input.placeholder); this.inputBox.onDidChange(value => this.repository.input.value = value, null, this.disposables); this.repository.input.onDidChange(value => this.inputBox.value = value, null, this.disposables); + this.repository.input.onDidChangePlaceholder(placeholder => this.inputBox.setPlaceHolder(placeholder), null, this.disposables); this.disposables.push(this.inputBox.onDidHeightChange(() => this.layoutBody())); chain(domEvent(this.inputBox.inputElement, 'keydown')) diff --git a/src/vs/workbench/services/scm/common/scm.ts b/src/vs/workbench/services/scm/common/scm.ts index 902c80182bd..166d540cd5b 100644 --- a/src/vs/workbench/services/scm/common/scm.ts +++ b/src/vs/workbench/services/scm/common/scm.ts @@ -58,6 +58,8 @@ export interface ISCMProvider extends IDisposable { export interface ISCMInput { value: string; readonly onDidChange: Event; + placeholder: string; + readonly onDidChangePlaceholder: Event; } export interface ISCMRepository extends IDisposable { diff --git a/src/vs/workbench/services/scm/common/scmService.ts b/src/vs/workbench/services/scm/common/scmService.ts index d88e80f3f4e..139a988b770 100644 --- a/src/vs/workbench/services/scm/common/scmService.ts +++ b/src/vs/workbench/services/scm/common/scmService.ts @@ -24,6 +24,20 @@ class SCMInput implements ISCMInput { private _onDidChange = new Emitter(); get onDidChange(): Event { return this._onDidChange.event; } + + private _placeholder = ''; + + get placeholder(): string { + return this._placeholder; + } + + set placeholder(placeholder: string) { + this._placeholder = placeholder; + this._onDidChangePlaceholder.fire(placeholder); + } + + private _onDidChangePlaceholder = new Emitter(); + get onDidChangePlaceholder(): Event { return this._onDidChangePlaceholder.event; } } class SCMRepository implements ISCMRepository {