mirror of
https://github.com/microsoft/vscode.git
synced 2026-02-04 01:44:44 -06:00
Remove winpty support (#289025)
* Bump node-pty to 1.2.0-beta.7 * Deprecate TerminalSettingId.WindowsEnableConpty setting * Remove windowsEnableConpty instead of deprecating * Remove WINPTY from ps.ts * Remove winpty from appropriate comments * Remove winpty from IProcessReadyWindowsPty * Remove from classifier.json. TODO on resize for node-pty * Try adding option to test * Add reference to issue
This commit is contained in:
parent
071935f900
commit
acb22942b0
1
.github/classifier.json
vendored
1
.github/classifier.json
vendored
@ -251,7 +251,6 @@
|
||||
"terminal-sticky-scroll": {"assign": ["anthonykim1"]},
|
||||
"terminal-suggest": {"assign": ["meganrogge"]},
|
||||
"terminal-tabs": {"assign": ["meganrogge"]},
|
||||
"terminal-winpty": {"assign": ["anthonykim1"]},
|
||||
"testing": {"assign": ["connor4312"]},
|
||||
"themes": {"assign": ["aeschli"]},
|
||||
"timeline": {"assign": ["lramos15"]},
|
||||
|
||||
@ -18,8 +18,6 @@ import { assertNoRpc, poll } from '../utils';
|
||||
extensionContext = global.testExtensionContext;
|
||||
|
||||
const config = workspace.getConfiguration('terminal.integrated');
|
||||
// Disable conpty in integration tests because of https://github.com/microsoft/vscode/issues/76548
|
||||
await config.update('windowsEnableConpty', false, ConfigurationTarget.Global);
|
||||
// Disable exit alerts as tests may trigger then and we're not testing the notifications
|
||||
await config.update('showExitAlert', false, ConfigurationTarget.Global);
|
||||
// Canvas may cause problems when running in a container
|
||||
@ -70,7 +68,7 @@ import { assertNoRpc, poll } from '../utils';
|
||||
r(terminal);
|
||||
}
|
||||
}));
|
||||
// Use a single character to avoid winpty/conpty issues with injected sequences
|
||||
// Use a single character to avoid conpty issues with injected sequences
|
||||
const terminal = window.createTerminal({
|
||||
env: { TEST: '`' }
|
||||
});
|
||||
@ -978,7 +976,7 @@ function sanitizeData(data: string): string {
|
||||
// Strip NL/CR so terminal dimensions don't impact tests
|
||||
data = data.replace(/[\r\n]/g, '');
|
||||
|
||||
// Strip escape sequences so winpty/conpty doesn't cause flakiness, do for all platforms for
|
||||
// Strip escape sequences so conpty doesn't cause flakiness, do for all platforms for
|
||||
// consistency
|
||||
const CSI_SEQUENCE = /(:?(:?\x1b\[|\x9B)[=?>!]?[\d;:]*["$#'* ]?[a-zA-Z@^`{}|~])|(:?\x1b\].*?\x07)/g;
|
||||
data = data.replace(CSI_SEQUENCE, '');
|
||||
|
||||
@ -13,8 +13,6 @@ import { assertNoRpc } from '../utils';
|
||||
|
||||
suiteSetup(async () => {
|
||||
const config = workspace.getConfiguration('terminal.integrated');
|
||||
// Disable conpty in integration tests because of https://github.com/microsoft/vscode/issues/76548
|
||||
await config.update('windowsEnableConpty', false, ConfigurationTarget.Global);
|
||||
// Disable exit alerts as tests may trigger then and we're not testing the notifications
|
||||
await config.update('showExitAlert', false, ConfigurationTarget.Global);
|
||||
// Canvas may cause problems when running in a container
|
||||
|
||||
8
package-lock.json
generated
8
package-lock.json
generated
@ -47,7 +47,7 @@
|
||||
"minimist": "^1.2.8",
|
||||
"native-is-elevated": "0.8.0",
|
||||
"native-keymap": "^3.3.5",
|
||||
"node-pty": "^1.2.0-beta.6",
|
||||
"node-pty": "^1.2.0-beta.7",
|
||||
"open": "^10.1.2",
|
||||
"tas-client": "0.3.1",
|
||||
"undici": "^7.18.2",
|
||||
@ -12960,9 +12960,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/node-pty": {
|
||||
"version": "1.2.0-beta.6",
|
||||
"resolved": "https://registry.npmjs.org/node-pty/-/node-pty-1.2.0-beta.6.tgz",
|
||||
"integrity": "sha512-0ArHUpsE5y6nSRSkbY36l+bjyuZNMjww0pdsBKCbiw/HTFCikJlsbUuyZc60KPdgH/9YhAiqD2BM8a0AOUVrsw==",
|
||||
"version": "1.2.0-beta.7",
|
||||
"resolved": "https://registry.npmjs.org/node-pty/-/node-pty-1.2.0-beta.7.tgz",
|
||||
"integrity": "sha512-gHvC2HkwXDTqX931r7wBas2WISl7N26g6uOPHItA1OZmPlDwWZqTCWAjO8V3UShE9CEtd+VDawRr/0c8Uf+xiQ==",
|
||||
"hasInstallScript": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
|
||||
@ -110,7 +110,7 @@
|
||||
"minimist": "^1.2.8",
|
||||
"native-is-elevated": "0.8.0",
|
||||
"native-keymap": "^3.3.5",
|
||||
"node-pty": "^1.2.0-beta.6",
|
||||
"node-pty": "^1.2.0-beta.7",
|
||||
"open": "^10.1.2",
|
||||
"tas-client": "0.3.1",
|
||||
"undici": "^7.18.2",
|
||||
|
||||
8
remote/package-lock.json
generated
8
remote/package-lock.json
generated
@ -38,7 +38,7 @@
|
||||
"katex": "^0.16.22",
|
||||
"kerberos": "2.1.1",
|
||||
"minimist": "^1.2.8",
|
||||
"node-pty": "^1.2.0-beta.6",
|
||||
"node-pty": "^1.2.0-beta.7",
|
||||
"tas-client": "0.3.1",
|
||||
"vscode-oniguruma": "1.7.0",
|
||||
"vscode-regexpp": "^3.1.0",
|
||||
@ -1053,9 +1053,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/node-pty": {
|
||||
"version": "1.2.0-beta.6",
|
||||
"resolved": "https://registry.npmjs.org/node-pty/-/node-pty-1.2.0-beta.6.tgz",
|
||||
"integrity": "sha512-0ArHUpsE5y6nSRSkbY36l+bjyuZNMjww0pdsBKCbiw/HTFCikJlsbUuyZc60KPdgH/9YhAiqD2BM8a0AOUVrsw==",
|
||||
"version": "1.2.0-beta.7",
|
||||
"resolved": "https://registry.npmjs.org/node-pty/-/node-pty-1.2.0-beta.7.tgz",
|
||||
"integrity": "sha512-gHvC2HkwXDTqX931r7wBas2WISl7N26g6uOPHItA1OZmPlDwWZqTCWAjO8V3UShE9CEtd+VDawRr/0c8Uf+xiQ==",
|
||||
"hasInstallScript": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
|
||||
@ -33,7 +33,7 @@
|
||||
"katex": "^0.16.22",
|
||||
"kerberos": "2.1.1",
|
||||
"minimist": "^1.2.8",
|
||||
"node-pty": "^1.2.0-beta.6",
|
||||
"node-pty": "^1.2.0-beta.7",
|
||||
"tas-client": "0.3.1",
|
||||
"vscode-oniguruma": "1.7.0",
|
||||
"vscode-regexpp": "^3.1.0",
|
||||
|
||||
@ -49,7 +49,6 @@ export function listProcesses(rootPid: number): Promise<ProcessItem> {
|
||||
function findName(cmd: string): string {
|
||||
const UTILITY_NETWORK_HINT = /--utility-sub-type=network/i;
|
||||
const WINDOWS_CRASH_REPORTER = /--crashes-directory/i;
|
||||
const WINPTY = /\\pipe\\winpty-control/i;
|
||||
const CONPTY = /conhost\.exe.+--headless/i;
|
||||
const TYPE = /--type=([a-zA-Z-]+)/;
|
||||
|
||||
@ -58,11 +57,6 @@ export function listProcesses(rootPid: number): Promise<ProcessItem> {
|
||||
return 'electron-crash-reporter';
|
||||
}
|
||||
|
||||
// find winpty process
|
||||
if (WINPTY.exec(cmd)) {
|
||||
return 'winpty-agent';
|
||||
}
|
||||
|
||||
// find conpty process
|
||||
if (CONPTY.exec(cmd)) {
|
||||
return 'conpty-agent';
|
||||
|
||||
@ -91,7 +91,6 @@ export const enum TerminalSettingId {
|
||||
EnvironmentChangesRelaunch = 'terminal.integrated.environmentChangesRelaunch',
|
||||
ShowExitAlert = 'terminal.integrated.showExitAlert',
|
||||
SplitCwd = 'terminal.integrated.splitCwd',
|
||||
WindowsEnableConpty = 'terminal.integrated.windowsEnableConpty',
|
||||
WindowsUseConptyDll = 'terminal.integrated.windowsUseConptyDll',
|
||||
WordSeparators = 'terminal.integrated.wordSeparators',
|
||||
EnableFileLinks = 'terminal.integrated.enableFileLinks',
|
||||
@ -725,7 +724,6 @@ export interface ITerminalProcessOptions {
|
||||
suggestEnabled: boolean;
|
||||
nonce: string;
|
||||
};
|
||||
windowsEnableConpty: boolean;
|
||||
windowsUseConptyDll: boolean;
|
||||
environmentVariableCollections: ISerializableEnvironmentVariableCollections | undefined;
|
||||
workspaceFolder: IWorkspaceFolder | undefined;
|
||||
@ -751,7 +749,7 @@ export interface IProcessReadyWindowsPty {
|
||||
/**
|
||||
* What pty emulation backend is being used.
|
||||
*/
|
||||
backend: 'conpty' | 'winpty';
|
||||
backend: 'conpty';
|
||||
/**
|
||||
* The Windows build version (eg. 19045)
|
||||
*/
|
||||
@ -1025,9 +1023,9 @@ export const enum ShellIntegrationInjectionFailureReason {
|
||||
*/
|
||||
IgnoreShellIntegrationFlag = 'ignoreShellIntegrationFlag',
|
||||
/**
|
||||
* Shell integration doesn't work with winpty.
|
||||
* Shell integration doesn't work on older Windows builds that don't support ConPTY.
|
||||
*/
|
||||
Winpty = 'winpty',
|
||||
UnsupportedWindowsBuild = 'unsupportedWindowsBuild',
|
||||
/**
|
||||
* We're conservative whether we inject when we don't recognize the arguments used for the
|
||||
* shell as we would prefer launching one without shell integration than breaking their profile.
|
||||
|
||||
@ -207,7 +207,7 @@ const enum VSCodeOscPt {
|
||||
* Known properties:
|
||||
*
|
||||
* - `Cwd` - Reports the current working directory to the terminal.
|
||||
* - `IsWindows` - Reports whether the shell is using a Windows backend like winpty or conpty.
|
||||
* - `IsWindows` - Reports whether the shell is using a Windows backend (conpty).
|
||||
* This may be used to enable additional heuristics as the positioning of the shell
|
||||
* integration sequences are not guaranteed to be correct. Valid values: `True`, `False`.
|
||||
* - `ContinuationPrompt` - Reports the continuation prompt that is printed at the start of
|
||||
|
||||
@ -82,9 +82,9 @@ export async function getShellIntegrationInjection(
|
||||
if (shellLaunchConfig.ignoreShellIntegration) {
|
||||
return { type: 'failure', reason: ShellIntegrationInjectionFailureReason.IgnoreShellIntegrationFlag };
|
||||
}
|
||||
// Shell integration doesn't work with winpty
|
||||
if (isWindows && (!options.windowsEnableConpty || getWindowsBuildNumber() < 18309)) {
|
||||
return { type: 'failure', reason: ShellIntegrationInjectionFailureReason.Winpty };
|
||||
// Shell integration requires Windows 10 build 18309+ (ConPTY support)
|
||||
if (isWindows && getWindowsBuildNumber() < 18309) {
|
||||
return { type: 'failure', reason: ShellIntegrationInjectionFailureReason.UnsupportedWindowsBuild };
|
||||
}
|
||||
|
||||
const originalArgs = shellLaunchConfig.args;
|
||||
@ -103,7 +103,7 @@ export async function getShellIntegrationInjection(
|
||||
const scopedDownShellEnvs = ['PATH', 'VIRTUAL_ENV', 'HOME', 'SHELL', 'PWD'];
|
||||
if (shellLaunchConfig.shellIntegrationEnvironmentReporting) {
|
||||
if (isWindows) {
|
||||
const enableWindowsEnvReporting = options.windowsUseConptyDll || options.windowsEnableConpty && getWindowsBuildNumber() >= 22631 && shell !== 'bash.exe';
|
||||
const enableWindowsEnvReporting = options.windowsUseConptyDll || getWindowsBuildNumber() >= 22631 && shell !== 'bash.exe';
|
||||
if (enableWindowsEnvReporting) {
|
||||
envMixin['VSCODE_SHELL_ENV_REPORTING'] = scopedDownShellEnvs.join(',');
|
||||
}
|
||||
|
||||
@ -150,7 +150,7 @@ export class TerminalProcess extends Disposable implements ITerminalChildProcess
|
||||
this._initialCwd = cwd;
|
||||
this._properties[ProcessPropertyType.InitialCwd] = this._initialCwd;
|
||||
this._properties[ProcessPropertyType.Cwd] = this._initialCwd;
|
||||
const useConpty = this._options.windowsEnableConpty && process.platform === 'win32' && getWindowsBuildNumber() >= 18309;
|
||||
const useConpty = process.platform === 'win32' && getWindowsBuildNumber() >= 18309;
|
||||
const useConptyDll = useConpty && this._options.windowsUseConptyDll;
|
||||
this._ptyOptions = {
|
||||
name,
|
||||
@ -517,8 +517,8 @@ export class TerminalProcess extends Disposable implements ITerminalChildProcess
|
||||
if (!isNumber(cols) || !isNumber(rows)) {
|
||||
return;
|
||||
}
|
||||
// Ensure that cols and rows are always >= 1, this prevents a native
|
||||
// exception in winpty.
|
||||
// Ensure that cols and rows are always >= 1, this prevents a native exception in winpty.
|
||||
// TODO: Handle this directly on node-pty instead: https://github.com/microsoft/node-pty/issues/877
|
||||
if (this._ptyProcess) {
|
||||
cols = Math.max(cols, 1);
|
||||
rows = Math.max(rows, 1);
|
||||
@ -616,7 +616,7 @@ export class TerminalProcess extends Disposable implements ITerminalChildProcess
|
||||
|
||||
getWindowsPty(): IProcessReadyWindowsPty | undefined {
|
||||
return isWindows ? {
|
||||
backend: hasConptyOption(this._ptyOptions) && this._ptyOptions.useConpty ? 'conpty' : 'winpty',
|
||||
backend: 'conpty',
|
||||
buildNumber: getWindowsBuildNumber()
|
||||
} : undefined;
|
||||
}
|
||||
|
||||
@ -6,16 +6,14 @@
|
||||
/* eslint-disable local/code-no-test-async-suite */
|
||||
import { deepStrictEqual, ok, strictEqual } from 'assert';
|
||||
import { homedir, userInfo } from 'os';
|
||||
import { isWindows } from '../../../../base/common/platform.js';
|
||||
import { ensureNoDisposablesAreLeakedInTestSuite } from '../../../../base/test/common/utils.js';
|
||||
import { NullLogService } from '../../../log/common/log.js';
|
||||
import { IProductService } from '../../../product/common/productService.js';
|
||||
import { ITerminalProcessOptions } from '../../common/terminal.js';
|
||||
import { getShellIntegrationInjection, getWindowsBuildNumber, IShellIntegrationConfigInjection, type IShellIntegrationInjectionFailure } from '../../node/terminalEnvironment.js';
|
||||
|
||||
const enabledProcessOptions: ITerminalProcessOptions = { shellIntegration: { enabled: true, suggestEnabled: false, nonce: '' }, windowsEnableConpty: true, windowsUseConptyDll: false, environmentVariableCollections: undefined, workspaceFolder: undefined, isScreenReaderOptimized: false };
|
||||
const disabledProcessOptions: ITerminalProcessOptions = { shellIntegration: { enabled: false, suggestEnabled: false, nonce: '' }, windowsEnableConpty: true, windowsUseConptyDll: false, environmentVariableCollections: undefined, workspaceFolder: undefined, isScreenReaderOptimized: false };
|
||||
const winptyProcessOptions: ITerminalProcessOptions = { shellIntegration: { enabled: true, suggestEnabled: false, nonce: '' }, windowsEnableConpty: false, windowsUseConptyDll: false, environmentVariableCollections: undefined, workspaceFolder: undefined, isScreenReaderOptimized: false };
|
||||
const enabledProcessOptions: ITerminalProcessOptions = { shellIntegration: { enabled: true, suggestEnabled: false, nonce: '' }, windowsUseConptyDll: false, environmentVariableCollections: undefined, workspaceFolder: undefined, isScreenReaderOptimized: false };
|
||||
const disabledProcessOptions: ITerminalProcessOptions = { shellIntegration: { enabled: false, suggestEnabled: false, nonce: '' }, windowsUseConptyDll: false, environmentVariableCollections: undefined, workspaceFolder: undefined, isScreenReaderOptimized: false };
|
||||
const pwshExe = process.platform === 'win32' ? 'pwsh.exe' : 'pwsh';
|
||||
const repoRoot = process.platform === 'win32' ? process.cwd()[0].toLowerCase() + process.cwd().substring(1) : process.cwd();
|
||||
const logService = new NullLogService();
|
||||
@ -38,11 +36,6 @@ suite('platform - terminalEnvironment', async () => {
|
||||
strictEqual((await getShellIntegrationInjection({ executable: pwshExe, args: ['-l', '-NoLogo'], isFeatureTerminal: true }, enabledProcessOptions, defaultEnvironment, logService, productService, true)).type, 'failure');
|
||||
strictEqual((await getShellIntegrationInjection({ executable: pwshExe, args: ['-l', '-NoLogo'], isFeatureTerminal: false }, enabledProcessOptions, defaultEnvironment, logService, productService, true)).type, 'injection');
|
||||
});
|
||||
if (isWindows) {
|
||||
test('when on windows with conpty false', async () => {
|
||||
strictEqual((await getShellIntegrationInjection({ executable: pwshExe, args: ['-l'], isFeatureTerminal: false }, winptyProcessOptions, defaultEnvironment, logService, productService, true)).type, 'failure');
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
// These tests are only expected to work on Windows 10 build 18309 and above
|
||||
@ -239,7 +232,7 @@ suite('platform - terminalEnvironment', async () => {
|
||||
test('should fail for unsupported shell but nonce should still be available', async () => {
|
||||
const customProcessOptions: ITerminalProcessOptions = {
|
||||
shellIntegration: { enabled: true, suggestEnabled: false, nonce: 'custom-nonce-12345' },
|
||||
windowsEnableConpty: true,
|
||||
|
||||
windowsUseConptyDll: false,
|
||||
environmentVariableCollections: undefined,
|
||||
workspaceFolder: undefined,
|
||||
|
||||
@ -853,7 +853,7 @@ export class TerminalInstance extends Disposable implements ITerminalInstance {
|
||||
await this._handleOnData(data);
|
||||
}));
|
||||
this._register(xterm.raw.onBinary(data => this._processManager.processBinary(data)));
|
||||
// Init winpty compat and link handler after process creation as they rely on the
|
||||
// Init conpty compat and link handler after process creation as they rely on the
|
||||
// underlying process OS
|
||||
this._register(this._processManager.onProcessReady(async (processTraits) => {
|
||||
// Respond to DA1 with basic conformance. Note that including this is required to avoid
|
||||
@ -2255,8 +2255,9 @@ export class TerminalInstance extends Disposable implements ITerminalInstance {
|
||||
!this._shellLaunchConfig.isExtensionOwnedTerminal &&
|
||||
// Not a reconnected or revived terminal
|
||||
!this._shellLaunchConfig.attachPersistentProcess &&
|
||||
// Not a Windows remote using ConPTY (#187084)
|
||||
!(this._processManager.remoteAuthority && this._terminalConfigurationService.config.windowsEnableConpty && (await this._processManager.getBackendOS()) === OperatingSystem.Windows)
|
||||
// Not a Windows remote using ConPTY which cannot relaunch (#187084). ConPTY is used on
|
||||
// Windows builds 18309+.
|
||||
!(this._processManager.remoteAuthority && (await this._processManager.getBackendOS()) === OperatingSystem.Windows && this._processManager.processTraits?.windowsPty?.buildNumber && this._processManager.processTraits.windowsPty.buildNumber >= 18309)
|
||||
) {
|
||||
this.relaunch();
|
||||
return;
|
||||
|
||||
@ -68,7 +68,7 @@ const enum ProcessType {
|
||||
*
|
||||
* Internal definitions:
|
||||
* - Process: The process launched with the terminalProcess.ts file, or the pty as a whole
|
||||
* - Pty Process: The pseudoterminal parent process (or the conpty/winpty agent process)
|
||||
* - Pty Process: The pseudoterminal parent process (or the conpty agent process)
|
||||
* - Shell Process: The pseudoterminal child process (ie. the shell)
|
||||
*/
|
||||
export class TerminalProcessManager extends Disposable implements ITerminalProcessManager {
|
||||
@ -302,7 +302,6 @@ export class TerminalProcessManager extends Disposable implements ITerminalProce
|
||||
suggestEnabled: this._configurationService.getValue(TerminalContribSettingId.SuggestEnabled),
|
||||
nonce: this.shellIntegrationNonce
|
||||
},
|
||||
windowsEnableConpty: this._terminalConfigurationService.config.windowsEnableConpty,
|
||||
windowsUseConptyDll: this._terminalConfigurationService.config.windowsUseConptyDll ?? false,
|
||||
environmentVariableCollections: this._extEnvironmentVariableCollection?.collections ? serializeEnvironmentVariableCollections(this._extEnvironmentVariableCollection.collections) : undefined,
|
||||
workspaceFolder: this._cwdWorkspaceFolder,
|
||||
@ -509,7 +508,6 @@ export class TerminalProcessManager extends Disposable implements ITerminalProce
|
||||
suggestEnabled: this._configurationService.getValue(TerminalContribSettingId.SuggestEnabled),
|
||||
nonce: this.shellIntegrationNonce
|
||||
},
|
||||
windowsEnableConpty: this._terminalConfigurationService.config.windowsEnableConpty,
|
||||
windowsUseConptyDll: this._terminalConfigurationService.config.windowsUseConptyDll ?? false,
|
||||
environmentVariableCollections: this._extEnvironmentVariableCollection ? serializeEnvironmentVariableCollections(this._extEnvironmentVariableCollection.collections) : undefined,
|
||||
workspaceFolder: this._cwdWorkspaceFolder,
|
||||
|
||||
@ -178,7 +178,6 @@ export interface ITerminalConfiguration {
|
||||
environmentChangesRelaunch: boolean;
|
||||
showExitAlert: boolean;
|
||||
splitCwd: 'workspaceRoot' | 'initial' | 'inherited';
|
||||
windowsEnableConpty: boolean;
|
||||
windowsUseConptyDll?: boolean;
|
||||
wordSeparators: string;
|
||||
enableFileLinks: 'off' | 'on' | 'notRemote';
|
||||
|
||||
@ -490,11 +490,6 @@ const terminalConfiguration: IStringDictionary<IConfigurationPropertySchema> = {
|
||||
],
|
||||
default: 'inherited'
|
||||
},
|
||||
[TerminalSettingId.WindowsEnableConpty]: {
|
||||
description: localize('terminal.integrated.windowsEnableConpty', "Whether to use ConPTY for Windows terminal process communication (requires Windows 10 build number 18309+). Winpty will be used if this is false."),
|
||||
type: 'boolean',
|
||||
default: true
|
||||
},
|
||||
[TerminalSettingId.WordSeparators]: {
|
||||
markdownDescription: localize('terminal.integrated.wordSeparators', "A string containing all characters to be considered word separators when double-clicking to select word and in the fallback 'word' link detection. Since this is used for link detection, including characters such as `:` that are used when detecting links will cause the line and column part of links like `file:10:5` to be ignored."),
|
||||
type: 'string',
|
||||
|
||||
@ -66,7 +66,7 @@ class TestTerminalInstanceService implements Partial<ITerminalInstanceService> {
|
||||
rows: number,
|
||||
unicodeVersion: '6' | '11',
|
||||
env: any,
|
||||
windowsEnableConpty: boolean,
|
||||
options: any,
|
||||
shouldPersist: boolean
|
||||
) => new TestTerminalChildProcess(shouldPersist),
|
||||
getLatency: () => Promise.resolve([])
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user