diff --git a/src/vs/platform/terminal/common/terminal.ts b/src/vs/platform/terminal/common/terminal.ts index 40276b30974..3edafea79a4 100644 --- a/src/vs/platform/terminal/common/terminal.ts +++ b/src/vs/platform/terminal/common/terminal.ts @@ -182,6 +182,10 @@ export interface IPtyService { getCwd(id: number): Promise; getLatency(id: number): Promise; + + setTerminalLayoutInfo(layout: ITerminalsLayoutInfoById): Promise; + + getTerminalLayoutInfo(): Promise; } export interface IShellLaunchConfig { diff --git a/src/vs/platform/terminal/electron-browser/localPtyService.ts b/src/vs/platform/terminal/electron-browser/localPtyService.ts index 33042aac5f5..c065a67c1d1 100644 --- a/src/vs/platform/terminal/electron-browser/localPtyService.ts +++ b/src/vs/platform/terminal/electron-browser/localPtyService.ts @@ -5,7 +5,7 @@ import { Disposable } from 'vs/base/common/lifecycle'; import { ILogService } from 'vs/platform/log/common/log'; -import { IProcessDataEvent, IPtyService, IShellLaunchConfig, ITerminalDimensionsOverride, ITerminalLaunchError, TerminalIpcChannels } from 'vs/platform/terminal/common/terminal'; +import { IProcessDataEvent, IPtyService, IShellLaunchConfig, ITerminalDimensionsOverride, ITerminalLaunchError, ITerminalsLayoutInfo, ITerminalsLayoutInfoById, TerminalIpcChannels } from 'vs/platform/terminal/common/terminal'; import { Client } from 'vs/base/parts/ipc/node/ipc.cp'; import { FileAccess } from 'vs/base/common/network'; import { ProxyChannel } from 'vs/base/parts/ipc/common/ipc'; @@ -131,4 +131,10 @@ export class LocalPtyService extends Disposable implements IPtyService { getLatency(id: number): Promise { return this._proxy.getLatency(id); } + public setTerminalLayoutInfo(layout: ITerminalsLayoutInfoById): Promise { + return this._proxy.setTerminalLayoutInfo(layout); + } + public getTerminalLayoutInfo(): Promise { + return this._proxy.getTerminalLayoutInfo(); + } } diff --git a/src/vs/platform/terminal/node/ptyHostMain.ts b/src/vs/platform/terminal/node/ptyHostMain.ts index 041e7d814c5..866315f7ed5 100644 --- a/src/vs/platform/terminal/node/ptyHostMain.ts +++ b/src/vs/platform/terminal/node/ptyHostMain.ts @@ -9,14 +9,16 @@ import { PtyService } from 'vs/platform/terminal/node/ptyService'; import { TerminalIpcChannels } from 'vs/platform/terminal/common/terminal'; import { ConsoleLogger, LogService } from 'vs/platform/log/common/log'; import { LogLevelChannel } from 'vs/platform/log/common/logIpc'; +import { SimpleWorkspaceContextService } from 'vs/editor/standalone/browser/simpleServices'; const server = new Server('ptyHost'); const logService = new LogService(new ConsoleLogger()); const logChannel = new LogLevelChannel(logService); +const workspaceContextService = new SimpleWorkspaceContextService(); server.registerChannel(TerminalIpcChannels.Log, logChannel); -const service = new PtyService(logService); +const service = new PtyService(logService, workspaceContextService); server.registerChannel(TerminalIpcChannels.PtyHost, ProxyChannel.fromService(service)); process.once('exit', () => { diff --git a/src/vs/platform/terminal/node/ptyService.ts b/src/vs/platform/terminal/node/ptyService.ts index 11ba1e3ccf0..36a6169357c 100644 --- a/src/vs/platform/terminal/node/ptyService.ts +++ b/src/vs/platform/terminal/node/ptyService.ts @@ -5,14 +5,15 @@ import { Disposable } from 'vs/base/common/lifecycle'; import { IProcessEnvironment } from 'vs/base/common/platform'; -import { IPtyService, IProcessDataEvent, IShellLaunchConfig, ITerminalDimensionsOverride, ITerminalLaunchError, printTime, LocalReconnectConstants } from 'vs/platform/terminal/common/terminal'; +import { IPtyService, IProcessDataEvent, IShellLaunchConfig, ITerminalDimensionsOverride, ITerminalLaunchError, printTime, LocalReconnectConstants, ITerminalsLayoutInfo, IRawTerminalInstanceLayoutInfo, ITerminalTabLayoutInfoById, ITerminalInstanceLayoutInfoById } from 'vs/platform/terminal/common/terminal'; import { AutoOpenBarrier, Queue, RunOnceScheduler } from 'vs/base/common/async'; import { Event, Emitter } from 'vs/base/common/event'; import { TerminalDataBufferer } from 'vs/platform/terminal/common/terminalDataBuffering'; import { TerminalRecorder } from 'vs/platform/terminal/common/terminalRecorder'; import { TerminalProcess } from 'vs/platform/terminal/node/terminalProcess'; -import { IPtyHostProcessEvent, IPtyHostProcessDataEvent, IPtyHostProcessReadyEvent, IPtyHostProcessTitleChangedEvent, IPtyHostProcessExitEvent, IPtyHostProcessOrphanQuestionEvent } from 'vs/platform/terminal/common/terminalProcess'; +import { IPtyHostProcessEvent, IPtyHostProcessDataEvent, IPtyHostProcessReadyEvent, IPtyHostProcessTitleChangedEvent, IPtyHostProcessExitEvent, IPtyHostProcessOrphanQuestionEvent, ISetTerminalLayoutInfoArgs, ITerminalTabLayoutInfoDto, IPtyHostDescriptionDto } from 'vs/platform/terminal/common/terminalProcess'; import { ILogService } from 'vs/platform/log/common/log'; +import { IWorkspaceContextService } from 'vs/platform/workspace/common/workspace'; let currentPtyId = 0; @@ -21,6 +22,8 @@ export class PtyService extends Disposable implements IPtyService { private readonly _ptys: Map = new Map(); + private readonly _workspaceLayoutInfos = new Map(); + private readonly _onProcessData = this._register(new Emitter<{ id: number, event: IProcessDataEvent | string }>()); readonly onProcessData = this._onProcessData.event; private readonly _onProcessExit = this._register(new Emitter<{ id: number, event: number | undefined }>()); @@ -34,7 +37,8 @@ export class PtyService extends Disposable implements IPtyService { private readonly _onProcessResolvedShellLaunchConfig = this._register(new Emitter<{ id: number, event: IShellLaunchConfig }>()); readonly onProcessResolvedShellLaunchConfig = this._onProcessResolvedShellLaunchConfig.event; constructor( - private readonly _logService: ILogService + private readonly _logService: ILogService, + @IWorkspaceContextService private readonly _workspaceContextService: IWorkspaceContextService ) { super(); } @@ -43,8 +47,9 @@ export class PtyService extends Disposable implements IPtyService { return this._throwIfNoPty(id).acknowledgeCharCount(charCount); } + // following suit with the remoteTerminalService impl async getLatency(id: number): Promise { - throw new Error('Method not implemented.'); + return 0; } dispose() { @@ -99,6 +104,56 @@ export class PtyService extends Disposable implements IPtyService { return this._throwIfNoPty(id).getCwd(); } + async setTerminalLayoutInfo(args: ISetTerminalLayoutInfoArgs): Promise { + this._workspaceLayoutInfos.set(args.workspaceId, args); + } + + async getTerminalLayoutInfo(): Promise { + const layout = this._workspaceLayoutInfos.get(this._workspaceContextService.getWorkspace().id); + if (layout) { + const expandedTabs = await Promise.all(layout.tabs.map(async tab => this._expandTerminalTab(tab))); + const filtered = expandedTabs.filter(t => t.terminals.length > 0); + this._logService.info(`Terminal layout retrieved: ${JSON.stringify(filtered.map(t => t.terminals.length))}`); + + return { + tabs: filtered + }; + } + return undefined; + } + + private async _expandTerminalTab(tab: ITerminalTabLayoutInfoById): Promise { + const expandedTerminals = (await Promise.all(tab.terminals.map(t => this._expandTerminalInstance(t)))); + const filtered = expandedTerminals.filter(term => term.terminal !== null) as IRawTerminalInstanceLayoutInfo[]; + return { + isActive: tab.isActive, + activeTerminalProcessId: tab.activeTerminalProcessId, + terminals: filtered + }; + } + + private async _expandTerminalInstance(t: ITerminalInstanceLayoutInfoById): Promise> { + const persistentTerminalProcess = this._ptys.get(t.terminal); + const termDto = persistentTerminalProcess && await this._terminalToDto(t.terminal, persistentTerminalProcess); + return { + terminal: termDto ?? null, + relativeSize: t.relativeSize + }; + } + + private async _terminalToDto(id: number, persistentTerminalProcess: PersistentTerminalProcess): Promise { + const [cwd, isOrphan] = await Promise.all([persistentTerminalProcess.getCwd(), persistentTerminalProcess.isOrphaned()]); + return { + id, + title: persistentTerminalProcess.title, + pid: persistentTerminalProcess.pid, + workspaceId: persistentTerminalProcess.workspaceId, + workspaceName: persistentTerminalProcess.workspaceName, + cwd, + isOrphan + }; + } + private _throwIfNoPty(id: number): PersistentTerminalProcess { const pty = this._ptys.get(id); if (!pty) { diff --git a/src/vs/workbench/api/node/extHostTerminalService.ts b/src/vs/workbench/api/node/extHostTerminalService.ts index 9dcc4d0aa73..87ea9940af0 100644 --- a/src/vs/workbench/api/node/extHostTerminalService.ts +++ b/src/vs/workbench/api/node/extHostTerminalService.ts @@ -25,8 +25,7 @@ import { IExtHostInitDataService } from 'vs/workbench/api/common/extHostInitData import { withNullAsUndefined } from 'vs/base/common/types'; import { getSystemShell, getSystemShellSync } from 'vs/base/node/shell'; import { generateUuid } from 'vs/base/common/uuid'; -import { ITerminalEnvironment } from 'vs/workbench/contrib/terminal/common/terminal'; -import { IShellLaunchConfig, ITerminalLaunchError } from 'vs/platform/terminal/common/terminal'; +import { IShellLaunchConfig, ITerminalEnvironment, ITerminalLaunchError } from 'vs/platform/terminal/common/terminal'; export class ExtHostTerminalService extends BaseExtHostTerminalService { diff --git a/src/vs/workbench/contrib/terminal/browser/remoteTerminalService.ts b/src/vs/workbench/contrib/terminal/browser/remoteTerminalService.ts index 5c4d08ec5d2..85b0ca62638 100644 --- a/src/vs/workbench/contrib/terminal/browser/remoteTerminalService.ts +++ b/src/vs/workbench/contrib/terminal/browser/remoteTerminalService.ts @@ -14,9 +14,9 @@ import { IInstantiationService } from 'vs/platform/instantiation/common/instanti import { ILogService } from 'vs/platform/log/common/log'; import { IRemoteTerminalService, ITerminalInstanceService } from 'vs/workbench/contrib/terminal/browser/terminal'; import { IRemoteTerminalProcessExecCommandEvent, IShellLaunchConfigDto, RemoteTerminalChannelClient, REMOTE_TERMINAL_CHANNEL_NAME } from 'vs/workbench/contrib/terminal/common/remoteTerminalChannel'; -import { ITerminalChildProcess, IRemoteTerminalAttachTarget, ITerminalConfigHelper, ITerminalsLayoutInfo, ITerminalsLayoutInfoById } from 'vs/workbench/contrib/terminal/common/terminal'; +import { ITerminalChildProcess, IRemoteTerminalAttachTarget, ITerminalConfigHelper } from 'vs/workbench/contrib/terminal/common/terminal'; import { IRemoteAgentService } from 'vs/workbench/services/remote/common/remoteAgentService'; -import { IProcessDataEvent, IShellLaunchConfig, ITerminalDimensionsOverride, ITerminalLaunchError } from 'vs/platform/terminal/common/terminal'; +import { IProcessDataEvent, IShellLaunchConfig, ITerminalDimensionsOverride, ITerminalLaunchError, ITerminalsLayoutInfo, ITerminalsLayoutInfoById } from 'vs/platform/terminal/common/terminal'; export class RemoteTerminalService extends Disposable implements IRemoteTerminalService { public _serviceBrand: undefined; diff --git a/src/vs/workbench/contrib/terminal/browser/terminalProcessManager.ts b/src/vs/workbench/contrib/terminal/browser/terminalProcessManager.ts index 2ad1593dd4e..f5690a1b532 100644 --- a/src/vs/workbench/contrib/terminal/browser/terminalProcessManager.ts +++ b/src/vs/workbench/contrib/terminal/browser/terminalProcessManager.ts @@ -6,7 +6,7 @@ import * as platform from 'vs/base/common/platform'; import * as terminalEnvironment from 'vs/workbench/contrib/terminal/common/terminalEnvironment'; import { env as processEnv } from 'vs/base/common/process'; -import { ProcessState, ITerminalProcessManager, ITerminalConfigHelper, IBeforeProcessDataEvent, ITerminalEnvironment, FlowControlConstants, ITerminalChildProcess } from 'vs/workbench/contrib/terminal/common/terminal'; +import { ProcessState, ITerminalProcessManager, ITerminalConfigHelper, IBeforeProcessDataEvent, FlowControlConstants, ITerminalChildProcess } from 'vs/workbench/contrib/terminal/common/terminal'; import { ILogService } from 'vs/platform/log/common/log'; import { Emitter, Event } from 'vs/base/common/event'; import { IHistoryService } from 'vs/workbench/services/history/common/history'; @@ -27,7 +27,7 @@ import { EnvironmentVariableInfoChangesActive, EnvironmentVariableInfoStale } fr import { IPathService } from 'vs/workbench/services/path/common/pathService'; import { URI } from 'vs/base/common/uri'; import { IEnvironmentVariableInfo, IEnvironmentVariableService, IMergedEnvironmentVariableCollection } from 'vs/workbench/contrib/terminal/common/environmentVariable'; -import { IProcessDataEvent, IShellLaunchConfig, ITerminalDimensionsOverride, ITerminalLaunchError } from 'vs/platform/terminal/common/terminal'; +import { IProcessDataEvent, IShellLaunchConfig, ITerminalDimensionsOverride, ITerminalEnvironment, ITerminalLaunchError } from 'vs/platform/terminal/common/terminal'; /** The amount of time to consider terminal errors to be related to the launch */ const LAUNCHING_DURATION = 500; diff --git a/src/vs/workbench/contrib/terminal/browser/terminalService.ts b/src/vs/workbench/contrib/terminal/browser/terminalService.ts index ba2d7df57b3..ecde95fe85f 100644 --- a/src/vs/workbench/contrib/terminal/browser/terminalService.ts +++ b/src/vs/workbench/contrib/terminal/browser/terminalService.ts @@ -8,7 +8,6 @@ import { debounce } from 'vs/base/common/decorators'; import { Emitter, Event } from 'vs/base/common/event'; import { IDisposable } from 'vs/base/common/lifecycle'; import { basename } from 'vs/base/common/path'; -import { IStorageService, StorageScope, StorageTarget } from 'vs/platform/storage/common/storage'; import { isMacintosh, isWeb, isWindows, OperatingSystem } from 'vs/base/common/platform'; import { URI } from 'vs/base/common/uri'; import { FindReplaceState } from 'vs/editor/contrib/find/findState'; @@ -33,6 +32,8 @@ import { ILifecycleService } from 'vs/workbench/services/lifecycle/common/lifecy import { IRemoteAgentService } from 'vs/workbench/services/remote/common/remoteAgentService'; import { IShellDefinition, IShellLaunchConfig, ISpawnExtHostProcessRequest, IStartExtensionTerminalRequest, ITerminalLaunchError, ITerminalProcessExtHostProxy, ITerminalsLayoutInfo, ITerminalsLayoutInfoById, LinuxDistro } from 'vs/platform/terminal/common/terminal'; import { IAvailableShellsRequest, IRemoteTerminalAttachTarget, ITerminalConfigHelper, ITerminalNativeWindowsDelegate, KEYBINDING_CONTEXT_TERMINAL_ALT_BUFFER_ACTIVE, KEYBINDING_CONTEXT_TERMINAL_FIND_VISIBLE, KEYBINDING_CONTEXT_TERMINAL_FOCUS, KEYBINDING_CONTEXT_TERMINAL_IS_OPEN, KEYBINDING_CONTEXT_TERMINAL_PROCESS_SUPPORTED, KEYBINDING_CONTEXT_TERMINAL_SHELL_TYPE, TERMINAL_VIEW_ID } from 'vs/workbench/contrib/terminal/common/terminal'; +import { ILocalPtyService } from 'vs/platform/terminal/electron-sandbox/terminal'; + interface IExtHostReadyEntry { promise: Promise; resolve: () => void; @@ -67,6 +68,7 @@ export class TerminalService implements ITerminalService { private _terminalContainer: HTMLElement | undefined; private _nativeWindowsDelegate: ITerminalNativeWindowsDelegate | undefined; private _remoteTerminalsInitPromise: Promise | undefined; + private _localTerminalsInitPromise: Promise | undefined; private _connectionState: TerminalConnectionState; public get configHelper(): ITerminalConfigHelper { return this._configHelper; } @@ -120,7 +122,7 @@ export class TerminalService implements ITerminalService { @IWorkbenchEnvironmentService private readonly _environmentService: IWorkbenchEnvironmentService, @IRemoteTerminalService private readonly _remoteTerminalService: IRemoteTerminalService, @ITelemetryService private readonly _telemetryService: ITelemetryService, - @IStorageService private readonly _storageService: IStorageService + @ILocalPtyService private readonly _localPtyService: ILocalPtyService ) { this._activeTabIndex = 0; this._isShuttingDown = false; @@ -144,10 +146,14 @@ export class TerminalService implements ITerminalService { const enableTerminalReconnection = this.configHelper.config.enablePersistentSessions; const serverSpawn = this.configHelper.config.serverSpawn; - //TODO@meganrogge move _reconnectToLocalTerminals call from initializeInstances to else if here + + //TODO@meganrogge: deal with case where there are both local and remote terminals to reconnect if (!!this._environmentService.remoteAuthority && enableTerminalReconnection && serverSpawn) { this._remoteTerminalsInitPromise = this._reconnectToRemoteTerminals(); this._connectionState = TerminalConnectionState.Connecting; + } else if (enableTerminalReconnection) { + this._localTerminalsInitPromise = this._reconnectToLocalTerminals(); + this._connectionState = TerminalConnectionState.Connecting; } else { this._connectionState = TerminalConnectionState.Connected; this.attachProcessLayoutListeners(true); @@ -211,28 +217,27 @@ export class TerminalService implements ITerminalService { return reconnectCounter; } - private _reconnectToLocalTerminals(): void { + //TODO@meganrogge: GDPR? + private async _reconnectToLocalTerminals(): Promise { // Reattach to all local terminals - const defaultLayoutInfo = JSON.stringify({ tabs: [{ terminals: [], isActive: true }] }); - const result = this._storageService.get('localTerminalLayoutInfo', StorageScope.WORKSPACE, defaultLayoutInfo); - const layoutInfo = JSON.parse(result); + const layoutInfo = await this._localPtyService.getTerminalLayoutInfo(); + if (layoutInfo) { + if (layoutInfo.tabs.length === 0) { + this.createTerminal(); + this.attachProcessLayoutListeners(false); + return; + } - if (layoutInfo.tabs.length === 0) { - this.createTerminal(); + this._recreateLocalTabs(layoutInfo); + + this._connectionState = TerminalConnectionState.Connected; + // now that terminals have been restored, + // attach listeners to update local state when terminals are changed this.attachProcessLayoutListeners(false); - return; + this._onDidChangeConnectionState.fire(); } - - this._recreateLocalTabs(layoutInfo); - - this._connectionState = TerminalConnectionState.Connected; - // now that terminals have been restored, - // attach listeners to update local state when terminals are changed - this.attachProcessLayoutListeners(false); - this._onDidChangeConnectionState.fire(); } - //TODO@meganrogge consolidate _recreateLocal/Remote Tabs functions private _recreateLocalTabs(layoutInfo: any): void { let activeTab: ITerminalTab | undefined; if (layoutInfo) { @@ -383,7 +388,7 @@ export class TerminalService implements ITerminalService { const state: ITerminalsLayoutInfoById = { tabs: this.terminalTabs.map(t => t.getLayoutInfo(t === this.getActiveTab(), false)) }; - this._storageService.store('localTerminalLayoutInfo', JSON.stringify(state), StorageScope.WORKSPACE, StorageTarget.USER); + this._localPtyService.setTerminalLayoutInfo(state); } private _removeTab(tab: ITerminalTab): void { @@ -506,10 +511,16 @@ export class TerminalService implements ITerminalService { await this._remoteTerminalsInitPromise; if (!this.terminalTabs.length) { - this.createTerminal(undefined); + this.createTerminal(); } + } else if (this._localTerminalsInitPromise) { + await this._localTerminalsInitPromise; + if (!this.terminalTabs.length) { + this.createTerminal(); + } + } else if (!this.terminalTabs.length) { + this.createTerminal(); } - this._reconnectToLocalTerminals(); } private _getInstanceFromGlobalInstanceIndex(index: number): { tab: ITerminalTab, tabIndex: number, instance: ITerminalInstance, localInstanceIndex: number } | null { @@ -786,7 +797,6 @@ export class TerminalService implements ITerminalService { return new Promise(r => this._onRequestAvailableShells.fire({ callback: r })); } - public createInstance(container: HTMLElement | undefined, shellLaunchConfig: IShellLaunchConfig): ITerminalInstance { const instance = this._instantiationService.createInstance(TerminalInstance, this._terminalFocusContextKey, diff --git a/src/vs/workbench/contrib/terminal/browser/terminalTab.ts b/src/vs/workbench/contrib/terminal/browser/terminalTab.ts index 3db73d0895c..8153f90bc5e 100644 --- a/src/vs/workbench/contrib/terminal/browser/terminalTab.ts +++ b/src/vs/workbench/contrib/terminal/browser/terminalTab.ts @@ -3,7 +3,7 @@ * Licensed under the MIT License. See License.txt in the project root for license information. *--------------------------------------------------------------------------------------------*/ -import { ITerminalTabLayoutInfoById, TERMINAL_VIEW_ID } from 'vs/workbench/contrib/terminal/common/terminal'; +import { TERMINAL_VIEW_ID } from 'vs/workbench/contrib/terminal/common/terminal'; import { Event, Emitter } from 'vs/base/common/event'; import { IDisposable, Disposable, DisposableStore } from 'vs/base/common/lifecycle'; import { SplitView, Orientation, IView, Sizing } from 'vs/base/browser/ui/splitview/splitview'; @@ -11,7 +11,7 @@ import { IWorkbenchLayoutService, Parts, Position } from 'vs/workbench/services/ import { IInstantiationService } from 'vs/platform/instantiation/common/instantiation'; import { ITerminalInstance, Direction, ITerminalTab, ITerminalService } from 'vs/workbench/contrib/terminal/browser/terminal'; import { ViewContainerLocation, IViewDescriptorService } from 'vs/workbench/common/views'; -import { IShellLaunchConfig } from 'vs/platform/terminal/common/terminal'; +import { IShellLaunchConfig, ITerminalTabLayoutInfoById } from 'vs/platform/terminal/common/terminal'; const SPLIT_PANE_MIN_SIZE = 120; diff --git a/src/vs/workbench/contrib/terminal/common/remoteTerminalChannel.ts b/src/vs/workbench/contrib/terminal/common/remoteTerminalChannel.ts index cab3dbbad8a..30ef55040d4 100644 --- a/src/vs/workbench/contrib/terminal/common/remoteTerminalChannel.ts +++ b/src/vs/workbench/contrib/terminal/common/remoteTerminalChannel.ts @@ -17,9 +17,9 @@ import { SideBySideEditor, EditorResourceAccessor } from 'vs/workbench/common/ed import { IEditorService } from 'vs/workbench/services/editor/common/editorService'; import { Schemas } from 'vs/base/common/network'; import { ILabelService } from 'vs/platform/label/common/label'; -import { IRawTerminalTabLayoutInfo, ITerminalConfiguration, ITerminalEnvironment, ITerminalsLayoutInfo, ITerminalsLayoutInfoById, ITerminalTabLayoutInfoById, TERMINAL_CONFIG_SECTION } from 'vs/workbench/contrib/terminal/common/terminal'; import { IEnvironmentVariableService, ISerializableEnvironmentVariableCollection } from 'vs/workbench/contrib/terminal/common/environmentVariable'; -import { ITerminalLaunchError } from 'vs/platform/terminal/common/terminal'; +import { IRawTerminalTabLayoutInfo, ITerminalEnvironment, ITerminalLaunchError, ITerminalsLayoutInfo, ITerminalsLayoutInfoById, ITerminalTabLayoutInfoById } from 'vs/platform/terminal/common/terminal'; +import { ITerminalConfiguration, TERMINAL_CONFIG_SECTION } from 'vs/workbench/contrib/terminal/common/terminal'; export const REMOTE_TERMINAL_CHANNEL_NAME = 'remoteterminal'; diff --git a/src/vs/workbench/contrib/terminal/common/terminal.ts b/src/vs/workbench/contrib/terminal/common/terminal.ts index ab8f470d608..7e20d963f0c 100644 --- a/src/vs/workbench/contrib/terminal/common/terminal.ts +++ b/src/vs/workbench/contrib/terminal/common/terminal.ts @@ -169,10 +169,6 @@ export interface ITerminalFont { charHeight?: number; } -export interface ITerminalEnvironment { - [key: string]: string | null; -} - export interface IRemoteTerminalAttachTarget { id: number; pid: number; @@ -204,9 +200,6 @@ export interface IRawTerminalsLayoutInfo { tabs: IRawTerminalTabLayoutInfo[]; } -export type ITerminalsLayoutInfo = IRawTerminalsLayoutInfo; -export type ITerminalsLayoutInfoById = IRawTerminalsLayoutInfo; - /** * Provides access to native Windows calls that can be injected into non-native layers. */ diff --git a/src/vs/workbench/contrib/terminal/common/terminalEnvironment.ts b/src/vs/workbench/contrib/terminal/common/terminalEnvironment.ts index 27b144f5908..48b4f7fe15e 100644 --- a/src/vs/workbench/contrib/terminal/common/terminalEnvironment.ts +++ b/src/vs/workbench/contrib/terminal/common/terminalEnvironment.ts @@ -7,11 +7,10 @@ import * as path from 'vs/base/common/path'; import * as platform from 'vs/base/common/platform'; import { URI as Uri } from 'vs/base/common/uri'; import { IWorkspaceFolder } from 'vs/platform/workspace/common/workspace'; -import { ITerminalEnvironment } from 'vs/workbench/contrib/terminal/common/terminal'; import { IConfigurationResolverService } from 'vs/workbench/services/configurationResolver/common/configurationResolver'; import { sanitizeProcessEnvironment } from 'vs/base/common/processes'; import { ILogService } from 'vs/platform/log/common/log'; -import { IShellLaunchConfig } from 'vs/platform/terminal/common/terminal'; +import { IShellLaunchConfig, ITerminalEnvironment } from 'vs/platform/terminal/common/terminal'; /** * This module contains utility functions related to the environment, cwd and paths.