Get input working
This commit is contained in:
parent
6f1d0fc7ec
commit
29303c819d
4
src/vs/vscode.proposed.d.ts
vendored
4
src/vs/vscode.proposed.d.ts
vendored
|
@ -1294,9 +1294,9 @@ declare module 'vscode' {
|
|||
onDidChangeDimensions?(dimensions: TerminalDimensions): void;
|
||||
|
||||
/**
|
||||
* F
|
||||
* This is called when the user closes the terminal.
|
||||
*/
|
||||
onDidShutdownTerminal(): void;
|
||||
onDidShutdownTerminal?(): void;
|
||||
}
|
||||
|
||||
//#endregion
|
||||
|
|
|
@ -262,7 +262,10 @@ export class MainThreadTerminalService implements MainThreadTerminalServiceShape
|
|||
private _onTerminalRequestVirtualProcess(proxy: ITerminalProcessExtHostProxy): void {
|
||||
console.log('_onTerminalRequestVirtualProcess', proxy);
|
||||
this._terminalProcesses[proxy.terminalId] = proxy;
|
||||
proxy.onInput(data => this._proxy.$acceptProcessInput(proxy.terminalId, data));
|
||||
proxy.onInput(data => {
|
||||
console.log('_onTerminalRequestVirtualProcess onInput', data);
|
||||
this._proxy.$acceptProcessInput(proxy.terminalId, data);
|
||||
});
|
||||
proxy.onResize(dimensions => this._proxy.$acceptProcessResize(proxy.terminalId, dimensions.cols, dimensions.rows));
|
||||
proxy.onShutdown(immediate => this._proxy.$acceptProcessShutdown(proxy.terminalId, immediate));
|
||||
proxy.onRequestCwd(() => this._proxy.$acceptProcessRequestCwd(proxy.terminalId));
|
||||
|
|
|
@ -328,17 +328,8 @@ export class ExtHostTerminalService implements ExtHostTerminalServiceShape {
|
|||
|
||||
public createVirtualProcessTerminal(options: vscode.TerminalVirtualProcessOptions): vscode.Terminal {
|
||||
const terminal = new ExtHostTerminal(this._proxy, options.name);
|
||||
terminal.createVirtualProcess().then(() => {
|
||||
const id = terminal._id;
|
||||
console.log('virtual process id: ' + terminal._id);
|
||||
// TODO: The ID is ready now
|
||||
const p = new ExtHostVirtualProcess(options.virtualProcess);
|
||||
p.onProcessReady((e: { pid: number, cwd: string }) => this._proxy.$sendProcessReady(id, e.pid, e.cwd));
|
||||
p.onProcessTitleChanged(title => this._proxy.$sendProcessTitle(id, title));
|
||||
p.onProcessData(data => this._proxy.$sendProcessData(id, data));
|
||||
p.onProcessExit(exitCode => this._onProcessExit(id, exitCode));
|
||||
this._terminalProcesses[terminal._id] = p;
|
||||
});
|
||||
const p = new ExtHostVirtualProcess(options.virtualProcess);
|
||||
terminal.createVirtualProcess().then(() => this._setupExtHostProcessListeners(terminal._id, p));
|
||||
this._terminals.push(terminal);
|
||||
return terminal;
|
||||
}
|
||||
|
@ -571,7 +562,10 @@ export class ExtHostTerminalService implements ExtHostTerminalServiceShape {
|
|||
// TODO: Support conpty on remote, it doesn't seem to work for some reason?
|
||||
// TODO: When conpty is enabled, only enable it when accessibilityMode is off
|
||||
const enableConpty = false; //terminalConfig.get('windowsEnableConpty') as boolean;
|
||||
const p = new TerminalProcess(shellLaunchConfig, initialCwd, cols, rows, env, enableConpty, this._logService);
|
||||
this._setupExtHostProcessListeners(id, new TerminalProcess(shellLaunchConfig, initialCwd, cols, rows, env, enableConpty, this._logService));
|
||||
}
|
||||
|
||||
private _setupExtHostProcessListeners(id: number, p: ITerminalChildProcess): void {
|
||||
p.onProcessReady((e: { pid: number, cwd: string }) => this._proxy.$sendProcessReady(id, e.pid, e.cwd));
|
||||
p.onProcessTitleChanged(title => this._proxy.$sendProcessTitle(id, title));
|
||||
p.onProcessData(data => this._proxy.$sendProcessData(id, data));
|
||||
|
|
|
@ -29,6 +29,11 @@ const LAUNCHING_DURATION = 500;
|
|||
*/
|
||||
const LATENCY_MEASURING_INTERVAL = 1000;
|
||||
|
||||
enum ProcessType {
|
||||
Process,
|
||||
VirtualProcess
|
||||
}
|
||||
|
||||
/**
|
||||
* Holds all state related to the creation and management of terminal processes.
|
||||
*
|
||||
|
@ -46,6 +51,7 @@ export class TerminalProcessManager implements ITerminalProcessManager {
|
|||
public userHome: string | undefined;
|
||||
|
||||
private _process: ITerminalChildProcess | null = null;
|
||||
private _processType: ProcessType = ProcessType.Process;
|
||||
private _preLaunchInputQueue: string[] = [];
|
||||
private _latency: number = -1;
|
||||
private _latencyRequest: Promise<number>;
|
||||
|
@ -104,6 +110,7 @@ export class TerminalProcessManager implements ITerminalProcessManager {
|
|||
isScreenReaderModeEnabled: boolean
|
||||
): Promise<void> {
|
||||
if (shellLaunchConfig.isVirtualProcess) {
|
||||
this._processType = ProcessType.VirtualProcess;
|
||||
this._process = this._instantiationService.createInstance(TerminalProcessExtHostProxy, this._terminalId, shellLaunchConfig, undefined, cols, rows, this._configHelper);
|
||||
console.log('set terminal process ext host proxy', this._process);
|
||||
} else {
|
||||
|
@ -210,7 +217,7 @@ export class TerminalProcessManager implements ITerminalProcessManager {
|
|||
}
|
||||
|
||||
public write(data: string): void {
|
||||
if (this.shellProcessId) {
|
||||
if (this.shellProcessId || this._processType === ProcessType.VirtualProcess) {
|
||||
if (this._process) {
|
||||
// Send data if the pty is ready
|
||||
this._process.input(data);
|
||||
|
|
Loading…
Reference in a new issue