From 91c7eaf9733fbff8076278b5fa1c2945d72032f3 Mon Sep 17 00:00:00 2001 From: Megan Rogge Date: Wed, 16 Nov 2022 15:10:45 -0800 Subject: [PATCH] add audio cues for reviewing a diff editor (#166413) --- .../editor/browser/widget/diffEditorWidget.ts | 13 +++++--- src/vs/editor/browser/widget/diffReview.ts | 31 +++++++++++++----- .../browser/standaloneCodeEditor.ts | 2 +- .../audioCues/browser/audioCueService.ts | 22 ++++++++++--- .../audioCues/browser/media/break.mp3 | Bin .../browser/media/diffLineDeleted.mp3 | Bin 0 -> 28864 bytes .../browser/media/diffLineInserted.mp3 | Bin 0 -> 28864 bytes .../audioCues/browser/media/error.mp3 | Bin .../audioCues/browser/media/foldedAreas.mp3 | Bin .../audioCues/browser/media/quickFixes.mp3 | Bin .../audioCues/browser/media/taskCompleted.mp3 | Bin .../audioCues/browser/media/taskFailed.mp3 | Bin .../audioCues/browser/media/terminalBell.mp3 | Bin .../audioCues/browser/media/warning.mp3 | Bin .../parts/editor/editor.contribution.ts | 1 - .../browser/audioCueDebuggerContribution.ts | 2 +- .../audioCueLineFeatureContribution.ts | 2 +- .../browser/audioCues.contribution.ts | 14 ++++++-- .../contrib/audioCues/browser/commands.ts | 2 +- .../browser/inlayHintsAccessibilty.ts | 2 +- .../tasks/browser/taskTerminalStatus.ts | 2 +- .../tasks/electron-sandbox/taskService.ts | 2 +- .../test/browser/taskTerminalStatus.test.ts | 2 +- .../terminal/browser/terminalInstance.ts | 2 +- .../terminal/browser/xterm/quickFixAddon.ts | 2 +- 25 files changed, 70 insertions(+), 31 deletions(-) rename src/vs/{workbench/contrib => platform}/audioCues/browser/audioCueService.ts (90%) rename src/vs/{workbench/contrib => platform}/audioCues/browser/media/break.mp3 (100%) create mode 100644 src/vs/platform/audioCues/browser/media/diffLineDeleted.mp3 create mode 100644 src/vs/platform/audioCues/browser/media/diffLineInserted.mp3 rename src/vs/{workbench/contrib => platform}/audioCues/browser/media/error.mp3 (100%) rename src/vs/{workbench/contrib => platform}/audioCues/browser/media/foldedAreas.mp3 (100%) rename src/vs/{workbench/contrib => platform}/audioCues/browser/media/quickFixes.mp3 (100%) rename src/vs/{workbench/contrib => platform}/audioCues/browser/media/taskCompleted.mp3 (100%) rename src/vs/{workbench/contrib => platform}/audioCues/browser/media/taskFailed.mp3 (100%) rename src/vs/{workbench/contrib => platform}/audioCues/browser/media/terminalBell.mp3 (100%) rename src/vs/{workbench/contrib => platform}/audioCues/browser/media/warning.mp3 (100%) diff --git a/src/vs/editor/browser/widget/diffEditorWidget.ts b/src/vs/editor/browser/widget/diffEditorWidget.ts index 216e31ab49e..0cf378ee559 100644 --- a/src/vs/editor/browser/widget/diffEditorWidget.ts +++ b/src/vs/editor/browser/widget/diffEditorWidget.ts @@ -1878,6 +1878,11 @@ function createDecoration(startLineNumber: number, startColumn: number, endLineN }; } +const enum DiffEditorLineClasses { + Insert = 'line-insert', + Delete = 'line-delete' +} + const DECORATIONS = { arrowRevertChange: ModelDecorationOptions.register({ @@ -1907,13 +1912,13 @@ const DECORATIONS = { lineInsert: ModelDecorationOptions.register({ description: 'diff-editor-line-insert', - className: 'line-insert', + className: DiffEditorLineClasses.Insert, marginClassName: 'gutter-insert', isWholeLine: true }), lineInsertWithSign: ModelDecorationOptions.register({ description: 'diff-editor-line-insert-with-sign', - className: 'line-insert', + className: DiffEditorLineClasses.Insert, linesDecorationsClassName: 'insert-sign ' + ThemeIcon.asClassName(diffInsertIcon), marginClassName: 'gutter-insert', isWholeLine: true @@ -1921,13 +1926,13 @@ const DECORATIONS = { lineDelete: ModelDecorationOptions.register({ description: 'diff-editor-line-delete', - className: 'line-delete', + className: DiffEditorLineClasses.Delete, marginClassName: 'gutter-delete', isWholeLine: true }), lineDeleteWithSign: ModelDecorationOptions.register({ description: 'diff-editor-line-delete-with-sign', - className: 'line-delete', + className: DiffEditorLineClasses.Delete, linesDecorationsClassName: 'delete-sign ' + ThemeIcon.asClassName(diffRemoveIcon), marginClassName: 'gutter-delete', isWholeLine: true diff --git a/src/vs/editor/browser/widget/diffReview.ts b/src/vs/editor/browser/widget/diffReview.ts index a615c329e05..12889bed475 100644 --- a/src/vs/editor/browser/widget/diffReview.ts +++ b/src/vs/editor/browser/widget/diffReview.ts @@ -33,6 +33,7 @@ import { registerIcon } from 'vs/platform/theme/common/iconRegistry'; import { ILanguageIdCodec } from 'vs/editor/common/languages'; import { ILanguageService } from 'vs/editor/common/languages/language'; import { ILineChange } from 'vs/editor/common/diff/smartLinesDiffComputer'; +import { AudioCue, IAudioCueService } from 'vs/platform/audioCues/browser/audioCueService'; const DIFF_LINES_PADDING = 3; @@ -66,6 +67,11 @@ class DiffEntry { } } +const enum DiffEditorLineClasses { + Insert = 'line-insert', + Delete = 'line-delete' +} + class Diff { readonly entries: DiffEntry[]; @@ -95,7 +101,8 @@ export class DiffReview extends Disposable { constructor( diffEditor: DiffEditorWidget, - @ILanguageService private readonly _languageService: ILanguageService + @ILanguageService private readonly _languageService: ILanguageService, + @IAudioCueService private readonly _audioCueService: IAudioCueService ) { super(); this._diffEditor = diffEditor; @@ -149,7 +156,7 @@ export class DiffReview extends Disposable { || e.equals(KeyMod.Alt | KeyCode.DownArrow) ) { e.preventDefault(); - this._goToRow(this._getNextRow()); + this._goToRow(this._getNextRow(), 'next'); } if ( @@ -158,7 +165,7 @@ export class DiffReview extends Disposable { || e.equals(KeyMod.Alt | KeyCode.UpArrow) ) { e.preventDefault(); - this._goToRow(this._getPrevRow()); + this._goToRow(this._getPrevRow(), 'previous'); } if ( @@ -215,7 +222,7 @@ export class DiffReview extends Disposable { this._isVisible = true; this._diffEditor.doLayout(); this._render(); - this._goToRow(this._getNextRow()); + this._goToRow(this._getPrevRow(), 'previous'); } public next(): void { @@ -250,7 +257,7 @@ export class DiffReview extends Disposable { this._isVisible = true; this._diffEditor.doLayout(); this._render(); - this._goToRow(this._getNextRow()); + this._goToRow(this._getNextRow(), 'next'); } private accept(): void { @@ -312,12 +319,18 @@ export class DiffReview extends Disposable { return null; } - private _goToRow(row: HTMLElement): void { - const prev = this._getCurrentFocusedRow(); + private _goToRow(row: HTMLElement, type?: 'next' | 'previous'): void { + const current = this._getCurrentFocusedRow(); row.tabIndex = 0; row.focus(); - if (prev && prev !== row) { - prev.tabIndex = -1; + if (current && current !== row) { + current.tabIndex = -1; + } + const element = !type ? current : type === 'next' ? current?.nextElementSibling : current?.previousElementSibling; + if (element?.classList.contains(DiffEditorLineClasses.Insert)) { + this._audioCueService.playAudioCue(AudioCue.diffLineInserted, true); + } else if (element?.classList.contains(DiffEditorLineClasses.Delete)) { + this._audioCueService.playAudioCue(AudioCue.diffLineDeleted, true); } this.scrollbar.scanDomNode(); } diff --git a/src/vs/editor/standalone/browser/standaloneCodeEditor.ts b/src/vs/editor/standalone/browser/standaloneCodeEditor.ts index 8e9a237c5b3..9f15f355956 100644 --- a/src/vs/editor/standalone/browser/standaloneCodeEditor.ts +++ b/src/vs/editor/standalone/browser/standaloneCodeEditor.ts @@ -495,7 +495,7 @@ export class StandaloneDiffEditor extends DiffEditorWidget implements IStandalon @IConfigurationService configurationService: IConfigurationService, @IContextMenuService contextMenuService: IContextMenuService, @IEditorProgressService editorProgressService: IEditorProgressService, - @IClipboardService clipboardService: IClipboardService, + @IClipboardService clipboardService: IClipboardService ) { const options = { ..._options }; updateConfigurationService(configurationService, options, true); diff --git a/src/vs/workbench/contrib/audioCues/browser/audioCueService.ts b/src/vs/platform/audioCues/browser/audioCueService.ts similarity index 90% rename from src/vs/workbench/contrib/audioCues/browser/audioCueService.ts rename to src/vs/platform/audioCues/browser/audioCueService.ts index 6aeb6d66f25..a7ca2398964 100644 --- a/src/vs/workbench/contrib/audioCues/browser/audioCueService.ts +++ b/src/vs/platform/audioCues/browser/audioCueService.ts @@ -17,7 +17,7 @@ export const IAudioCueService = createDecorator('audioCue'); export interface IAudioCueService { readonly _serviceBrand: undefined; - playAudioCue(cue: AudioCue): Promise; + playAudioCue(cue: AudioCue, allowManyInParallel?: boolean): Promise; playAudioCues(cues: AudioCue[]): Promise; isEnabled(cue: AudioCue): IObservable; @@ -39,9 +39,9 @@ export class AudioCueService extends Disposable implements IAudioCueService { super(); } - public async playAudioCue(cue: AudioCue): Promise { + public async playAudioCue(cue: AudioCue, allowManyInParallel = false): Promise { if (this.isEnabled(cue).get()) { - await this.playSound(cue.sound); + await this.playSound(cue.sound, allowManyInParallel); } } @@ -70,7 +70,7 @@ export class AudioCueService extends Disposable implements IAudioCueService { this.playingSounds.add(sound); const url = FileAccess.asBrowserUri( - `vs/workbench/contrib/audioCues/browser/media/${sound.fileName}` + `vs/platform/audioCues/common/media/${sound.fileName}` ).toString(); const audio = new Audio(url); audio.volume = this.getVolumeInPercent() / 100; @@ -164,6 +164,8 @@ export class Sound { public static readonly taskCompleted = Sound.register({ fileName: 'taskCompleted.mp3' }); public static readonly taskFailed = Sound.register({ fileName: 'taskFailed.mp3' }); public static readonly terminalBell = Sound.register({ fileName: 'terminalBell.mp3' }); + public static readonly diffLineInserted = Sound.register({ fileName: 'diffLineInserted.mp3' }); + public static readonly diffLineDeleted = Sound.register({ fileName: 'diffLineDeleted.mp3' }); private constructor(public readonly fileName: string) { } } @@ -247,6 +249,18 @@ export class AudioCue { settingsKey: 'audioCues.terminalBell' }); + public static readonly diffLineInserted = AudioCue.register({ + name: localize('audioCues.diffLineInserted', 'Diff Line Inserted'), + sound: Sound.diffLineInserted, + settingsKey: 'audioCues.diffLineInserted' + }); + + public static readonly diffLineDeleted = AudioCue.register({ + name: localize('audioCues.diffLineDeleted', 'Diff Line Deleted'), + sound: Sound.diffLineDeleted, + settingsKey: 'audioCues.diffLineDeleted' + }); + private constructor( public readonly sound: Sound, public readonly name: string, diff --git a/src/vs/workbench/contrib/audioCues/browser/media/break.mp3 b/src/vs/platform/audioCues/browser/media/break.mp3 similarity index 100% rename from src/vs/workbench/contrib/audioCues/browser/media/break.mp3 rename to src/vs/platform/audioCues/browser/media/break.mp3 diff --git a/src/vs/platform/audioCues/browser/media/diffLineDeleted.mp3 b/src/vs/platform/audioCues/browser/media/diffLineDeleted.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..fc7ec846611b7eead98cd54ea4b18aacf6e5c25c GIT binary patch literal 28864 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 S`L9>kAAbJzuK9mu#Qy`3*}94V literal 0 HcmV?d00001 diff --git a/src/vs/platform/audioCues/browser/media/diffLineInserted.mp3 b/src/vs/platform/audioCues/browser/media/diffLineInserted.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..5f3ede4ced7564e052752c385532dba26adcaa0d GIT binary patch literal 28864 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 literal 0 HcmV?d00001 diff --git a/src/vs/workbench/contrib/audioCues/browser/media/error.mp3 b/src/vs/platform/audioCues/browser/media/error.mp3 similarity index 100% rename from src/vs/workbench/contrib/audioCues/browser/media/error.mp3 rename to src/vs/platform/audioCues/browser/media/error.mp3 diff --git a/src/vs/workbench/contrib/audioCues/browser/media/foldedAreas.mp3 b/src/vs/platform/audioCues/browser/media/foldedAreas.mp3 similarity index 100% rename from src/vs/workbench/contrib/audioCues/browser/media/foldedAreas.mp3 rename to src/vs/platform/audioCues/browser/media/foldedAreas.mp3 diff --git a/src/vs/workbench/contrib/audioCues/browser/media/quickFixes.mp3 b/src/vs/platform/audioCues/browser/media/quickFixes.mp3 similarity index 100% rename from src/vs/workbench/contrib/audioCues/browser/media/quickFixes.mp3 rename to src/vs/platform/audioCues/browser/media/quickFixes.mp3 diff --git a/src/vs/workbench/contrib/audioCues/browser/media/taskCompleted.mp3 b/src/vs/platform/audioCues/browser/media/taskCompleted.mp3 similarity index 100% rename from src/vs/workbench/contrib/audioCues/browser/media/taskCompleted.mp3 rename to src/vs/platform/audioCues/browser/media/taskCompleted.mp3 diff --git a/src/vs/workbench/contrib/audioCues/browser/media/taskFailed.mp3 b/src/vs/platform/audioCues/browser/media/taskFailed.mp3 similarity index 100% rename from src/vs/workbench/contrib/audioCues/browser/media/taskFailed.mp3 rename to src/vs/platform/audioCues/browser/media/taskFailed.mp3 diff --git a/src/vs/workbench/contrib/audioCues/browser/media/terminalBell.mp3 b/src/vs/platform/audioCues/browser/media/terminalBell.mp3 similarity index 100% rename from src/vs/workbench/contrib/audioCues/browser/media/terminalBell.mp3 rename to src/vs/platform/audioCues/browser/media/terminalBell.mp3 diff --git a/src/vs/workbench/contrib/audioCues/browser/media/warning.mp3 b/src/vs/platform/audioCues/browser/media/warning.mp3 similarity index 100% rename from src/vs/workbench/contrib/audioCues/browser/media/warning.mp3 rename to src/vs/platform/audioCues/browser/media/warning.mp3 diff --git a/src/vs/workbench/browser/parts/editor/editor.contribution.ts b/src/vs/workbench/browser/parts/editor/editor.contribution.ts index fbe1d5a8853..d38d510d380 100644 --- a/src/vs/workbench/browser/parts/editor/editor.contribution.ts +++ b/src/vs/workbench/browser/parts/editor/editor.contribution.ts @@ -129,7 +129,6 @@ Registry.as(WorkbenchExtensions.Workbench).regi Registry.as(WorkbenchExtensions.Workbench).registerWorkbenchContribution(DynamicEditorConfigurations, LifecyclePhase.Ready); registerEditorContribution(FloatingClickMenu.ID, FloatingClickMenu); - //#endregion //#region Quick Access diff --git a/src/vs/workbench/contrib/audioCues/browser/audioCueDebuggerContribution.ts b/src/vs/workbench/contrib/audioCues/browser/audioCueDebuggerContribution.ts index 3b400d3fafc..84e1a657153 100644 --- a/src/vs/workbench/contrib/audioCues/browser/audioCueDebuggerContribution.ts +++ b/src/vs/workbench/contrib/audioCues/browser/audioCueDebuggerContribution.ts @@ -5,8 +5,8 @@ import { Disposable, IDisposable, toDisposable } from 'vs/base/common/lifecycle'; import { autorunWithStore } from 'vs/base/common/observable'; +import { IAudioCueService, AudioCue } from 'vs/platform/audioCues/browser/audioCueService'; import { IWorkbenchContribution } from 'vs/workbench/common/contributions'; -import { AudioCue, IAudioCueService } from 'vs/workbench/contrib/audioCues/browser/audioCueService'; import { IDebugService, IDebugSession } from 'vs/workbench/contrib/debug/common/debug'; export class AudioCueLineDebuggerContribution diff --git a/src/vs/workbench/contrib/audioCues/browser/audioCueLineFeatureContribution.ts b/src/vs/workbench/contrib/audioCues/browser/audioCueLineFeatureContribution.ts index 490fab6c4c6..c3a895a3ecb 100644 --- a/src/vs/workbench/contrib/audioCues/browser/audioCueLineFeatureContribution.ts +++ b/src/vs/workbench/contrib/audioCues/browser/audioCueLineFeatureContribution.ts @@ -14,9 +14,9 @@ import { FoldingController } from 'vs/editor/contrib/folding/browser/folding'; import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; import { ITextModel } from 'vs/editor/common/model'; import { GhostTextController } from 'vs/editor/contrib/inlineCompletions/browser/ghostTextController'; -import { AudioCue, IAudioCueService } from 'vs/workbench/contrib/audioCues/browser/audioCueService'; import { CursorChangeReason } from 'vs/editor/common/cursorEvents'; import { autorun, autorunDelta, constObservable, debouncedObservable, derived, IObservable, observableFromEvent, observableFromPromise, wasEventTriggeredRecently } from 'vs/base/common/observable'; +import { AudioCue, IAudioCueService } from 'vs/platform/audioCues/browser/audioCueService'; export class AudioCueLineFeatureContribution extends Disposable diff --git a/src/vs/workbench/contrib/audioCues/browser/audioCues.contribution.ts b/src/vs/workbench/contrib/audioCues/browser/audioCues.contribution.ts index 2fc361426fd..bcfbc1fae7f 100644 --- a/src/vs/workbench/contrib/audioCues/browser/audioCues.contribution.ts +++ b/src/vs/workbench/contrib/audioCues/browser/audioCues.contribution.ts @@ -3,17 +3,17 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ +import { ShowAudioCueHelp } from 'vs/workbench/contrib/audioCues/browser/commands'; import { localize } from 'vs/nls'; import { registerAction2 } from 'vs/platform/actions/common/actions'; import { Extensions as ConfigurationExtensions, IConfigurationPropertySchema, IConfigurationRegistry } from 'vs/platform/configuration/common/configurationRegistry'; import { InstantiationType, registerSingleton } from 'vs/platform/instantiation/common/extensions'; import { Registry } from 'vs/platform/registry/common/platform'; import { Extensions as WorkbenchExtensions, IWorkbenchContributionsRegistry } from 'vs/workbench/common/contributions'; +import { LifecyclePhase } from 'vs/workbench/services/lifecycle/common/lifecycle'; +import { IAudioCueService, AudioCueService } from 'vs/platform/audioCues/browser/audioCueService'; import { AudioCueLineDebuggerContribution } from 'vs/workbench/contrib/audioCues/browser/audioCueDebuggerContribution'; import { AudioCueLineFeatureContribution } from 'vs/workbench/contrib/audioCues/browser/audioCueLineFeatureContribution'; -import { AudioCueService, IAudioCueService } from 'vs/workbench/contrib/audioCues/browser/audioCueService'; -import { ShowAudioCueHelp } from 'vs/workbench/contrib/audioCues/browser/commands'; -import { LifecyclePhase } from 'vs/workbench/services/lifecycle/common/lifecycle'; registerSingleton(IAudioCueService, AudioCueService, InstantiationType.Delayed); @@ -87,6 +87,14 @@ Registry.as(ConfigurationExtensions.Configuration).regis 'description': localize('audioCues.terminalQuickFix', "Plays a sound when terminal Quick Fixes are available."), ...audioCueFeatureBase, }, + 'audioCues.diffLineInserted': { + 'description': localize('audioCues.diffLineInserted', "Plays a sound when the focus moves to an inserted line in diff review mode"), + ...audioCueFeatureBase, + }, + 'audioCues.diffLineDeleted': { + 'description': localize('audioCues.diffLineDeleted', "Plays a sound when the focus moves to a deleted line in diff review mode"), + ...audioCueFeatureBase, + }, } }); diff --git a/src/vs/workbench/contrib/audioCues/browser/commands.ts b/src/vs/workbench/contrib/audioCues/browser/commands.ts index ab6b124bfce..834c481cc5d 100644 --- a/src/vs/workbench/contrib/audioCues/browser/commands.ts +++ b/src/vs/workbench/contrib/audioCues/browser/commands.ts @@ -7,9 +7,9 @@ import { Codicon } from 'vs/base/common/codicons'; 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 { ServicesAccessor } from 'vs/platform/instantiation/common/instantiation'; import { IQuickInputService, IQuickPickItem } from 'vs/platform/quickinput/common/quickInput'; -import { AudioCue, IAudioCueService } from 'vs/workbench/contrib/audioCues/browser/audioCueService'; import { IPreferencesService } from 'vs/workbench/services/preferences/common/preferences'; export class ShowAudioCueHelp extends Action2 { diff --git a/src/vs/workbench/contrib/inlayHints/browser/inlayHintsAccessibilty.ts b/src/vs/workbench/contrib/inlayHints/browser/inlayHintsAccessibilty.ts index 1cd411eb22c..38ea286744c 100644 --- a/src/vs/workbench/contrib/inlayHints/browser/inlayHintsAccessibilty.ts +++ b/src/vs/workbench/contrib/inlayHints/browser/inlayHintsAccessibilty.ts @@ -15,11 +15,11 @@ import { InlayHintItem, asCommandLink } from 'vs/editor/contrib/inlayHints/brows import { InlayHintsController } from 'vs/editor/contrib/inlayHints/browser/inlayHintsController'; import { localize } from 'vs/nls'; import { registerAction2 } from 'vs/platform/actions/common/actions'; +import { AudioCue, IAudioCueService } from 'vs/platform/audioCues/browser/audioCueService'; import { IContextKey, IContextKeyService, RawContextKey } from 'vs/platform/contextkey/common/contextkey'; import { IInstantiationService, ServicesAccessor } from 'vs/platform/instantiation/common/instantiation'; import { KeybindingWeight } from 'vs/platform/keybinding/common/keybindingsRegistry'; import { Link } from 'vs/platform/opener/browser/link'; -import { AudioCue, IAudioCueService } from 'vs/workbench/contrib/audioCues/browser/audioCueService'; export class InlayHintsAccessibility implements IEditorContribution { diff --git a/src/vs/workbench/contrib/tasks/browser/taskTerminalStatus.ts b/src/vs/workbench/contrib/tasks/browser/taskTerminalStatus.ts index 762f9f6f578..7c88571ea9f 100644 --- a/src/vs/workbench/contrib/tasks/browser/taskTerminalStatus.ts +++ b/src/vs/workbench/contrib/tasks/browser/taskTerminalStatus.ts @@ -15,7 +15,7 @@ import { ITerminalStatus } from 'vs/workbench/contrib/terminal/browser/terminalS import { MarkerSeverity } from 'vs/platform/markers/common/markers'; import { spinningLoading } from 'vs/platform/theme/common/iconRegistry'; import { IMarker } from 'vs/platform/terminal/common/capabilities/capabilities'; -import { AudioCue, IAudioCueService } from 'vs/workbench/contrib/audioCues/browser/audioCueService'; +import { AudioCue, IAudioCueService } from 'vs/platform/audioCues/browser/audioCueService'; interface ITerminalData { terminal: ITerminalInstance; diff --git a/src/vs/workbench/contrib/tasks/electron-sandbox/taskService.ts b/src/vs/workbench/contrib/tasks/electron-sandbox/taskService.ts index 76f88556c89..1b29fa27657 100644 --- a/src/vs/workbench/contrib/tasks/electron-sandbox/taskService.ts +++ b/src/vs/workbench/contrib/tasks/electron-sandbox/taskService.ts @@ -46,7 +46,7 @@ import { IPaneCompositePartService } from 'vs/workbench/services/panecomposite/b import { IThemeService } from 'vs/platform/theme/common/themeService'; import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; import { IRemoteAgentService } from 'vs/workbench/services/remote/common/remoteAgentService'; -import { IAudioCueService } from 'vs/workbench/contrib/audioCues/browser/audioCueService'; +import { IAudioCueService } from 'vs/platform/audioCues/browser/audioCueService'; interface IWorkspaceFolderConfigurationResult { workspaceFolder: IWorkspaceFolder; diff --git a/src/vs/workbench/contrib/tasks/test/browser/taskTerminalStatus.test.ts b/src/vs/workbench/contrib/tasks/test/browser/taskTerminalStatus.test.ts index 11239dc5fa2..f15422f2768 100644 --- a/src/vs/workbench/contrib/tasks/test/browser/taskTerminalStatus.test.ts +++ b/src/vs/workbench/contrib/tasks/test/browser/taskTerminalStatus.test.ts @@ -5,9 +5,9 @@ import { ok } from 'assert'; import { Emitter, Event } from 'vs/base/common/event'; +import { AudioCue, IAudioCueService } from 'vs/platform/audioCues/browser/audioCueService'; import { TestConfigurationService } from 'vs/platform/configuration/test/common/testConfigurationService'; import { TestInstantiationService } from 'vs/platform/instantiation/test/common/instantiationServiceMock'; -import { AudioCue, IAudioCueService } from 'vs/workbench/contrib/audioCues/browser/audioCueService'; import { ACTIVE_TASK_STATUS, FAILED_TASK_STATUS, SUCCEEDED_TASK_STATUS, TaskTerminalStatus } from 'vs/workbench/contrib/tasks/browser/taskTerminalStatus'; import { AbstractProblemCollector } from 'vs/workbench/contrib/tasks/common/problemCollectors'; import { CommonTask, ITaskEvent, TaskEventKind, TaskRunType } from 'vs/workbench/contrib/tasks/common/tasks'; diff --git a/src/vs/workbench/contrib/terminal/browser/terminalInstance.ts b/src/vs/workbench/contrib/terminal/browser/terminalInstance.ts index 3ef386a0319..73b1c1fa40b 100644 --- a/src/vs/workbench/contrib/terminal/browser/terminalInstance.ts +++ b/src/vs/workbench/contrib/terminal/browser/terminalInstance.ts @@ -55,7 +55,6 @@ import { IThemeService } from 'vs/platform/theme/common/themeService'; import { IWorkspaceContextService, IWorkspaceFolder } from 'vs/platform/workspace/common/workspace'; import { IWorkspaceTrustRequestService } from 'vs/platform/workspace/common/workspaceTrust'; import { IViewDescriptorService, IViewsService, ViewContainerLocation } from 'vs/workbench/common/views'; -import { AudioCue, IAudioCueService } from 'vs/workbench/contrib/audioCues/browser/audioCueService'; import { TaskSettingId } from 'vs/workbench/contrib/tasks/common/tasks'; import { IDetectedLinks, TerminalLinkManager } from 'vs/workbench/contrib/terminal/browser/links/terminalLinkManager'; import { TerminalLinkQuickpick } from 'vs/workbench/contrib/terminal/browser/links/terminalLinkQuickpick'; @@ -89,6 +88,7 @@ import { IWorkbenchLayoutService, Position } from 'vs/workbench/services/layout/ import { IPathService } from 'vs/workbench/services/path/common/pathService'; import { IPreferencesService } from 'vs/workbench/services/preferences/common/preferences'; import type { IMarker, ITerminalAddon, Terminal as XTermTerminal } from 'xterm'; +import { IAudioCueService, AudioCue } from 'vs/platform/audioCues/browser/audioCueService'; const enum Constants { /** diff --git a/src/vs/workbench/contrib/terminal/browser/xterm/quickFixAddon.ts b/src/vs/workbench/contrib/terminal/browser/xterm/quickFixAddon.ts index 2694519e7d3..7e64705a746 100644 --- a/src/vs/workbench/contrib/terminal/browser/xterm/quickFixAddon.ts +++ b/src/vs/workbench/contrib/terminal/browser/xterm/quickFixAddon.ts @@ -11,7 +11,6 @@ import { asArray } from 'vs/base/common/arrays'; import { localize } from 'vs/nls'; import { IConfigurationService } from 'vs/platform/configuration/common/configuration'; import { IOpenerService } from 'vs/platform/opener/common/opener'; -import { AudioCue, IAudioCueService } from 'vs/workbench/contrib/audioCues/browser/audioCueService'; import { ITerminalQuickFixOpenerAction, ITerminalQuickFixOptions, TerminalQuickFixAction, TerminalQuickFixMatchResult } from 'vs/workbench/contrib/terminal/browser/terminal'; import { DecorationSelector, updateLayout } from 'vs/workbench/contrib/terminal/browser/xterm/decorationStyles'; import { IDecoration, Terminal } from 'xterm'; @@ -24,6 +23,7 @@ import { ITerminalContributionService } from 'vs/workbench/contrib/terminal/comm import { IExtensionTerminalQuickFix } from 'vs/platform/terminal/common/terminal'; import { URI } from 'vs/base/common/uri'; import { gitCreatePr, gitPushSetUpstream, gitSimilar } from 'vs/workbench/contrib/terminal/browser/terminalQuickFixBuiltinActions'; +import { AudioCue, IAudioCueService } from 'vs/platform/audioCues/browser/audioCueService'; import { ICommandService } from 'vs/platform/commands/common/commands'; import { IActionWidgetService } from 'vs/platform/actionWidget/browser/actionWidget'; import { ActionSet } from 'vs/platform/actionWidget/common/actionWidget';