diff --git a/src/vs/workbench/api/browser/mainThreadTerminalService.ts b/src/vs/workbench/api/browser/mainThreadTerminalService.ts index 58d9bbe5660..b06e8c53cd2 100644 --- a/src/vs/workbench/api/browser/mainThreadTerminalService.ts +++ b/src/vs/workbench/api/browser/mainThreadTerminalService.ts @@ -10,9 +10,9 @@ import { URI } from 'vs/base/common/uri'; import { StopWatch } from 'vs/base/common/stopwatch'; import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; import { ILogService } from 'vs/platform/log/common/log'; -import { IShellLaunchConfig, IShellLaunchConfigDto, ITerminalDimensions, TitleEventSource } from 'vs/platform/terminal/common/terminal'; +import { IShellLaunchConfig, IShellLaunchConfigDto, ITerminalDimensions, TerminalLocation, TitleEventSource } from 'vs/platform/terminal/common/terminal'; import { TerminalDataBufferer } from 'vs/platform/terminal/common/terminalDataBuffering'; -import { ITerminalExternalLinkProvider, ITerminalGroupService, ITerminalInstance, ITerminalInstanceService, ITerminalLink, ITerminalService } from 'vs/workbench/contrib/terminal/browser/terminal'; +import { ITerminalEditorService, ITerminalExternalLinkProvider, ITerminalGroupService, ITerminalInstance, ITerminalInstanceService, ITerminalLink, ITerminalService } from 'vs/workbench/contrib/terminal/browser/terminal'; import { TerminalProcessExtHostProxy } from 'vs/workbench/contrib/terminal/browser/terminalProcessExtHostProxy'; import { IEnvironmentVariableService, ISerializableEnvironmentVariableCollection } from 'vs/workbench/contrib/terminal/common/environmentVariable'; import { deserializeEnvironmentVariableCollection, serializeEnvironmentVariableCollection } from 'vs/workbench/contrib/terminal/common/environmentVariableShared'; @@ -54,7 +54,8 @@ export class MainThreadTerminalService implements MainThreadTerminalServiceShape @ILogService private readonly _logService: ILogService, @ITerminalProfileResolverService private readonly _terminalProfileResolverService: ITerminalProfileResolverService, @IRemoteAgentService remoteAgentService: IRemoteAgentService, - @ITerminalGroupService private readonly _terminalGroupService: ITerminalGroupService + @ITerminalGroupService private readonly _terminalGroupService: ITerminalGroupService, + @ITerminalEditorService private readonly _terminalEditorService: ITerminalEditorService ) { this._proxy = _extHostContext.getProxy(ExtHostContext.ExtHostTerminalService); @@ -164,14 +165,18 @@ export class MainThreadTerminalService implements MainThreadTerminalServiceShape const terminalInstance = this._getTerminalInstance(id); if (terminalInstance) { this._terminalService.setActiveInstance(terminalInstance); - this._terminalGroupService.showPanel(!preserveFocus); + if (terminalInstance.target === TerminalLocation.Editor) { + this._terminalEditorService.revealActiveEditor(preserveFocus); + } else { + this._terminalGroupService.showPanel(!preserveFocus); + } } } public $hide(id: TerminalIdentifier): void { const rendererId = this._getTerminalId(id); const instance = this._terminalService.activeInstance; - if (instance && instance.instanceId === rendererId) { + if (instance && instance.instanceId === rendererId && instance.target !== TerminalLocation.Editor) { this._terminalGroupService.hidePanel(); } } diff --git a/src/vs/workbench/contrib/terminal/browser/terminal.ts b/src/vs/workbench/contrib/terminal/browser/terminal.ts index c1c4c71f919..0e9568a561d 100644 --- a/src/vs/workbench/contrib/terminal/browser/terminal.ts +++ b/src/vs/workbench/contrib/terminal/browser/terminal.ts @@ -202,6 +202,7 @@ export interface ITerminalEditorService extends ITerminalInstanceHost, ITerminal detachActiveEditorInstance(): ITerminalInstance; detachInstance(instance: ITerminalInstance): void; splitInstance(instanceToSplit: ITerminalInstance, shellLaunchConfig?: IShellLaunchConfig): ITerminalInstance; + revealActiveEditor(preserveFocus?: boolean): void } /** diff --git a/src/vs/workbench/contrib/terminal/browser/terminalEditorService.ts b/src/vs/workbench/contrib/terminal/browser/terminalEditorService.ts index 3966544da3f..5a2511f857b 100644 --- a/src/vs/workbench/contrib/terminal/browser/terminalEditorService.ts +++ b/src/vs/workbench/contrib/terminal/browser/terminalEditorService.ts @@ -7,6 +7,7 @@ import { Emitter } from 'vs/base/common/event'; import { Disposable, dispose, IDisposable, toDisposable } from 'vs/base/common/lifecycle'; import { FindReplaceState } from 'vs/editor/contrib/find/findState'; import { ICommandService } from 'vs/platform/commands/common/commands'; +import { EditorActivation } from 'vs/platform/editor/common/editor'; import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; import { IShellLaunchConfig, TerminalLocation } from 'vs/platform/terminal/common/terminal'; import { IEditorInput, IEditorPane } from 'vs/workbench/common/editor'; @@ -219,4 +220,23 @@ export class TerminalEditorService extends Disposable implements ITerminalEditor } this._onDidChangeInstances.fire(); } + + revealActiveEditor(preserveFocus?: boolean): void { + const instance = this.activeInstance; + if (!instance) { + return; + } + + const editorInput = this._editorInputs.get(instance.instanceId)!; + this._editorService.openEditor( + editorInput, + { + pinned: true, + forceReload: true, + preserveFocus, + activation: EditorActivation.PRESERVE + }, + editorInput.group + ); + } }