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
13 changes: 13 additions & 0 deletions src/common/CoreTerminal.ts
Original file line number Diff line number Diff line change
Expand Up @@ -168,6 +168,19 @@ export abstract class CoreTerminal extends Disposable implements ICoreTerminal {
this._writeBuffer.writeSync(data, maxSubsequentCalls);
}

/**
* Input data to application side.
* The data is treated the same way as typed input at the terminal.
* (will appear in the onData event).
* wasUserInput indicates, whether the input is genuine user input.
* It is true by default and triggers additional actions like prompt focus or selection clearing.
* Set it to false if your data sent does not resemble what a user would have typed
* (e.g. sequence embedded data).
*/
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
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
10 changes: 10 additions & 0 deletions typings/xterm.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -962,6 +962,16 @@
* Focus the terminal.
*/
focus(): void;

Check warning on line 965 in typings/xterm.d.ts

View workflow job for this annotation

GitHub Actions / lint

Trailing spaces not allowed
/**
* Input data to application side.
* The data is treated the same way as typed input at the terminal (will appear in the onData event).

Check warning on line 968 in typings/xterm.d.ts

View workflow job for this annotation

GitHub Actions / lint

This line has a comment length of 105. Maximum allowed is 80
* wasUserInput indicates, whether the input is genuine user input.
* It is true by default and triggers additional actions like prompt focus or selection clearing.

Check warning on line 970 in typings/xterm.d.ts

View workflow job for this annotation

GitHub Actions / lint

This line has a comment length of 101. Maximum allowed is 80
* Set it to false if your data sent does not resemble what a user would have typed

Check warning on line 971 in typings/xterm.d.ts

View workflow job for this annotation

GitHub Actions / lint

This line has a comment length of 87. Maximum allowed is 80
* (e.g. sequence embedded data).
*/
input(data: string, wasUserInput?: boolean): void;

/**
* Resizes the terminal. It's best practice to debounce calls to resize,
Expand Down
Loading