Change:
Type: <bBug</bPreviously pressing escape while "Record Keys" was active in the keybindings UI would disable key recording and leave the search query intact. Now it disables key recording and clears the search query which makes it much harder to use. I traced this regression to 1.78. I'm guessing this is an issue with keybindings. The binding for is being processed in addition to the (hard-coded?) binding to stop recording. ! VS Code version: Code - Insiders 1.79.0-insider (, 2023-05-04T22:11:08.187Z) OS version: WindowsNT x64 10.0. Modes: Sandboxed: Yes <details<summarySystem Info</summary </detailsExtensions: none<details<summaryA/B Experiments</summary</details<!-- generated by issue reporter --

Discussion:
@IKeybindingService keybindingService: IKeybindingService, ) { super(parent, options, contextViewService, instantiationService, contextKeyService, keybindingService); this._register(toDisposable(() => this.stopRecordingKeys())); this._chords = null; this._inputValue = ''; <del> this._reset(); </del> } override clear(): void { <del> this._reset(); </del> <ins> this._chords = null; </ins> super.clear(); }

} stopRecordingKeys(): void { <del> this._reset(); </del> <ins> this._chords = null; </ins> this.recordDisposables.clear(); }

this.inputBox.value = this._inputValue; } <del> private _reset() { this._chords = null; } </del> private _onKeyDown(keyboardEvent: IKeyboardEvent): void { keyboardEvent.preventDefault(); keyboardEvent.stopPropagation();

return; } if (keyboardEvent.equals(KeyCode.Escape)) { <del> if (this._chords !== null) { this.clear(); } </del> this._onEscape.fire(); return; }

this._keybindingInputWidget.startRecordingKeys(); this._register(this._keybindingInputWidget.onKeybinding(keybinding => this.onKeybinding(keybinding))); this._register(this._keybindingInputWidget.onEnter(() => this.hide())); <del> this._register(this._keybindingInputWidget.onEscape(() => this.onEscape())); this._register(this._keybindingInputWidget.onBlur(() => this.onBlur())); </del> <ins> this._register(this._keybindingInputWidget.onEscape(() => this.clearOrHide())); this._register(this._keybindingInputWidget.onBlur(() => this.onCancel())); </ins> this._outputNode = dom.append(this._domNode.domNode, dom.$('.output')); this._showExistingKeybindingsNode = dom.append(this._domNode.domNode, dom.$('.existing'));

dom.clearNode(this._outputNode); dom.clearNode(this._showExistingKeybindingsNode); const firstLabel = new KeybindingLabel(this._outputNode, OS, defaultKeybindingLabelStyles); firstLabel.set(withNullAsUndefined(this._chords?.[0])); if (this._chords) { for (let i = 1; i < this._chords.length; i++) { this._outputNode.appendChild(document.createTextNode(nls.localize('defineKeybinding.chordsTo', "chord to"))); const chordLabel = new KeybindingLabel(this._outputNode, OS, defaultKeybindingLabelStyles); chordLabel.set(this._chords[i]); } } const label = this.getUserSettingsLabel();

return label; } <del> private onBlur(): void { </del> <ins> private onCancel(): void { </ins> this._chords = null; this.hide(); } <del> private onEscape(): void { if (this._chords !== null) { </del> <ins> private clearOrHide(): void { if (this._chords === null) { this.hide(); } else { </ins> this._chords = null; <ins> this._keybindingInputWidget.clear(); </ins> dom.clearNode(this._outputNode); dom.clearNode(this._showExistingKeybindingsNode); <del> return; </del> } <del> this.hide(); </del> } private hide(): void {