mirror of
https://github.com/wavetermdev/xterm.js.git
synced 2026-08-05 13:43:48 -07:00
Merge pull request #3290 from nikonso/feat/3014-add-onBell-event-listener
Fix #3014 - Add onBell event listener to allow embeders to hook into it
This commit is contained in:
@@ -131,6 +131,12 @@ describe('Terminal', () => {
|
||||
});
|
||||
term.write('\x1b]2;title\x07');
|
||||
});
|
||||
it('should fire the onBell event', (done) => {
|
||||
term.onBell(e => {
|
||||
done();
|
||||
});
|
||||
term.write('\x07');
|
||||
});
|
||||
});
|
||||
|
||||
describe('attachCustomKeyEventHandler', () => {
|
||||
|
||||
@@ -113,6 +113,8 @@ export class Terminal extends CoreTerminal implements ITerminal {
|
||||
public get onSelectionChange(): IEvent<void> { return this._onSelectionChange.event; }
|
||||
private _onTitleChange = new EventEmitter<string>();
|
||||
public get onTitleChange(): IEvent<string> { return this._onTitleChange.event; }
|
||||
private _onBell = new EventEmitter<void>();
|
||||
public get onBell (): IEvent<void> { return this._onBell.event; }
|
||||
|
||||
private _onFocus = new EventEmitter<void>();
|
||||
public get onFocus(): IEvent<void> { return this._onFocus.event; }
|
||||
@@ -1152,6 +1154,8 @@ export class Terminal extends CoreTerminal implements ITerminal {
|
||||
this._soundService!.playBellSound();
|
||||
}
|
||||
|
||||
this._onBell.fire();
|
||||
|
||||
// if (this._visualBell()) {
|
||||
// this.element.classList.add('visual-bell-active');
|
||||
// clearTimeout(this._visualBellTimer);
|
||||
|
||||
@@ -37,6 +37,7 @@ export class MockTerminal implements ITerminal {
|
||||
public onData!: IEvent<string>;
|
||||
public onBinary!: IEvent<string>;
|
||||
public onTitleChange!: IEvent<string>;
|
||||
public onBell!: IEvent<void>;
|
||||
public onScroll!: IEvent<number>;
|
||||
public onKey!: IEvent<{ key: string, domEvent: KeyboardEvent }>;
|
||||
public onRender!: IEvent<{ start: number, end: number }>;
|
||||
|
||||
Vendored
+1
@@ -47,6 +47,7 @@ export interface IPublicTerminal extends IDisposable {
|
||||
onRender: IEvent<{ start: number, end: number }>;
|
||||
onResize: IEvent<{ cols: number, rows: number }>;
|
||||
onTitleChange: IEvent<string>;
|
||||
onBell: IEvent<void>;
|
||||
blur(): void;
|
||||
focus(): void;
|
||||
resize(columns: number, rows: number): void;
|
||||
|
||||
@@ -38,6 +38,7 @@ export class Terminal implements ITerminalApi {
|
||||
public get onData(): IEvent<string> { return this._core.onData; }
|
||||
public get onBinary(): IEvent<string> { return this._core.onBinary; }
|
||||
public get onTitleChange(): IEvent<string> { return this._core.onTitleChange; }
|
||||
public get onBell(): IEvent<void> { return this._core.onBell; }
|
||||
public get onScroll(): IEvent<number> { return this._core.onScroll; }
|
||||
public get onKey(): IEvent<{ key: string, domEvent: KeyboardEvent }> { return this._core.onKey; }
|
||||
public get onRender(): IEvent<{ start: number, end: number }> { return this._core.onRender; }
|
||||
|
||||
@@ -410,6 +410,16 @@ describe('API Integration Tests', function(): void {
|
||||
await page.evaluate(`window.term.write('\\x1b]2;foo\\x9c')`);
|
||||
await pollFor(page, `window.calls`, ['foo']);
|
||||
});
|
||||
it('onBell', async () => {
|
||||
await openTerminal(page);
|
||||
await page.evaluate(`
|
||||
window.calls = [];
|
||||
window.term.onBell(() => window.calls.push(true));
|
||||
`);
|
||||
await pollFor(page, `window.calls`, []);
|
||||
await page.evaluate(`window.term.write('\\x07')`);
|
||||
await pollFor(page, `window.calls`, [true]);
|
||||
});
|
||||
});
|
||||
|
||||
describe('buffer', () => {
|
||||
|
||||
Vendored
+6
@@ -709,6 +709,12 @@ declare module 'xterm' {
|
||||
*/
|
||||
onTitleChange: IEvent<string>;
|
||||
|
||||
/**
|
||||
* Adds an event listener for when the bell is triggered.
|
||||
* @returns an `IDisposable` to stop listening.
|
||||
*/
|
||||
onBell: IEvent<void>;
|
||||
|
||||
/**
|
||||
* Unfocus the terminal.
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user