@@ -45,6 +45,7 @@ import { KeybindingsEditorInput } from 'vs/workbench/services/preferences/common
4545import { CancellationToken } from 'vs/base/common/cancellation' ;
4646import { attachStylerCallback } from 'vs/platform/theme/common/styler' ;
4747import { IStorageService } from 'vs/platform/storage/common/storage' ;
48+ import { IPreferencesService } from 'vs/workbench/services/preferences/common/preferences' ;
4849
4950let $ = DOM . $ ;
5051
@@ -91,7 +92,8 @@ export class KeybindingsEditor extends BaseEditor implements IKeybindingsEditor
9192 @IClipboardService private clipboardService : IClipboardService ,
9293 @IInstantiationService private instantiationService : IInstantiationService ,
9394 @IEditorService private editorService : IEditorService ,
94- @IStorageService storageService : IStorageService
95+ @IStorageService storageService : IStorageService ,
96+ @IPreferencesService private preferencesService : IPreferencesService
9597 ) {
9698 super ( KeybindingsEditor . ID , telemetryService , themeService , storageService ) ;
9799 this . delayedFiltering = new Delayer < void > ( 300 ) ;
@@ -346,6 +348,8 @@ export class KeybindingsEditor extends BaseEditor implements IKeybindingsEditor
346348 } ) ) ;
347349
348350 this . actionBar . push ( [ this . recordKeysAction , this . sortByPrecedenceAction , clearInputAction ] , { label : false , icon : true } ) ;
351+
352+ this . createOpenKeybindingsElement ( this . headerContainer ) ;
349353 }
350354
351355 private createRecordingBadge ( container : HTMLElement ) : HTMLElement {
@@ -365,6 +369,24 @@ export class KeybindingsEditor extends BaseEditor implements IKeybindingsEditor
365369 return recordingBadge ;
366370 }
367371
372+ private createOpenKeybindingsElement ( parent : HTMLElement ) : void {
373+ const openKeybindingsContainer = DOM . append ( parent , $ ( '.open-keybindings-container' ) ) ;
374+ DOM . append ( openKeybindingsContainer , $ ( '' , null , localize ( 'header-message' , "For advanced customizations open and edit" ) ) ) ;
375+ const fileElement = DOM . append ( openKeybindingsContainer , $ ( '.file-name' , null , localize ( 'keybindings-file-name' , "keybindings.json" ) ) ) ;
376+ fileElement . tabIndex = 0 ;
377+ this . _register ( DOM . addDisposableListener ( fileElement , DOM . EventType . CLICK , ( ) => this . preferencesService . openGlobalKeybindingSettings ( true ) ) ) ;
378+ this . _register ( DOM . addDisposableListener ( fileElement , DOM . EventType . KEY_UP , e => {
379+ let keyboardEvent = new StandardKeyboardEvent ( e ) ;
380+ switch ( keyboardEvent . keyCode ) {
381+ case KeyCode . Enter :
382+ this . preferencesService . openGlobalKeybindingSettings ( true ) ;
383+ keyboardEvent . preventDefault ( ) ;
384+ keyboardEvent . stopPropagation ( ) ;
385+ return ;
386+ }
387+ } ) ) ;
388+ }
389+
368390 private layoutSearchWidget ( dimension : DOM . Dimension ) : void {
369391 this . searchWidget . layout ( dimension ) ;
370392 DOM . toggleClass ( this . headerContainer , 'small' , dimension . width < 400 ) ;
0 commit comments