Get input working

This commit is contained in:
Daniel Imms 2019-07-01 16:14:13 -07:00
parent 6f1d0fc7ec
commit 29303c819d
4 changed files with 20 additions and 16 deletions

View file

@ -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

View file

@ -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));

View file

@ -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));

View file

@ -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);