mirror of
https://github.com/microsoft/vscode.git
synced 2026-08-15 02:07:31 +01:00
fix #202025
This commit is contained in:
@@ -97,6 +97,10 @@ Registry.as<IConfigurationRegistry>(ConfigurationExtensions.Configuration).regis
|
||||
'description': localize('audioCues.terminalQuickFix', "Plays a sound when terminal Quick Fixes are available."),
|
||||
...audioCueFeatureBase,
|
||||
},
|
||||
'audioCues.terminalBell': {
|
||||
'description': localize('audioCues.terminalBell', "Plays a sound when the terminal bell is ringing."),
|
||||
...audioCueFeatureBase,
|
||||
},
|
||||
'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,
|
||||
|
||||
@@ -9,9 +9,9 @@ import { localize } from 'vs/nls';
|
||||
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';
|
||||
import { IConfigurationService } from 'vs/platform/configuration/common/configuration';
|
||||
import { ServicesAccessor } from 'vs/platform/instantiation/common/instantiation';
|
||||
import { IQuickInputService, IQuickPickItem } from 'vs/platform/quickinput/common/quickInput';
|
||||
import { IPreferencesService } from 'vs/workbench/services/preferences/common/preferences';
|
||||
|
||||
export class ShowAudioCueHelp extends Action2 {
|
||||
static readonly ID = 'audioCues.help';
|
||||
@@ -29,36 +29,44 @@ export class ShowAudioCueHelp extends Action2 {
|
||||
|
||||
override async run(accessor: ServicesAccessor): Promise<void> {
|
||||
const audioCueService = accessor.get(IAudioCueService);
|
||||
const quickPickService = accessor.get(IQuickInputService);
|
||||
const preferencesService = accessor.get(IPreferencesService);
|
||||
const quickInputService = accessor.get(IQuickInputService);
|
||||
const configurationService = accessor.get(IConfigurationService);
|
||||
const accessibilityService = accessor.get(IAccessibilityService);
|
||||
|
||||
const userGestureCues = [AudioCue.save, AudioCue.format];
|
||||
const items: (IQuickPickItem & { audioCue: AudioCue })[] = AudioCue.allAudioCues.map((cue, idx) => ({
|
||||
label: accessibilityService.isScreenReaderOptimized() ?
|
||||
`${cue.name}${audioCueService.isCueEnabled(cue) ? '' : ' (' + localize('disabled', "Disabled") + ')'}`
|
||||
: `${audioCueService.isCueEnabled(cue) ? '$(check)' : ' '} ${cue.name}`,
|
||||
label: userGestureCues.includes(cue) ? `${cue.name} (${configurationService.getValue(cue.settingsKey)})` : cue.name,
|
||||
audioCue: cue,
|
||||
buttons: [{
|
||||
buttons: userGestureCues.includes(cue) ? [{
|
||||
iconClass: ThemeIcon.asClassName(Codicon.settingsGear),
|
||||
tooltip: localize('audioCues.help.settings', 'Enable/Disable Audio Cue'),
|
||||
}],
|
||||
alwaysVisible: true
|
||||
}] : []
|
||||
}));
|
||||
|
||||
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'),
|
||||
const qp = quickInputService.createQuickPick<IQuickPickItem & { audioCue: AudioCue }>();
|
||||
qp.items = items;
|
||||
qp.selectedItems = items.filter(i => audioCueService.isCueEnabled(i.audioCue));
|
||||
qp.onDidHide(() => {
|
||||
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');
|
||||
}
|
||||
}
|
||||
);
|
||||
|
||||
await quickPick;
|
||||
for (const cue of disabledCues) {
|
||||
if (userGestureCues.includes(cue)) {
|
||||
configurationService.updateValue(cue.settingsKey, 'never');
|
||||
} else {
|
||||
configurationService.updateValue(cue.settingsKey, 'off');
|
||||
}
|
||||
}
|
||||
});
|
||||
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();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -78,32 +86,39 @@ export class ShowAccessibilityAlertHelp extends Action2 {
|
||||
|
||||
override async run(accessor: ServicesAccessor): Promise<void> {
|
||||
const audioCueService = accessor.get(IAudioCueService);
|
||||
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}`,
|
||||
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,
|
||||
audioCue: cue,
|
||||
buttons: [{
|
||||
buttons: userGestureAlerts.includes(cue) ? [{
|
||||
iconClass: ThemeIcon.asClassName(Codicon.settingsGear),
|
||||
tooltip: localize('alerts.help.settings', 'Enable/Disable Audio Cue'),
|
||||
}],
|
||||
tooltip: localize('alert.help.settings', 'Enable/Disable Alert'),
|
||||
alwaysVisible: true
|
||||
}] : []
|
||||
}));
|
||||
|
||||
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'),
|
||||
const qp = quickInputService.createQuickPick<IQuickPickItem & { audioCue: AudioCue }>();
|
||||
qp.items = items;
|
||||
qp.selectedItems = items.filter(i => audioCueService.isAlertEnabled(i.audioCue));
|
||||
qp.onDidHide(() => {
|
||||
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);
|
||||
}
|
||||
}
|
||||
);
|
||||
|
||||
await quickPick;
|
||||
for (const cue of disabledAlerts) {
|
||||
if (userGestureAlerts.includes(cue)) {
|
||||
configurationService.updateValue(cue.alertSettingsKey!, 'never');
|
||||
} else {
|
||||
configurationService.updateValue(cue.alertSettingsKey!, false);
|
||||
}
|
||||
}
|
||||
});
|
||||
qp.placeholder = localize('alert.help.placeholder', 'Select an alert to configure');
|
||||
qp.canSelectMany = true;
|
||||
await qp.show();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user