diff --git a/package.json b/package.json index 429c22c8770..76a826f16f4 100644 --- a/package.json +++ b/package.json @@ -87,14 +87,14 @@ "vscode-oniguruma": "1.7.0", "vscode-regexpp": "^3.1.0", "vscode-textmate": "9.0.0", - "xterm": "5.2.0-beta.49", - "xterm-addon-canvas": "0.4.0-beta.14", + "xterm": "5.2.0-beta.53", + "xterm-addon-canvas": "0.4.0-beta.15", "xterm-addon-image": "0.4.0", - "xterm-addon-search": "0.12.0-beta.5", - "xterm-addon-serialize": "0.10.0-beta.2", + "xterm-addon-search": "0.12.0-beta.6", + "xterm-addon-serialize": "0.10.0-beta.3", "xterm-addon-unicode11": "0.5.0", - "xterm-addon-webgl": "0.15.0-beta.15", - "xterm-headless": "5.2.0-beta.49", + "xterm-addon-webgl": "0.15.0-beta.16", + "xterm-headless": "5.2.0-beta.53", "yauzl": "^2.9.2", "yazl": "^2.4.3" }, diff --git a/remote/package.json b/remote/package.json index 63698a26c6b..13b1be52188 100644 --- a/remote/package.json +++ b/remote/package.json @@ -24,14 +24,14 @@ "vscode-oniguruma": "1.7.0", "vscode-regexpp": "^3.1.0", "vscode-textmate": "9.0.0", - "xterm": "5.2.0-beta.49", - "xterm-addon-canvas": "0.4.0-beta.14", + "xterm": "5.2.0-beta.53", + "xterm-addon-canvas": "0.4.0-beta.15", "xterm-addon-image": "0.4.0", - "xterm-addon-search": "0.12.0-beta.5", - "xterm-addon-serialize": "0.10.0-beta.2", + "xterm-addon-search": "0.12.0-beta.6", + "xterm-addon-serialize": "0.10.0-beta.3", "xterm-addon-unicode11": "0.5.0", - "xterm-addon-webgl": "0.15.0-beta.15", - "xterm-headless": "5.2.0-beta.49", + "xterm-addon-webgl": "0.15.0-beta.16", + "xterm-headless": "5.2.0-beta.53", "yauzl": "^2.9.2", "yazl": "^2.4.3" }, diff --git a/remote/web/package.json b/remote/web/package.json index c91b21e6dff..188ecf1f1e3 100644 --- a/remote/web/package.json +++ b/remote/web/package.json @@ -11,11 +11,11 @@ "tas-client-umd": "0.1.8", "vscode-oniguruma": "1.7.0", "vscode-textmate": "9.0.0", - "xterm": "5.2.0-beta.49", - "xterm-addon-canvas": "0.4.0-beta.14", + "xterm": "5.2.0-beta.53", + "xterm-addon-canvas": "0.4.0-beta.15", "xterm-addon-image": "0.4.0", - "xterm-addon-search": "0.12.0-beta.5", + "xterm-addon-search": "0.12.0-beta.6", "xterm-addon-unicode11": "0.5.0", - "xterm-addon-webgl": "0.15.0-beta.15" + "xterm-addon-webgl": "0.15.0-beta.16" } } diff --git a/remote/web/yarn.lock b/remote/web/yarn.lock index 5e771f54176..218d9a8388f 100644 --- a/remote/web/yarn.lock +++ b/remote/web/yarn.lock @@ -68,32 +68,32 @@ vscode-textmate@9.0.0: resolved "https://registry.yarnpkg.com/vscode-textmate/-/vscode-textmate-9.0.0.tgz#313c6c8792b0507aef35aeb81b6b370b37c44d6c" integrity sha512-Cl65diFGxz7gpwbav10HqiY/eVYTO1sjQpmRmV991Bj7wAoOAjGQ97PpQcXorDE2Uc4hnGWLY17xme+5t6MlSg== -xterm-addon-canvas@0.4.0-beta.14: - version "0.4.0-beta.14" - resolved "https://registry.yarnpkg.com/xterm-addon-canvas/-/xterm-addon-canvas-0.4.0-beta.14.tgz#ed8b5d2a839608ae5c9c73d1fa11f6ffb5f92be7" - integrity sha512-FBlHGuSjQMuujwOBhuoOO16iLHgeQ9ucOApsTS+Hf0ZpOnFVQX3JQDYAWlxRIpfDa/HiEGYPhAgFjqqFMtXL4Q== +xterm-addon-canvas@0.4.0-beta.15: + version "0.4.0-beta.15" + resolved "https://registry.yarnpkg.com/xterm-addon-canvas/-/xterm-addon-canvas-0.4.0-beta.15.tgz#8e181ec587c9b339619d363f80becb8db48435e3" + integrity sha512-fNwkh5locfVgXn+t9tmtKYaGJaemykPc3fu+RVhrbMrAJTYIM0rIXLypB8VKgeDGhkiOwXQaf7xwU2LpcCIZNw== xterm-addon-image@0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/xterm-addon-image/-/xterm-addon-image-0.4.0.tgz#36e98fa892db11755a5f6e9654f924e876e29bf8" integrity sha512-3wumCJo4WTzxvecSMxJ7XtpVQeFe4gE2cdHCyUdo7zagVkS18YXJacGx6DjlAIccdJn6/LhGuD99xOSSvYx9Gw== -xterm-addon-search@0.12.0-beta.5: - version "0.12.0-beta.5" - resolved "https://registry.yarnpkg.com/xterm-addon-search/-/xterm-addon-search-0.12.0-beta.5.tgz#36bae02306a54837b86beebbf4ac1b9b19a0d567" - integrity sha512-ci3SMkjyGR+C9bRaeQerLY8WneJY6oeI/YLkM80ZgH4C3ViuD2foZav2AbcW5I7uwaHz3CFjlKAY6Nf00TRG8g== +xterm-addon-search@0.12.0-beta.6: + version "0.12.0-beta.6" + resolved "https://registry.yarnpkg.com/xterm-addon-search/-/xterm-addon-search-0.12.0-beta.6.tgz#1c9afb69cca586a94e8965712387ee210ccd8d64" + integrity sha512-DJSDhdm7zqgUBGs4oq/yBvBxTgos3DaBveBx8j+KYRPPeHmfLa8mex1rC5iYTxsk80uzVny5VQgMrpMgAfZQyg== xterm-addon-unicode11@0.5.0: version "0.5.0" resolved "https://registry.yarnpkg.com/xterm-addon-unicode11/-/xterm-addon-unicode11-0.5.0.tgz#41c0d96acc1e3bb6c6596eee64e163b6bca74be7" integrity sha512-Jm4/g4QiTxiKiTbYICQgC791ubhIZyoIwxAIgOW8z8HWFNY+lwk+dwaKEaEeGBfM48Vk8fklsUW9u/PlenYEBg== -xterm-addon-webgl@0.15.0-beta.15: - version "0.15.0-beta.15" - resolved "https://registry.yarnpkg.com/xterm-addon-webgl/-/xterm-addon-webgl-0.15.0-beta.15.tgz#bc9422425c27ebd86059f6b2465f01c5ec07071a" - integrity sha512-0zFn6Fsvo7jbSWO2TwNUHlAoceWWb2EYI/SgxN+H6+4kpUV1clP53pTQBdUpAtPEjJsVgxERqOPKBFu14TnR0w== +xterm-addon-webgl@0.15.0-beta.16: + version "0.15.0-beta.16" + resolved "https://registry.yarnpkg.com/xterm-addon-webgl/-/xterm-addon-webgl-0.15.0-beta.16.tgz#69ae1e3743737913007569e33ad58f4660fadddd" + integrity sha512-T08dObBpZhOh8LtqG9nV94yY9x7ONhnHMggTDUXzJvZ3SfrzgoDSDMKF84KhZsCtZShhJyQxR6+RNWX1nJZ8eA== -xterm@5.2.0-beta.49: - version "5.2.0-beta.49" - resolved "https://registry.yarnpkg.com/xterm/-/xterm-5.2.0-beta.49.tgz#0c9c176862019800172fc016d136300d1b6531ce" - integrity sha512-kfdiYljgAmjM9VpkNuuDcUJJHB62UiSTVZRYJbQdOU7jCi9mnUTPWov+5PnZIgONGts3t3Dv5kdbNF4UH53uTA== +xterm@5.2.0-beta.53: + version "5.2.0-beta.53" + resolved "https://registry.yarnpkg.com/xterm/-/xterm-5.2.0-beta.53.tgz#4a9b618b675f5b6b860a7205c8ff0dfba0879ccd" + integrity sha512-REM8Jhffs23MqzF3MxdeODB8cr3ewqULN9Tl9jJdKQOpXBnLXcUKAeGeRVuFyeZYSoXH7fJicX1EJcsW8rPvZw== diff --git a/remote/yarn.lock b/remote/yarn.lock index b6ad713eac2..a4f4c740990 100644 --- a/remote/yarn.lock +++ b/remote/yarn.lock @@ -836,45 +836,45 @@ wrappy@1: resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= -xterm-addon-canvas@0.4.0-beta.14: - version "0.4.0-beta.14" - resolved "https://registry.yarnpkg.com/xterm-addon-canvas/-/xterm-addon-canvas-0.4.0-beta.14.tgz#ed8b5d2a839608ae5c9c73d1fa11f6ffb5f92be7" - integrity sha512-FBlHGuSjQMuujwOBhuoOO16iLHgeQ9ucOApsTS+Hf0ZpOnFVQX3JQDYAWlxRIpfDa/HiEGYPhAgFjqqFMtXL4Q== +xterm-addon-canvas@0.4.0-beta.15: + version "0.4.0-beta.15" + resolved "https://registry.yarnpkg.com/xterm-addon-canvas/-/xterm-addon-canvas-0.4.0-beta.15.tgz#8e181ec587c9b339619d363f80becb8db48435e3" + integrity sha512-fNwkh5locfVgXn+t9tmtKYaGJaemykPc3fu+RVhrbMrAJTYIM0rIXLypB8VKgeDGhkiOwXQaf7xwU2LpcCIZNw== xterm-addon-image@0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/xterm-addon-image/-/xterm-addon-image-0.4.0.tgz#36e98fa892db11755a5f6e9654f924e876e29bf8" integrity sha512-3wumCJo4WTzxvecSMxJ7XtpVQeFe4gE2cdHCyUdo7zagVkS18YXJacGx6DjlAIccdJn6/LhGuD99xOSSvYx9Gw== -xterm-addon-search@0.12.0-beta.5: - version "0.12.0-beta.5" - resolved "https://registry.yarnpkg.com/xterm-addon-search/-/xterm-addon-search-0.12.0-beta.5.tgz#36bae02306a54837b86beebbf4ac1b9b19a0d567" - integrity sha512-ci3SMkjyGR+C9bRaeQerLY8WneJY6oeI/YLkM80ZgH4C3ViuD2foZav2AbcW5I7uwaHz3CFjlKAY6Nf00TRG8g== +xterm-addon-search@0.12.0-beta.6: + version "0.12.0-beta.6" + resolved "https://registry.yarnpkg.com/xterm-addon-search/-/xterm-addon-search-0.12.0-beta.6.tgz#1c9afb69cca586a94e8965712387ee210ccd8d64" + integrity sha512-DJSDhdm7zqgUBGs4oq/yBvBxTgos3DaBveBx8j+KYRPPeHmfLa8mex1rC5iYTxsk80uzVny5VQgMrpMgAfZQyg== -xterm-addon-serialize@0.10.0-beta.2: - version "0.10.0-beta.2" - resolved "https://registry.yarnpkg.com/xterm-addon-serialize/-/xterm-addon-serialize-0.10.0-beta.2.tgz#331a5f54ab1380e4d5fcde7f03ac28b138efa803" - integrity sha512-cCUoWGTFcBT4kDNhUP/Lohl5hJStEtxprJErYdhvT8lorPhA+zai6Sv0sT3A5Je5nmG2rSrS9hPZUj6kmPjGvw== +xterm-addon-serialize@0.10.0-beta.3: + version "0.10.0-beta.3" + resolved "https://registry.yarnpkg.com/xterm-addon-serialize/-/xterm-addon-serialize-0.10.0-beta.3.tgz#3fd186421a26c1ebcf448c699103f840d97db049" + integrity sha512-nlnOS+5If/VOlekRh7rJmuO7bkpzyZd56p0JijQRp8KUrwPrlGFn0AEUcy8291d9L6A1RTCDU+E4YiRobAPoVA== xterm-addon-unicode11@0.5.0: version "0.5.0" resolved "https://registry.yarnpkg.com/xterm-addon-unicode11/-/xterm-addon-unicode11-0.5.0.tgz#41c0d96acc1e3bb6c6596eee64e163b6bca74be7" integrity sha512-Jm4/g4QiTxiKiTbYICQgC791ubhIZyoIwxAIgOW8z8HWFNY+lwk+dwaKEaEeGBfM48Vk8fklsUW9u/PlenYEBg== -xterm-addon-webgl@0.15.0-beta.15: - version "0.15.0-beta.15" - resolved "https://registry.yarnpkg.com/xterm-addon-webgl/-/xterm-addon-webgl-0.15.0-beta.15.tgz#bc9422425c27ebd86059f6b2465f01c5ec07071a" - integrity sha512-0zFn6Fsvo7jbSWO2TwNUHlAoceWWb2EYI/SgxN+H6+4kpUV1clP53pTQBdUpAtPEjJsVgxERqOPKBFu14TnR0w== +xterm-addon-webgl@0.15.0-beta.16: + version "0.15.0-beta.16" + resolved "https://registry.yarnpkg.com/xterm-addon-webgl/-/xterm-addon-webgl-0.15.0-beta.16.tgz#69ae1e3743737913007569e33ad58f4660fadddd" + integrity sha512-T08dObBpZhOh8LtqG9nV94yY9x7ONhnHMggTDUXzJvZ3SfrzgoDSDMKF84KhZsCtZShhJyQxR6+RNWX1nJZ8eA== -xterm-headless@5.2.0-beta.49: - version "5.2.0-beta.49" - resolved "https://registry.yarnpkg.com/xterm-headless/-/xterm-headless-5.2.0-beta.49.tgz#ac6e833fa025441503db27980f40ab4ae549a3f4" - integrity sha512-jaNvl5f8Qx5xG1i79/7pzlAzUMC0Or8sPW7v/R7bw5MenMZPE5sE0pYNYW3xWB91voBPbGuXvrMdtraY8gL/Og== +xterm-headless@5.2.0-beta.53: + version "5.2.0-beta.53" + resolved "https://registry.yarnpkg.com/xterm-headless/-/xterm-headless-5.2.0-beta.53.tgz#30c7853c44476f5d388b43449de40362b9e25c21" + integrity sha512-DvRoGp3gSZ3OkZaCOnIJCrXlSpN/Xghf/XacTKnuMTQQhBylD7CwxHmdqPuS3G1rVqnUnlJKAII7JcIZkW5BeQ== -xterm@5.2.0-beta.49: - version "5.2.0-beta.49" - resolved "https://registry.yarnpkg.com/xterm/-/xterm-5.2.0-beta.49.tgz#0c9c176862019800172fc016d136300d1b6531ce" - integrity sha512-kfdiYljgAmjM9VpkNuuDcUJJHB62UiSTVZRYJbQdOU7jCi9mnUTPWov+5PnZIgONGts3t3Dv5kdbNF4UH53uTA== +xterm@5.2.0-beta.53: + version "5.2.0-beta.53" + resolved "https://registry.yarnpkg.com/xterm/-/xterm-5.2.0-beta.53.tgz#4a9b618b675f5b6b860a7205c8ff0dfba0879ccd" + integrity sha512-REM8Jhffs23MqzF3MxdeODB8cr3ewqULN9Tl9jJdKQOpXBnLXcUKAeGeRVuFyeZYSoXH7fJicX1EJcsW8rPvZw== yallist@^4.0.0: version "4.0.0" diff --git a/src/vs/platform/terminal/common/terminal.ts b/src/vs/platform/terminal/common/terminal.ts index e4949f707b9..3bf2e8902dd 100644 --- a/src/vs/platform/terminal/common/terminal.ts +++ b/src/vs/platform/terminal/common/terminal.ts @@ -641,7 +641,18 @@ export interface ITerminalLaunchError { export interface IProcessReadyEvent { pid: number; cwd: string; - requiresWindowsMode?: boolean; + windowsPty: IProcessReadyWindowsPty | undefined; +} + +export interface IProcessReadyWindowsPty { + /** + * What pty emulation backend is being used. + */ + backend: 'conpty' | 'winpty'; + /** + * The Windows build version (eg. 19045) + */ + buildNumber: number; } /** diff --git a/src/vs/platform/terminal/node/ptyHostService.ts b/src/vs/platform/terminal/node/ptyHostService.ts index a905d110850..c8d6d894035 100644 --- a/src/vs/platform/terminal/node/ptyHostService.ts +++ b/src/vs/platform/terminal/node/ptyHostService.ts @@ -13,7 +13,7 @@ import { RemoteLoggerChannelClient } from 'vs/platform/log/common/logIpc'; import { getResolvedShellEnv } from 'vs/platform/shell/node/shellEnv'; import { IPtyHostProcessReplayEvent } from 'vs/platform/terminal/common/capabilities/capabilities'; import { RequestStore } from 'vs/platform/terminal/common/requestStore'; -import { HeartbeatConstants, IHeartbeatService, IProcessDataEvent, IProcessProperty, IProcessPropertyMap, IPtyService, IRequestResolveVariablesEvent, ISerializedTerminalState, IShellLaunchConfig, ITerminalLaunchError, ITerminalProcessOptions, ITerminalProfile, ITerminalsLayoutInfo, ProcessPropertyType, TerminalIcon, TerminalIpcChannels, TerminalSettingId, TitleEventSource } from 'vs/platform/terminal/common/terminal'; +import { HeartbeatConstants, IHeartbeatService, IProcessDataEvent, IProcessProperty, IProcessPropertyMap, IProcessReadyEvent, IPtyService, IRequestResolveVariablesEvent, ISerializedTerminalState, IShellLaunchConfig, ITerminalLaunchError, ITerminalProcessOptions, ITerminalProfile, ITerminalsLayoutInfo, ProcessPropertyType, TerminalIcon, TerminalIpcChannels, TerminalSettingId, TitleEventSource } from 'vs/platform/terminal/common/terminal'; import { registerTerminalPlatformConfiguration } from 'vs/platform/terminal/common/terminalPlatformConfiguration'; import { IGetTerminalLayoutInfoArgs, IProcessDetails, ISetTerminalLayoutInfoArgs } from 'vs/platform/terminal/common/terminalProcess'; import { IPtyHostConnection, IPtyHostStarter } from 'vs/platform/terminal/node/ptyHost'; @@ -76,7 +76,7 @@ export class PtyHostService extends Disposable implements IPtyService { private readonly _onProcessData = this._register(new Emitter<{ id: number; event: IProcessDataEvent | string }>()); readonly onProcessData = this._onProcessData.event; - private readonly _onProcessReady = this._register(new Emitter<{ id: number; event: { pid: number; cwd: string } }>()); + private readonly _onProcessReady = this._register(new Emitter<{ id: number; event: IProcessReadyEvent }>()); readonly onProcessReady = this._onProcessReady.event; private readonly _onProcessReplay = this._register(new Emitter<{ id: number; event: IPtyHostProcessReplayEvent }>()); readonly onProcessReplay = this._onProcessReplay.event; diff --git a/src/vs/platform/terminal/node/ptyService.ts b/src/vs/platform/terminal/node/ptyService.ts index 6c43d68a48a..18dc2e0240e 100644 --- a/src/vs/platform/terminal/node/ptyService.ts +++ b/src/vs/platform/terminal/node/ptyService.ts @@ -52,7 +52,7 @@ export class PtyService extends Disposable implements IPtyService { readonly onProcessData = this._onProcessData.event; private readonly _onProcessReplay = this._register(new Emitter<{ id: number; event: IPtyHostProcessReplayEvent }>()); readonly onProcessReplay = this._onProcessReplay.event; - private readonly _onProcessReady = this._register(new Emitter<{ id: number; event: { pid: number; cwd: string } }>()); + private readonly _onProcessReady = this._register(new Emitter<{ id: number; event: IProcessReadyEvent }>()); readonly onProcessReady = this._onProcessReady.event; private readonly _onProcessExit = this._register(new Emitter<{ id: number; event: number | undefined }>()); readonly onProcessExit = this._onProcessExit.event; @@ -720,7 +720,7 @@ class PersistentTerminalProcess extends Disposable { return result; } - this._onProcessReady.fire({ pid: this._pid, cwd: this._cwd, requiresWindowsMode: isWindows && getWindowsBuildNumber() < 21376 }); + this._onProcessReady.fire({ pid: this._pid, cwd: this._cwd, windowsPty: this._terminalProcess.getWindowsPty() }); this._onDidChangeProperty.fire({ type: ProcessPropertyType.Title, value: this._terminalProcess.currentTitle }); this._onDidChangeProperty.fire({ type: ProcessPropertyType.ShellType, value: this._terminalProcess.shellType }); this.triggerReplay(); diff --git a/src/vs/platform/terminal/node/terminalProcess.ts b/src/vs/platform/terminal/node/terminalProcess.ts index 01d503a174f..c641ccf6d91 100644 --- a/src/vs/platform/terminal/node/terminalProcess.ts +++ b/src/vs/platform/terminal/node/terminalProcess.ts @@ -15,7 +15,7 @@ import { Promises } from 'vs/base/node/pfs'; import { localize } from 'vs/nls'; import { ILogService } from 'vs/platform/log/common/log'; import { IProductService } from 'vs/platform/product/common/productService'; -import { FlowControlConstants, IShellLaunchConfig, ITerminalChildProcess, ITerminalLaunchError, IProcessProperty, IProcessPropertyMap as IProcessPropertyMap, ProcessPropertyType, TerminalShellType, IProcessReadyEvent, ITerminalProcessOptions, PosixShellType } from 'vs/platform/terminal/common/terminal'; +import { FlowControlConstants, IShellLaunchConfig, ITerminalChildProcess, ITerminalLaunchError, IProcessProperty, IProcessPropertyMap as IProcessPropertyMap, ProcessPropertyType, TerminalShellType, IProcessReadyEvent, ITerminalProcessOptions, PosixShellType, IProcessReadyWindowsPty } from 'vs/platform/terminal/common/terminal'; import { ChildProcessMonitor } from 'vs/platform/terminal/node/childProcessMonitor'; import { findExecutable, getShellIntegrationInjection, getWindowsBuildNumber, IShellIntegrationConfigInjection } from 'vs/platform/terminal/node/terminalEnvironment'; import { WindowsShellHelper } from 'vs/platform/terminal/node/windowsShellHelper'; @@ -398,7 +398,11 @@ export class TerminalProcess extends Disposable implements ITerminalChildProcess } private _sendProcessId(pid: number) { - this._onProcessReady.fire({ pid, cwd: this._initialCwd, requiresWindowsMode: isWindows && getWindowsBuildNumber() < 21376 }); + this._onProcessReady.fire({ + pid, + cwd: this._initialCwd, + windowsPty: this.getWindowsPty() + }); } private _sendProcessTitle(ptyProcess: IPty): void { @@ -616,6 +620,13 @@ export class TerminalProcess extends Disposable implements ITerminalChildProcess getLatency(): Promise { return Promise.resolve(0); } + + getWindowsPty(): IProcessReadyWindowsPty | undefined { + return isWindows ? { + backend: 'useConpty' in this._ptyOptions && this._ptyOptions.useConpty ? 'conpty' : 'winpty', + buildNumber: getWindowsBuildNumber() + } : undefined; + } } /** diff --git a/src/vs/workbench/api/browser/mainThreadTerminalService.ts b/src/vs/workbench/api/browser/mainThreadTerminalService.ts index 5e58d3a7e82..c00e070b0f7 100644 --- a/src/vs/workbench/api/browser/mainThreadTerminalService.ts +++ b/src/vs/workbench/api/browser/mainThreadTerminalService.ts @@ -10,7 +10,7 @@ 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 { IProcessProperty, IShellLaunchConfig, IShellLaunchConfigDto, ITerminalOutputMatch, ITerminalOutputMatcher, ProcessPropertyType, TerminalExitReason, TerminalLocation } from 'vs/platform/terminal/common/terminal'; +import { IProcessProperty, IProcessReadyWindowsPty, IShellLaunchConfig, IShellLaunchConfigDto, ITerminalOutputMatch, ITerminalOutputMatcher, ProcessPropertyType, TerminalExitReason, TerminalLocation } from 'vs/platform/terminal/common/terminal'; import { TerminalDataBufferer } from 'vs/platform/terminal/common/terminalDataBuffering'; import { ITerminalEditorService, ITerminalExternalLinkProvider, ITerminalGroupService, ITerminalInstance, ITerminalLink, ITerminalService } from 'vs/workbench/contrib/terminal/browser/terminal'; import { TerminalProcessExtHostProxy } from 'vs/workbench/contrib/terminal/browser/terminalProcessExtHostProxy'; @@ -375,8 +375,8 @@ export class MainThreadTerminalService implements MainThreadTerminalServiceShape this._terminalProcessProxies.get(terminalId)?.emitData(data); } - public $sendProcessReady(terminalId: number, pid: number, cwd: string): void { - this._terminalProcessProxies.get(terminalId)?.emitReady(pid, cwd); + public $sendProcessReady(terminalId: number, pid: number, cwd: string, windowsPty: IProcessReadyWindowsPty | undefined): void { + this._terminalProcessProxies.get(terminalId)?.emitReady(pid, cwd, windowsPty); } public $sendProcessProperty(terminalId: number, property: IProcessProperty): void { diff --git a/src/vs/workbench/api/common/extHost.protocol.ts b/src/vs/workbench/api/common/extHost.protocol.ts index aa6631d5e9e..f6bd5756f75 100644 --- a/src/vs/workbench/api/common/extHost.protocol.ts +++ b/src/vs/workbench/api/common/extHost.protocol.ts @@ -42,7 +42,7 @@ import { IRemoteConnectionData, TunnelDescription } from 'vs/platform/remote/com import { ClassifiedEvent, IGDPRProperty, OmitMetadata, StrictPropertyCheck } from 'vs/platform/telemetry/common/gdprTypings'; import { TelemetryLevel } from 'vs/platform/telemetry/common/telemetry'; import { ISerializableEnvironmentDescriptionMap, ISerializableEnvironmentVariableCollection } from 'vs/platform/terminal/common/environmentVariable'; -import { ICreateContributedTerminalProfileOptions, IProcessProperty, IShellLaunchConfigDto, ITerminalEnvironment, ITerminalLaunchError, ITerminalProfile, TerminalExitReason, TerminalLocation } from 'vs/platform/terminal/common/terminal'; +import { ICreateContributedTerminalProfileOptions, IProcessProperty, IProcessReadyWindowsPty, IShellLaunchConfigDto, ITerminalEnvironment, ITerminalLaunchError, ITerminalProfile, TerminalExitReason, TerminalLocation } from 'vs/platform/terminal/common/terminal'; import { ProvidedPortAttributes, TunnelCreationOptions, TunnelOptions, TunnelPrivacyId, TunnelProviderFeatures } from 'vs/platform/tunnel/common/tunnel'; import { EditSessionIdentityMatch } from 'vs/platform/workspace/common/editSessions'; import { WorkspaceTrustRequestOptions } from 'vs/platform/workspace/common/workspaceTrust'; @@ -506,7 +506,7 @@ export interface MainThreadTerminalServiceShape extends IDisposable { // Process $sendProcessData(terminalId: number, data: string): void; - $sendProcessReady(terminalId: number, pid: number, cwd: string): void; + $sendProcessReady(terminalId: number, pid: number, cwd: string, windowsPty: IProcessReadyWindowsPty | undefined): void; $sendProcessProperty(terminalId: number, property: IProcessProperty): void; $sendProcessExit(terminalId: number, exitCode: number | undefined): void; } diff --git a/src/vs/workbench/api/common/extHostTerminalService.ts b/src/vs/workbench/api/common/extHostTerminalService.ts index 6dabdb4f4df..6132bd21a93 100644 --- a/src/vs/workbench/api/common/extHostTerminalService.ts +++ b/src/vs/workbench/api/common/extHostTerminalService.ts @@ -334,7 +334,7 @@ class ExtHostPseudoterminal implements ITerminalChildProcess { this._pty.setDimensions?.(initialDimensions); } - this._onProcessReady.fire({ pid: -1, cwd: '' }); + this._onProcessReady.fire({ pid: -1, cwd: '', windowsPty: undefined }); } } @@ -583,7 +583,7 @@ export abstract class BaseExtHostTerminalService extends Disposable implements I protected _setupExtHostProcessListeners(id: number, p: ITerminalChildProcess): IDisposable { const disposables = new DisposableStore(); - disposables.add(p.onProcessReady(e => this._proxy.$sendProcessReady(id, e.pid, e.cwd))); + disposables.add(p.onProcessReady(e => this._proxy.$sendProcessReady(id, e.pid, e.cwd, e.windowsPty))); disposables.add(p.onDidChangeProperty(property => this._proxy.$sendProcessProperty(id, property))); // Buffer data events to reduce the amount of messages going to the renderer diff --git a/src/vs/workbench/contrib/terminal/browser/terminalInstance.ts b/src/vs/workbench/contrib/terminal/browser/terminalInstance.ts index e1d5a5b6896..f7826508e51 100644 --- a/src/vs/workbench/contrib/terminal/browser/terminalInstance.ts +++ b/src/vs/workbench/contrib/terminal/browser/terminalInstance.ts @@ -788,9 +788,7 @@ export class TerminalInstance extends Disposable implements ITerminalInstance { if (this._processManager.os) { lineDataEventAddon.setOperatingSystem(this._processManager.os); } - if (this._processManager.os === OperatingSystem.Windows) { - xterm.raw.options.windowsMode = processTraits.requiresWindowsMode || false; - } + xterm.raw.options.windowsPty = processTraits.windowsPty; }); this._processManager.onRestoreCommands(e => this.xterm?.shellIntegration.deserialize(e)); diff --git a/src/vs/workbench/contrib/terminal/browser/terminalProcessExtHostProxy.ts b/src/vs/workbench/contrib/terminal/browser/terminalProcessExtHostProxy.ts index 0f9d9bc942d..42f0658757c 100644 --- a/src/vs/workbench/contrib/terminal/browser/terminalProcessExtHostProxy.ts +++ b/src/vs/workbench/contrib/terminal/browser/terminalProcessExtHostProxy.ts @@ -64,7 +64,7 @@ export class TerminalProcessExtHostProxy extends Disposable implements ITerminal } emitReady(pid: number, cwd: string): void { - this._onProcessReady.fire({ pid, cwd }); + this._onProcessReady.fire({ pid, cwd, windowsPty: undefined }); } emitProcessProperty({ type, value }: IProcessProperty): void { diff --git a/src/vs/workbench/contrib/terminal/common/remoteTerminalChannel.ts b/src/vs/workbench/contrib/terminal/common/remoteTerminalChannel.ts index cbb9332e070..b6146df3919 100644 --- a/src/vs/workbench/contrib/terminal/common/remoteTerminalChannel.ts +++ b/src/vs/workbench/contrib/terminal/common/remoteTerminalChannel.ts @@ -18,7 +18,7 @@ import { IEditorService } from 'vs/workbench/services/editor/common/editorServic import { Schemas } from 'vs/base/common/network'; import { ILabelService } from 'vs/platform/label/common/label'; import { IEnvironmentVariableService } from 'vs/workbench/contrib/terminal/common/environmentVariable'; -import { IProcessDataEvent, IRequestResolveVariablesEvent, IShellLaunchConfigDto, ITerminalLaunchError, ITerminalProfile, ITerminalsLayoutInfo, ITerminalsLayoutInfoById, TerminalIcon, IProcessProperty, ProcessPropertyType, IProcessPropertyMap, TitleEventSource, ISerializedTerminalState, IPtyHostController, ITerminalProcessOptions } from 'vs/platform/terminal/common/terminal'; +import { IProcessDataEvent, IRequestResolveVariablesEvent, IShellLaunchConfigDto, ITerminalLaunchError, ITerminalProfile, ITerminalsLayoutInfo, ITerminalsLayoutInfoById, TerminalIcon, IProcessProperty, ProcessPropertyType, IProcessPropertyMap, TitleEventSource, ISerializedTerminalState, IPtyHostController, ITerminalProcessOptions, IProcessReadyEvent } from 'vs/platform/terminal/common/terminal'; import { IGetTerminalLayoutInfoArgs, IProcessDetails, ISetTerminalLayoutInfoArgs } from 'vs/platform/terminal/common/terminalProcess'; import { IProcessEnvironment, OperatingSystem } from 'vs/base/common/platform'; import { ICompleteTerminalConfiguration } from 'vs/workbench/contrib/terminal/common/terminal'; @@ -80,8 +80,8 @@ export class RemoteTerminalChannelClient implements IPtyHostController { get onProcessExit(): Event<{ id: number; event: number | undefined }> { return this._channel.listen<{ id: number; event: number | undefined }>('$onProcessExitEvent'); } - get onProcessReady(): Event<{ id: number; event: { pid: number; cwd: string; requireWindowsMode?: boolean } }> { - return this._channel.listen<{ id: number; event: { pid: number; cwd: string; requiresWindowsMode?: boolean } }>('$onProcessReadyEvent'); + get onProcessReady(): Event<{ id: number; event: IProcessReadyEvent }> { + return this._channel.listen<{ id: number; event: IProcessReadyEvent }>('$onProcessReadyEvent'); } get onProcessReplay(): Event<{ id: number; event: IPtyHostProcessReplayEvent }> { return this._channel.listen<{ id: number; event: IPtyHostProcessReplayEvent }>('$onProcessReplayEvent'); diff --git a/src/vs/workbench/contrib/terminal/common/terminal.ts b/src/vs/workbench/contrib/terminal/common/terminal.ts index a948f19adda..c6cb5ccc901 100644 --- a/src/vs/workbench/contrib/terminal/common/terminal.ts +++ b/src/vs/workbench/contrib/terminal/common/terminal.ts @@ -8,7 +8,7 @@ import { Event } from 'vs/base/common/event'; import { IDisposable } from 'vs/base/common/lifecycle'; import { IProcessEnvironment, OperatingSystem } from 'vs/base/common/platform'; import { IExtensionPointDescriptor } from 'vs/workbench/services/extensions/common/extensionsRegistry'; -import { IProcessDataEvent, IProcessReadyEvent, IShellLaunchConfig, ITerminalChildProcess, ITerminalLaunchError, ITerminalProfile, ITerminalProfileObject, ITerminalsLayoutInfo, ITerminalsLayoutInfoById, TerminalIcon, TerminalLocationString, IProcessProperty, TitleEventSource, ProcessPropertyType, IFixedTerminalDimensions, IExtensionTerminalProfile, ICreateContributedTerminalProfileOptions, IProcessPropertyMap, ITerminalEnvironment, ITerminalProcessOptions, ITerminalContributions } from 'vs/platform/terminal/common/terminal'; +import { IProcessDataEvent, IProcessReadyEvent, IShellLaunchConfig, ITerminalChildProcess, ITerminalLaunchError, ITerminalProfile, ITerminalProfileObject, ITerminalsLayoutInfo, ITerminalsLayoutInfoById, TerminalIcon, TerminalLocationString, IProcessProperty, TitleEventSource, ProcessPropertyType, IFixedTerminalDimensions, IExtensionTerminalProfile, ICreateContributedTerminalProfileOptions, IProcessPropertyMap, ITerminalEnvironment, ITerminalProcessOptions, ITerminalContributions, IProcessReadyWindowsPty } from 'vs/platform/terminal/common/terminal'; import { IEnvironmentVariableInfo } from 'vs/workbench/contrib/terminal/common/environmentVariable'; import { createDecorator } from 'vs/platform/instantiation/common/instantiation'; import { URI } from 'vs/base/common/uri'; @@ -428,7 +428,7 @@ export interface ITerminalProcessExtHostProxy extends IDisposable { emitData(data: string): void; emitProcessProperty(property: IProcessProperty): void; - emitReady(pid: number, cwd: string): void; + emitReady(pid: number, cwd: string, windowsPty: IProcessReadyWindowsPty | undefined): void; emitLatency(latency: number): void; emitExit(exitCode: number | undefined): void; diff --git a/src/vs/workbench/contrib/testing/browser/testingOutputTerminalService.ts b/src/vs/workbench/contrib/testing/browser/testingOutputTerminalService.ts index 66434b228eb..65ddb17f1f1 100644 --- a/src/vs/workbench/contrib/testing/browser/testingOutputTerminalService.ts +++ b/src/vs/workbench/contrib/testing/browser/testingOutputTerminalService.ts @@ -10,7 +10,7 @@ import { language } from 'vs/base/common/platform'; import { isDefined } from 'vs/base/common/types'; import { localize } from 'vs/nls'; import { createDecorator } from 'vs/platform/instantiation/common/instantiation'; -import { IProcessDataEvent, IProcessPropertyMap, IShellLaunchConfig, ITerminalChildProcess, ITerminalDimensionsOverride, ITerminalLaunchError, ProcessPropertyType, TerminalLocation, TerminalShellType } from 'vs/platform/terminal/common/terminal'; +import { IProcessDataEvent, IProcessPropertyMap, IProcessReadyEvent, IShellLaunchConfig, ITerminalChildProcess, ITerminalDimensionsOverride, ITerminalLaunchError, ProcessPropertyType, TerminalLocation, TerminalShellType } from 'vs/platform/terminal/common/terminal'; import { IViewsService } from 'vs/workbench/common/views'; import { ITerminalEditorService, ITerminalGroupService, ITerminalInstance, ITerminalService } from 'vs/workbench/contrib/terminal/browser/terminal'; import { TERMINAL_VIEW_ID } from 'vs/workbench/contrib/terminal/common/terminal'; @@ -238,13 +238,13 @@ class TestOutputProcess extends Disposable implements ITerminalChildProcess { public readonly onProcessData = this.processDataEmitter.event; public readonly onProcessExit = this._register(new Emitter()).event; - private readonly _onProcessReady = this._register(new Emitter<{ pid: number; cwd: string }>()); + private readonly _onProcessReady = this._register(new Emitter()); public readonly onProcessReady = this._onProcessReady.event; public readonly onProcessShellTypeChanged = this._register(new Emitter()).event; public start(): Promise { this.startedDeferred.complete(); - this._onProcessReady.fire({ pid: -1, cwd: '' }); + this._onProcessReady.fire({ pid: -1, cwd: '', windowsPty: undefined }); return Promise.resolve(undefined); } public shutdown(): void { diff --git a/src/vs/workbench/services/terminal/common/embedderTerminalService.ts b/src/vs/workbench/services/terminal/common/embedderTerminalService.ts index 15f6162fd50..93a79c67693 100644 --- a/src/vs/workbench/services/terminal/common/embedderTerminalService.ts +++ b/src/vs/workbench/services/terminal/common/embedderTerminalService.ts @@ -6,7 +6,7 @@ import { InstantiationType, registerSingleton } from 'vs/platform/instantiation/common/extensions'; import { createDecorator } from 'vs/platform/instantiation/common/instantiation'; import { Emitter, Event } from 'vs/base/common/event'; -import { IProcessDataEvent, IProcessProperty, IProcessPropertyMap, IShellLaunchConfig, ITerminalChildProcess, ITerminalLaunchError, ProcessPropertyType } from 'vs/platform/terminal/common/terminal'; +import { IProcessDataEvent, IProcessProperty, IProcessPropertyMap, IProcessReadyEvent, IShellLaunchConfig, ITerminalChildProcess, ITerminalLaunchError, ProcessPropertyType } from 'vs/platform/terminal/common/terminal'; import { Disposable } from 'vs/base/common/lifecycle'; export const IEmbedderTerminalService = createDecorator('embedderTerminalService'); @@ -77,7 +77,7 @@ class EmbedderTerminalProcess extends Disposable implements ITerminalChildProces readonly shouldPersist = false; readonly onProcessData: Event; - readonly #onProcessReady = this._register(new Emitter<{ pid: number; cwd: string }>()); + readonly #onProcessReady = this._register(new Emitter()); readonly onProcessReady = this.#onProcessReady.event; readonly #onDidChangeProperty = this._register(new Emitter>()); readonly onDidChangeProperty = this.#onDidChangeProperty.event; @@ -104,7 +104,7 @@ class EmbedderTerminalProcess extends Disposable implements ITerminalChildProces } async start(): Promise { - this.#onProcessReady.fire({ pid: -1, cwd: '' }); + this.#onProcessReady.fire({ pid: -1, cwd: '', windowsPty: undefined }); this.#pty.open(); return undefined; } diff --git a/yarn.lock b/yarn.lock index b58fcae6873..22c665aa70a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -10453,45 +10453,45 @@ xtend@~2.1.1: dependencies: object-keys "~0.4.0" -xterm-addon-canvas@0.4.0-beta.14: - version "0.4.0-beta.14" - resolved "https://registry.yarnpkg.com/xterm-addon-canvas/-/xterm-addon-canvas-0.4.0-beta.14.tgz#ed8b5d2a839608ae5c9c73d1fa11f6ffb5f92be7" - integrity sha512-FBlHGuSjQMuujwOBhuoOO16iLHgeQ9ucOApsTS+Hf0ZpOnFVQX3JQDYAWlxRIpfDa/HiEGYPhAgFjqqFMtXL4Q== +xterm-addon-canvas@0.4.0-beta.15: + version "0.4.0-beta.15" + resolved "https://registry.yarnpkg.com/xterm-addon-canvas/-/xterm-addon-canvas-0.4.0-beta.15.tgz#8e181ec587c9b339619d363f80becb8db48435e3" + integrity sha512-fNwkh5locfVgXn+t9tmtKYaGJaemykPc3fu+RVhrbMrAJTYIM0rIXLypB8VKgeDGhkiOwXQaf7xwU2LpcCIZNw== xterm-addon-image@0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/xterm-addon-image/-/xterm-addon-image-0.4.0.tgz#36e98fa892db11755a5f6e9654f924e876e29bf8" integrity sha512-3wumCJo4WTzxvecSMxJ7XtpVQeFe4gE2cdHCyUdo7zagVkS18YXJacGx6DjlAIccdJn6/LhGuD99xOSSvYx9Gw== -xterm-addon-search@0.12.0-beta.5: - version "0.12.0-beta.5" - resolved "https://registry.yarnpkg.com/xterm-addon-search/-/xterm-addon-search-0.12.0-beta.5.tgz#36bae02306a54837b86beebbf4ac1b9b19a0d567" - integrity sha512-ci3SMkjyGR+C9bRaeQerLY8WneJY6oeI/YLkM80ZgH4C3ViuD2foZav2AbcW5I7uwaHz3CFjlKAY6Nf00TRG8g== +xterm-addon-search@0.12.0-beta.6: + version "0.12.0-beta.6" + resolved "https://registry.yarnpkg.com/xterm-addon-search/-/xterm-addon-search-0.12.0-beta.6.tgz#1c9afb69cca586a94e8965712387ee210ccd8d64" + integrity sha512-DJSDhdm7zqgUBGs4oq/yBvBxTgos3DaBveBx8j+KYRPPeHmfLa8mex1rC5iYTxsk80uzVny5VQgMrpMgAfZQyg== -xterm-addon-serialize@0.10.0-beta.2: - version "0.10.0-beta.2" - resolved "https://registry.yarnpkg.com/xterm-addon-serialize/-/xterm-addon-serialize-0.10.0-beta.2.tgz#331a5f54ab1380e4d5fcde7f03ac28b138efa803" - integrity sha512-cCUoWGTFcBT4kDNhUP/Lohl5hJStEtxprJErYdhvT8lorPhA+zai6Sv0sT3A5Je5nmG2rSrS9hPZUj6kmPjGvw== +xterm-addon-serialize@0.10.0-beta.3: + version "0.10.0-beta.3" + resolved "https://registry.yarnpkg.com/xterm-addon-serialize/-/xterm-addon-serialize-0.10.0-beta.3.tgz#3fd186421a26c1ebcf448c699103f840d97db049" + integrity sha512-nlnOS+5If/VOlekRh7rJmuO7bkpzyZd56p0JijQRp8KUrwPrlGFn0AEUcy8291d9L6A1RTCDU+E4YiRobAPoVA== xterm-addon-unicode11@0.5.0: version "0.5.0" resolved "https://registry.yarnpkg.com/xterm-addon-unicode11/-/xterm-addon-unicode11-0.5.0.tgz#41c0d96acc1e3bb6c6596eee64e163b6bca74be7" integrity sha512-Jm4/g4QiTxiKiTbYICQgC791ubhIZyoIwxAIgOW8z8HWFNY+lwk+dwaKEaEeGBfM48Vk8fklsUW9u/PlenYEBg== -xterm-addon-webgl@0.15.0-beta.15: - version "0.15.0-beta.15" - resolved "https://registry.yarnpkg.com/xterm-addon-webgl/-/xterm-addon-webgl-0.15.0-beta.15.tgz#bc9422425c27ebd86059f6b2465f01c5ec07071a" - integrity sha512-0zFn6Fsvo7jbSWO2TwNUHlAoceWWb2EYI/SgxN+H6+4kpUV1clP53pTQBdUpAtPEjJsVgxERqOPKBFu14TnR0w== +xterm-addon-webgl@0.15.0-beta.16: + version "0.15.0-beta.16" + resolved "https://registry.yarnpkg.com/xterm-addon-webgl/-/xterm-addon-webgl-0.15.0-beta.16.tgz#69ae1e3743737913007569e33ad58f4660fadddd" + integrity sha512-T08dObBpZhOh8LtqG9nV94yY9x7ONhnHMggTDUXzJvZ3SfrzgoDSDMKF84KhZsCtZShhJyQxR6+RNWX1nJZ8eA== -xterm-headless@5.2.0-beta.49: - version "5.2.0-beta.49" - resolved "https://registry.yarnpkg.com/xterm-headless/-/xterm-headless-5.2.0-beta.49.tgz#ac6e833fa025441503db27980f40ab4ae549a3f4" - integrity sha512-jaNvl5f8Qx5xG1i79/7pzlAzUMC0Or8sPW7v/R7bw5MenMZPE5sE0pYNYW3xWB91voBPbGuXvrMdtraY8gL/Og== +xterm-headless@5.2.0-beta.53: + version "5.2.0-beta.53" + resolved "https://registry.yarnpkg.com/xterm-headless/-/xterm-headless-5.2.0-beta.53.tgz#30c7853c44476f5d388b43449de40362b9e25c21" + integrity sha512-DvRoGp3gSZ3OkZaCOnIJCrXlSpN/Xghf/XacTKnuMTQQhBylD7CwxHmdqPuS3G1rVqnUnlJKAII7JcIZkW5BeQ== -xterm@5.2.0-beta.49: - version "5.2.0-beta.49" - resolved "https://registry.yarnpkg.com/xterm/-/xterm-5.2.0-beta.49.tgz#0c9c176862019800172fc016d136300d1b6531ce" - integrity sha512-kfdiYljgAmjM9VpkNuuDcUJJHB62UiSTVZRYJbQdOU7jCi9mnUTPWov+5PnZIgONGts3t3Dv5kdbNF4UH53uTA== +xterm@5.2.0-beta.53: + version "5.2.0-beta.53" + resolved "https://registry.yarnpkg.com/xterm/-/xterm-5.2.0-beta.53.tgz#4a9b618b675f5b6b860a7205c8ff0dfba0879ccd" + integrity sha512-REM8Jhffs23MqzF3MxdeODB8cr3ewqULN9Tl9jJdKQOpXBnLXcUKAeGeRVuFyeZYSoXH7fJicX1EJcsW8rPvZw== y18n@^3.2.1: version "3.2.2"