diff --git a/src/browser/Terminal.ts b/src/browser/Terminal.ts index b680cc971f..0e945aa92b 100644 --- a/src/browser/Terminal.ts +++ b/src/browser/Terminal.ts @@ -1192,16 +1192,6 @@ export class Terminal extends CoreTerminal implements ITerminal { return false; } - /** - * Input data to application side. - * The data is treated the same way as typed input at the terminal. - * (will appear in the onData event). - */ - public input(data: string): void { - this.coreService.triggerDataEvent(data, true); - this.write(data); - } - /** * Resizes the terminal. * diff --git a/src/browser/TestUtils.test.ts b/src/browser/TestUtils.test.ts index 95f1fbacdc..c7c8438cc0 100644 --- a/src/browser/TestUtils.test.ts +++ b/src/browser/TestUtils.test.ts @@ -72,7 +72,7 @@ export class MockTerminal implements ITerminal { public focus(): void { throw new Error('Method not implemented.'); } - public input(data: string): void { + public input(data: string, wasUserInput: boolean = true): void { throw new Error('Method not implemented.'); } public resize(columns: number, rows: number): void { diff --git a/src/browser/public/Terminal.ts b/src/browser/public/Terminal.ts index d8c8315d87..a6349225df 100644 --- a/src/browser/public/Terminal.ts +++ b/src/browser/public/Terminal.ts @@ -138,8 +138,8 @@ export class Terminal extends Disposable implements ITerminalApi { public focus(): void { this._core.focus(); } - public input(data: string): void { - this._core.input(data); + public input(data: string, wasUserInput: boolean = true): void { + this._core.input(data, wasUserInput); } public resize(columns: number, rows: number): void { this._verifyIntegers(columns, rows); diff --git a/src/common/CoreTerminal.ts b/src/common/CoreTerminal.ts index 1789daf8bd..b624245805 100644 --- a/src/common/CoreTerminal.ts +++ b/src/common/CoreTerminal.ts @@ -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; diff --git a/test/playwright/TestUtils.ts b/test/playwright/TestUtils.ts index facbc881aa..1427578c11 100644 --- a/test/playwright/TestUtils.ts +++ b/test/playwright/TestUtils.ts @@ -216,7 +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): Promise { return this.evaluate(([term]) => term.input(data)); } + public async input(data: string, wasUserInput: boolean = true): Promise { return this.evaluate(([term]) => term.input(data, wasUserInput)); } public async resize(cols: number, rows: number): Promise { 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 { return this._page.evaluate(([term, y]) => term.registerMarker(y), [await this.getHandle(), y] as const); } public async registerDecoration(decorationOptions: IDecorationOptions): Promise { return this._page.evaluate(([term, decorationOptions]) => term.registerDecoration(decorationOptions), [await this.getHandle(), decorationOptions] as const); } diff --git a/typings/xterm.d.ts b/typings/xterm.d.ts index 9268063979..95c368b191 100644 --- a/typings/xterm.d.ts +++ b/typings/xterm.d.ts @@ -966,8 +966,12 @@ declare module '@xterm/xterm' { /** * 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). */ - input(data: string): void; + input(data: string, wasUserInput?: boolean): void; /** * Resizes the terminal. It's best practice to debounce calls to resize,