Change:
With there is a new -menu which a big blue buttons. This is used in the merge editor and to hint to open the merge editor. This new menu should be used for: [x] [ ] ~~ / [x] [ ]
Other potential adoptors [ ] [ ] [ ] [ ]
Digging into it, I don't think can be adopted for the diff editor, as the button should be for both editors, not only the right side ( is a , but is ).

Discussion:
import * as nls from 'vs/nls'; import { RunOnceScheduler } from 'vs/base/common/async'; import { MarkdownString } from 'vs/base/common/htmlContent'; <del> import { KeyCode, KeyMod, KeyChord } from 'vs/base/common/keyCodes'; import { Disposable } from 'vs/base/common/lifecycle'; </del> <ins> import { Disposable, MutableDisposable } from 'vs/base/common/lifecycle'; </ins> import { IKeybindingService } from 'vs/platform/keybinding/common/keybinding'; import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; <del> import { ContextKeyExpr } from 'vs/platform/contextkey/common/contextkey'; </del> import { Range } from 'vs/editor/common/core/range'; <del> import { IEditorContribution } from 'vs/editor/common/editorCommon'; import { registerEditorContribution, ServicesAccessor, registerEditorCommand, EditorCommand, EditorContributionInstantiation } from 'vs/editor/browser/editorExtensions'; </del> <ins> import { registerEditorContribution, EditorContributionInstantiation } from 'vs/editor/browser/editorExtensions'; </ins> import { ICodeEditor } from 'vs/editor/browser/editorBrowser'; import { SnippetController2 } from 'vs/editor/contrib/snippet/browser/snippetController2'; import { SmartSnippetInserter } from 'vs/workbench/contrib/preferences/common/smartSnippetInserter'; import { DefineKeybindingOverlayWidget } from 'vs/workbench/contrib/preferences/browser/keybindingWidgets'; <del> import { FloatingClickWidget } from 'vs/workbench/browser/codeeditor'; </del> import { parseTree, Node } from 'vs/base/common/json'; <del> import { EditorContextKeys } from 'vs/editor/common/editorContextKeys'; </del> import { WindowsNativeResolvedKeybinding } from 'vs/workbench/services/keybinding/common/windowsKeyboardMapper'; import { themeColorFromId } from 'vs/platform/theme/common/themeService'; import { ThemeColor } from 'vs/base/common/themables'; import { overviewRulerInfo, overviewRulerError } from 'vs/editor/common/core/editorColorRegistry'; import { IModelDeltaDecoration, ITextModel, TrackedRangeStickiness, OverviewRulerLane } from 'vs/editor/common/model'; <del> import { KeybindingWeight } from 'vs/platform/keybinding/common/keybindingsRegistry'; </del> import { KeybindingParser } from 'vs/base/common/keybindingParser'; <del> import { EditorOption } from 'vs/editor/common/config/editorOptions'; </del> import { assertIsDefined } from 'vs/base/common/types'; import { isEqual } from 'vs/base/common/resources'; import { IUserDataProfileService } from 'vs/workbench/services/userDataProfile/common/userDataProfile'; <ins> import { DEFINE_KEYBINDING_EDITOR_CONTRIB_ID, IDefineKeybindingEditorContribution } from 'vs/workbench/services/preferences/common/preferences'; </ins> <del> const NLS_LAUNCH_MESSAGE = nls.localize('defineKeybinding.start', "Define Keybinding"); </del> const NLS_KB_LAYOUT_ERROR_MESSAGE = nls.localize('defineKeybinding.kbLayoutErrorMessage', "You won't be able to produce this key combination under your current keyboard layout."); <del> export class DefineKeybindingController extends Disposable implements IEditorContribution { </del> <ins> class DefineKeybindingEditorContribution extends Disposable implements IDefineKeybindingEditorContribution { </ins> <del> public static readonly ID = 'editor.contrib.defineKeybinding'; </del> <ins> private _keybindingDecorationRenderer = this._register(new MutableDisposable<KeybindingEditorDecorationsRenderer>()); </ins> <del> static get(editor: ICodeEditor): DefineKeybindingController | null { return editor.getContribution<DefineKeybindingController>(DefineKeybindingController.ID); } private _keybindingWidgetRenderer?: KeybindingWidgetRenderer; private _keybindingDecorationRenderer?: KeybindingEditorDecorationsRenderer; </del> <ins> private readonly _defineWidget: DefineKeybindingOverlayWidget; </ins> constructor( private _editor: ICodeEditor,

) { super(); <ins> this._defineWidget = this._register(this._instantiationService.createInstance(DefineKeybindingOverlayWidget, this._editor)); </ins> this._register(this._editor.onDidChangeModel(e => this._update())); this._update(); } <del> get keybindingWidgetRenderer(): KeybindingWidgetRenderer | undefined { return this._keybindingWidgetRenderer; } override dispose(): void { this._disposeKeybindingWidgetRenderer(); this._disposeKeybindingDecorationRenderer(); super.dispose(); } </del> private _update(): void { <del> if (!isInterestingEditorModel(this._editor, this._userDataProfileService)) { this._disposeKeybindingWidgetRenderer(); this._disposeKeybindingDecorationRenderer(); return; } // Decorations are shown for the default keybindings.json **and** for the user keybindings.json this._createKeybindingDecorationRenderer(); // The button to define keybindings is shown only for the user keybindings.json if (!this._editor.getOption(EditorOption.readOnly)) { this._createKeybindingWidgetRenderer(); } else { this._disposeKeybindingWidgetRenderer(); } } private _createKeybindingWidgetRenderer(): void { if (!this._keybindingWidgetRenderer) { this._keybindingWidgetRenderer = this._instantiationService.createInstance(KeybindingWidgetRenderer, this._editor); } } private _disposeKeybindingWidgetRenderer(): void { if (this._keybindingWidgetRenderer) { this._keybindingWidgetRenderer.dispose(); this._keybindingWidgetRenderer = undefined; } } private _createKeybindingDecorationRenderer(): void { if (!this._keybindingDecorationRenderer) { this._keybindingDecorationRenderer = this._instantiationService.createInstance(KeybindingEditorDecorationsRenderer, this._editor); } } private _disposeKeybindingDecorationRenderer(): void { if (this._keybindingDecorationRenderer) { this._keybindingDecorationRenderer.dispose(); this._keybindingDecorationRenderer = undefined; } } } export class KeybindingWidgetRenderer extends Disposable { private _launchWidget: FloatingClickWidget; private _defineWidget: DefineKeybindingOverlayWidget; constructor( private _editor: ICodeEditor, @IInstantiationService private readonly _instantiationService: IInstantiationService ) { super(); this._launchWidget = this._register(this._instantiationService.createInstance(FloatingClickWidget, this._editor, NLS_LAUNCH_MESSAGE, DefineKeybindingCommand.ID)); this._register(this._launchWidget.onClick(() => this.showDefineKeybindingWidget())); this._defineWidget = this._register(this._instantiationService.createInstance(DefineKeybindingOverlayWidget, this._editor)); this._launchWidget.render(); </del> <ins> this._keybindingDecorationRenderer.value = isInterestingEditorModel(this._editor, this._userDataProfileService) // Decorations are shown for the default keybindings.json **and** for the user keybindings.json ? this._instantiationService.createInstance(KeybindingEditorDecorationsRenderer, this._editor) : undefined; </ins> } showDefineKeybindingWidget(): void { <del> this._defineWidget.start().then(keybinding => this._onAccepted(keybinding)); </del> <ins> if (isInterestingEditorModel(this._editor, this._userDataProfileService)) { this._defineWidget.start().then(keybinding => this._onAccepted(keybinding)); } </ins> } private _onAccepted(keybinding: string | null): void {

} <del> class DefineKeybindingCommand extends EditorCommand { static readonly ID = 'editor.action.defineKeybinding'; constructor() { super({ id: DefineKeybindingCommand.ID, precondition: ContextKeyExpr.and(EditorContextKeys.writable, EditorContextKeys.languageId.isEqualTo('jsonc')), kbOpts: { kbExpr: EditorContextKeys.editorTextFocus, primary: KeyChord(KeyMod.CtrlCmd | KeyCode.KeyK, KeyMod.CtrlCmd | KeyCode.KeyK), weight: KeybindingWeight.EditorContrib } }); } runEditorCommand(accessor: ServicesAccessor, editor: ICodeEditor): void { if (!isInterestingEditorModel(editor, accessor.get(IUserDataProfileService)) || editor.getOption(EditorOption.readOnly)) { return; } const controller = DefineKeybindingController.get(editor); if (controller && controller.keybindingWidgetRenderer) { controller.keybindingWidgetRenderer.showDefineKeybindingWidget(); } } } </del> function isInterestingEditorModel(editor: ICodeEditor, userDataProfileService: IUserDataProfileService): boolean { const model = editor.getModel(); if (!model) {

return isEqual(model.uri, userDataProfileService.currentProfile.keybindingsResource); } <del> registerEditorContribution(DefineKeybindingController.ID, DefineKeybindingController, EditorContributionInstantiation.AfterFirstRender); registerEditorCommand(new DefineKeybindingCommand()); </del> <ins> registerEditorContribution(DEFINE_KEYBINDING_EDITOR_CONTRIB_ID, DefineKeybindingEditorContribution, EditorContributionInstantiation.AfterFirstRender); </ins>

import { IExtensionService } from 'vs/workbench/services/extensions/common/extensions'; import { LifecyclePhase } from 'vs/workbench/services/lifecycle/common/lifecycle'; import { KeybindingsEditorInput } from 'vs/workbench/services/preferences/browser/keybindingsEditorInput'; <del> import { IPreferencesService } from 'vs/workbench/services/preferences/common/preferences'; </del> <ins> import { DEFINE_KEYBINDING_EDITOR_CONTRIB_ID, IDefineKeybindingEditorContribution, IPreferencesService } from 'vs/workbench/services/preferences/common/preferences'; </ins> import { SettingsEditor2Input } from 'vs/workbench/services/preferences/common/preferencesEditorInput'; import { IUserDataProfileService, CURRENT_PROFILE_CONTEXT } from 'vs/workbench/services/userDataProfile/common/userDataProfile'; import { IUserDataProfilesService } from 'vs/platform/userDataProfile/common/userDataProfile'; <ins> import { isCodeEditor } from 'vs/editor/browser/editorBrowser'; </ins> const SETTINGS_EDITOR_COMMAND_SEARCH = 'settings.action.search';

} private registerKeybindingEditorActions(): void { <ins> const that = this; </ins> KeybindingsRegistry.registerCommandAndKeybindingRule({ id: KEYBINDINGS_EDITOR_COMMAND_DEFINE, weight: KeybindingWeight.WorkbenchContrib,

} } }); <ins> const profileScopedActionDisposables = this._register(new DisposableStore()); const registerProfileScopedActions = () => { profileScopedActionDisposables.clear(); profileScopedActionDisposables.add(registerAction2(class DefineKeybindingAction extends Action2 { constructor() { const when = ResourceContextKey.Resource.isEqualTo(that.userDataProfileService.currentProfile.keybindingsResource.toString()); super({ id: 'editor.action.defineKeybinding', title: { value: nls.localize('defineKeybinding.start', "Define Keybinding"), original: 'Define Keybinding' }, f1: true, precondition: when, menu: { id: MenuId.EditorContent, when, } }); } async run(accessor: ServicesAccessor): Promise<void> { const codeEditor = accessor.get(IEditorService).activeTextEditorControl; if (isCodeEditor(codeEditor)) { codeEditor.getContribution<IDefineKeybindingEditorContribution>(DEFINE_KEYBINDING_EDITOR_CONTRIB_ID)?.showDefineKeybindingWidget(); } } })); }; registerProfileScopedActions(); this._register(this.userDataProfileService.onDidChangeCurrentProfile(() => registerProfileScopedActions())); </ins> } private updatePreferencesEditorMenuItem() {

import { ResolvedKeybinding } from 'vs/base/common/keybindings'; import { URI } from 'vs/base/common/uri'; import { IRange } from 'vs/editor/common/core/range'; <ins> import { IEditorContribution } from 'vs/editor/common/editorCommon'; </ins> import { ITextModel } from 'vs/editor/common/model'; import { ConfigurationTarget } from 'vs/platform/configuration/common/configuration'; import { ConfigurationScope, EditPresentationTypes, IExtensionInfo } from 'vs/platform/configuration/common/configurationRegistry';

showSimilarKeybindings(keybindingEntry: IKeybindingItemEntry): void; } <ins> export const DEFINE_KEYBINDING_EDITOR_CONTRIB_ID = 'editor.contrib.defineKeybinding'; export interface IDefineKeybindingEditorContribution extends IEditorContribution { showDefineKeybindingWidget(): void; } </ins> export const FOLDER_SETTINGS_PATH = '.vscode/settings.json'; export const DEFAULT_SETTINGS_EDITOR_SETTING = 'workbench.settings.openDefaultSettings'; export const USE_SPLIT_JSON_SETTING = 'workbench.settings.useSplitJSON';