Change:
When using the command, Roberto did not know there was a configure action available. He said: It works, but in all my time using the editor, it never occurred to me to try using the tab key in that list. I always assumed it was read only. Originally posted by in
also this discoverability issue. Additionally, he found that has to be pressed twice to reach the settings gear when running .
He suggested we use checkboxes instead and combine with .
Need to assess which other actions we need to fix
I think it is possible using the quick pick api to render checkboxes for this. Let me un-assign Tyler and in case you need help with the API feel free to reach out to me and we can find the right usage.

Discussion:
private readonly isAlertEnabledCache = new Cache((event: { readonly cue: AudioCue; readonly userGesture?: boolean }) => { const settingObservable = observableFromEvent( Event.filter(this.configurationService.onDidChangeConfiguration, (e) => <del> e.affectsConfiguration(event.cue.settingsKey) </del> <ins> e.affectsConfiguration(event.cue.alertSettingsKey!) </ins> ), () => event.cue.alertSettingsKey ? this.configurationService.getValue<true | false | 'userGesture' | 'always' | 'never'>(event.cue.alertSettingsKey) : false ); return derived(reader => { <del> /** @description audio cue enabled */ </del> <ins> /** @description alert enabled */ </ins> const setting = settingObservable.read(reader); if ( !this.screenReaderAttached.read(reader)

}, JSON.stringify); public isAlertEnabled(cue: AudioCue, userGesture?: boolean): boolean { <ins> if (!cue.alertSettingsKey) { return false; } </ins> return this.isAlertEnabledCache.get({ cue, userGesture }).get() ?? false; }

'description': localize('audioCues.terminalQuickFix', "Plays a sound when terminal Quick Fixes are available."), ...audioCueFeatureBase, }, <ins> 'audioCues.terminalBell': { 'description': localize('audioCues.terminalBell', "Plays a sound when the terminal bell is ringing."), ...audioCueFeatureBase, default: 'on' }, </ins> 'audioCues.diffLineInserted': { 'description': localize('audioCues.diffLineInserted', "Plays a sound when the focus moves to an inserted line in Accessible Diff Viewer mode or to the next/previous change."), ...audioCueFeatureBase,

import { IAccessibilityService } from 'vs/platform/accessibility/common/accessibility'; import { Action2 } from 'vs/platform/actions/common/actions'; import { AudioCue, IAudioCueService } from 'vs/platform/audioCues/browser/audioCueService'; <ins> import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; </ins> import { ServicesAccessor } from 'vs/platform/instantiation/common/instantiation'; import { IQuickInputService, IQuickPickItem } from 'vs/platform/quickinput/common/quickInput'; <del> import { IPreferencesService } from 'vs/workbench/services/preferences/common/preferences'; </del> export class ShowAudioCueHelp extends Action2 { static readonly ID = 'audioCues.help';

override async run(accessor: ServicesAccessor): Promise<void> { const audioCueService = accessor.get(IAudioCueService); <del> const quickPickService = accessor.get(IQuickInputService); const preferencesService = accessor.get(IPreferencesService); </del> <ins> const quickInputService = accessor.get(IQuickInputService); const configurationService = accessor.get(IConfigurationService); </ins> const accessibilityService = accessor.get(IAccessibilityService); <ins> const userGestureCues = [AudioCue.save, AudioCue.format]; </ins> const items: (IQuickPickItem & { audioCue: AudioCue })[] = AudioCue.allAudioCues.map((cue, idx) => ({ <del> label: accessibilityService.isScreenReaderOptimized() ? `${cue.name}${audioCueService.isCueEnabled(cue) ? '' : ' (' + localize('disabled', "Disabled") + ')'}` : `${audioCueService.isCueEnabled(cue) ? '$(check)' : '     '} ${cue.name}`, </del> <ins> label: userGestureCues.includes(cue) ? `${cue.name} (${configurationService.getValue(cue.settingsKey)})` : cue.name, </ins> audioCue: cue, <del> buttons: [{ </del> <ins> buttons: userGestureCues.includes(cue) ? [{ </ins> iconClass: ThemeIcon.asClassName(Codicon.settingsGear), tooltip: localize('audioCues.help.settings', 'Enable/Disable Audio Cue'), <del> }], </del> <ins> alwaysVisible: true }] : [] </ins> })); <del> const quickPick = quickPickService.pick<IQuickPickItem & { audioCue: AudioCue }>( items, { activeItem: items[0], onDidFocus: (item) => { audioCueService.playSound(item.audioCue.sound.getSound(true), true); }, onDidTriggerItemButton: (context) => { preferencesService.openSettings({ query: context.item.audioCue.settingsKey }); }, placeHolder: localize('audioCues.help.placeholder', 'Select an audio cue to play'), </del> <ins> const qp = quickInputService.createQuickPick<IQuickPickItem & { audioCue: AudioCue }>(); qp.items = items; qp.selectedItems = items.filter(i => audioCueService.isCueEnabled(i.audioCue)); qp.onDidAccept(() => { const enabledCues = qp.selectedItems.map(i => i.audioCue); const disabledCues = AudioCue.allAudioCues.filter(cue => !enabledCues.includes(cue)); for (const cue of enabledCues) { if (!userGestureCues.includes(cue)) { configurationService.updateValue(cue.settingsKey, accessibilityService.isScreenReaderOptimized() ? 'auto' : 'on'); } </ins> } <del> ); await quickPick; </del> <ins> for (const cue of disabledCues) { if (userGestureCues.includes(cue)) { configurationService.updateValue(cue.settingsKey, 'never'); } else { configurationService.updateValue(cue.settingsKey, 'off'); } } qp.hide(); }); qp.onDidChangeActive(() => { audioCueService.playSound(qp.activeItems[0].audioCue.sound.getSound(true), true); }); qp.placeholder = localize('audioCues.help.placeholder', 'Select an audio cue to play and configure'); qp.canSelectMany = true; await qp.show(); </ins> } }

override async run(accessor: ServicesAccessor): Promise<void> { const audioCueService = accessor.get(IAudioCueService); <del> const quickPickService = accessor.get(IQuickInputService); const preferencesService = accessor.get(IPreferencesService); const accessibilityService = accessor.get(IAccessibilityService); const items: (IQuickPickItem & { audioCue: AudioCue })[] = AudioCue.allAudioCues.filter(c => !!c.alertMessage).map((cue, idx) => ({ label: accessibilityService.isScreenReaderOptimized() ? `${cue.name}${audioCueService.isAlertEnabled(cue) ? '' : ' (' + localize('disabled', "Disabled") + ')'}` : `${audioCueService.isAlertEnabled(cue) ? '$(check)' : '     '} ${cue.name}`, </del> <ins> const quickInputService = accessor.get(IQuickInputService); const configurationService = accessor.get(IConfigurationService); const userGestureAlerts = [AudioCue.save, AudioCue.format]; const items: (IQuickPickItem & { audioCue: AudioCue })[] = AudioCue.allAudioCues.filter(c => c.alertSettingsKey).map((cue, idx) => ({ label: userGestureAlerts.includes(cue) && cue.alertSettingsKey ? `${cue.name} (${configurationService.getValue(cue.alertSettingsKey)})` : cue.name, </ins> audioCue: cue, <del> buttons: [{ </del> <ins> buttons: userGestureAlerts.includes(cue) ? [{ </ins> iconClass: ThemeIcon.asClassName(Codicon.settingsGear), <del> tooltip: localize('alerts.help.settings', 'Enable/Disable Audio Cue'), }], </del> <ins> tooltip: localize('alert.help.settings', 'Enable/Disable Alert'), alwaysVisible: true }] : [] </ins> })); <del> const quickPick = quickPickService.pick<IQuickPickItem & { audioCue: AudioCue }>( items, { activeItem: items[0], onDidTriggerItemButton: (context) => { preferencesService.openSettings({ query: context.item.audioCue.alertSettingsKey }); }, placeHolder: localize('alerts.help.placeholder', 'Inspect and configure the status of an alert'), </del> <ins> const qp = quickInputService.createQuickPick<IQuickPickItem & { audioCue: AudioCue }>(); qp.items = items; qp.selectedItems = items.filter(i => audioCueService.isAlertEnabled(i.audioCue)); qp.onDidAccept(() => { const enabledAlerts = qp.selectedItems.map(i => i.audioCue); const disabledAlerts = AudioCue.allAudioCues.filter(cue => !enabledAlerts.includes(cue)); for (const cue of enabledAlerts) { if (!userGestureAlerts.includes(cue)) { configurationService.updateValue(cue.alertSettingsKey!, true); } </ins> } <del> ); await quickPick; </del> <ins> for (const cue of disabledAlerts) { if (userGestureAlerts.includes(cue)) { configurationService.updateValue(cue.alertSettingsKey!, 'never'); } else { configurationService.updateValue(cue.alertSettingsKey!, false); } } qp.hide(); }); qp.placeholder = localize('alert.help.placeholder', 'Select an alert to configure'); qp.canSelectMany = true; await qp.show(); </ins> } }