Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Expose API method for writing to application side (#4948) #4953

Merged
merged 11 commits into from
Feb 2, 2024
3 changes: 3 additions & 0 deletions src/browser/TestUtils.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,9 @@ export class MockTerminal implements ITerminal {
public focus(): void {
throw new Error('Method not implemented.');
}
public input(data: string, wasUserInput: boolean = true): void {
throw new Error('Method not implemented.');
}
public resize(columns: number, rows: number): void {
throw new Error('Method not implemented.');
}
Expand Down
3 changes: 3 additions & 0 deletions src/browser/public/Terminal.ts
Original file line number Diff line number Diff line change
Expand Up @@ -138,6 +138,9 @@ export class Terminal extends Disposable implements ITerminalApi {
public focus(): void {
this._core.focus();
}
public input(data: string, wasUserInput: boolean = true): void {
this._core.input(data, wasUserInput);
}
public resize(columns: number, rows: number): void {
this._verifyIntegers(columns, rows);
this._core.resize(columns, rows);
Expand Down
4 changes: 4 additions & 0 deletions src/common/CoreTerminal.ts
Original file line number Diff line number Diff line change
Expand Up @@ -168,6 +168,10 @@ export abstract class CoreTerminal extends Disposable implements ICoreTerminal {
this._writeBuffer.writeSync(data, maxSubsequentCalls);
}

public input(data: string, wasUserInput: boolean = true): void {
this.coreService.triggerDataEvent(data, wasUserInput);
}

public resize(x: number, y: number): void {
if (isNaN(x) || isNaN(y)) {
return;
Expand Down
4 changes: 4 additions & 0 deletions src/headless/Terminal.ts
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,10 @@ export class Terminal extends CoreTerminal {
this._onBell.fire();
}

public input(data: string, wasUserInput: boolean = true): void {
this.coreService.triggerDataEvent(data, wasUserInput);
}

/**
* Resizes the terminal.
*
Expand Down
3 changes: 3 additions & 0 deletions src/headless/public/Terminal.ts
Original file line number Diff line number Diff line change
Expand Up @@ -134,6 +134,9 @@ export class Terminal extends Disposable implements ITerminalApi {
this._publicOptions[propName] = options[propName];
}
}
public input(data: string, wasUserInput: boolean = true): void {
this._core.input(data, wasUserInput);
}
public resize(columns: number, rows: number): void {
this._verifyIntegers(columns, rows);
this._core.resize(columns, rows);
Expand Down
1 change: 1 addition & 0 deletions test/playwright/TestUtils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -216,6 +216,7 @@ export class TerminalProxy implements ITerminalProxyCustomMethods, PlaywrightApi
return new Promise(r => term.writeln(typeof data === 'string' ? data : new Uint8Array(data), r));
}, [await this.getHandle(), typeof data === 'string' ? data : Array.from(data)] as const);
}
public async input(data: string, wasUserInput: boolean = true): Promise<void> { return this.evaluate(([term]) => term.input(data, wasUserInput)); }
public async resize(cols: number, rows: number): Promise<void> { return this._page.evaluate(([term, cols, rows]) => term.resize(cols, rows), [await this.getHandle(), cols, rows] as const); }
public async registerMarker(y?: number | undefined): Promise<IMarker> { return this._page.evaluate(([term, y]) => term.registerMarker(y), [await this.getHandle(), y] as const); }
public async registerDecoration(decorationOptions: IDecorationOptions): Promise<IDecoration | undefined> { return this._page.evaluate(([term, decorationOptions]) => term.registerDecoration(decorationOptions), [await this.getHandle(), decorationOptions] as const); }
Expand Down
12 changes: 12 additions & 0 deletions typings/xterm-headless.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -718,6 +718,18 @@ declare module '@xterm/headless' {
*/
onTitleChange: IEvent<string>;

/**
* Input data to application side. The data is treated the same way input
* typed into the terminal would (ie. the {@link onData} event will fire).
* @param data The data to forward to the application.
* @param wasUserInput Whether the input is genuine user input. This is true
* by default and triggers additionalbehavior like focus or selection
* clearing. Set this to false if the data sent should not be treated like
* user input would, for example passing an escape sequence to the
* application.
*/
input(data: string, wasUserInput?: boolean): void;

/**
* Resizes the terminal. It's best practice to debounce calls to resize,
* this will help ensure that the pty can respond to the resize event
Expand Down
12 changes: 12 additions & 0 deletions typings/xterm.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -963,6 +963,18 @@ declare module '@xterm/xterm' {
*/
focus(): void;

/**
* Input data to application side. The data is treated the same way input
* typed into the terminal would (ie. the {@link onData} event will fire).
* @param data The data to forward to the application.
* @param wasUserInput Whether the input is genuine user input. This is true
* by default and triggers additionalbehavior like focus or selection
* clearing. Set this to false if the data sent should not be treated like
* user input would, for example passing an escape sequence to the
* application.
*/
input(data: string, wasUserInput?: boolean): void;

/**
* Resizes the terminal. It's best practice to debounce calls to resize,
* this will help ensure that the pty can respond to the resize event
Expand Down