From 447fc4f3fa0a63a25b70ce7cf9235e433a8bd0e7 Mon Sep 17 00:00:00 2001 From: Daniel Imms Date: Sat, 8 Jun 2019 21:28:03 -0700 Subject: [PATCH 1/4] Remove old event emitter Fixes #2029 --- src/AccessibilityManager.ts | 6 +- src/Clipboard.ts | 1 - src/InputHandler.ts | 6 +- src/Terminal.test.ts | 176 +++----------------------------- src/Terminal.ts | 42 +++----- src/TestUtils.test.ts | 7 ++ src/Types.ts | 16 ++- src/common/EventEmitter.test.ts | 77 -------------- src/common/EventEmitter.ts | 98 ------------------ src/public/Terminal.ts | 21 ---- typings/xterm.d.ts | 99 +----------------- 11 files changed, 53 insertions(+), 496 deletions(-) delete mode 100644 src/common/EventEmitter.test.ts delete mode 100644 src/common/EventEmitter.ts diff --git a/src/AccessibilityManager.ts b/src/AccessibilityManager.ts index 884db050..58949cba 100644 --- a/src/AccessibilityManager.ts +++ b/src/AccessibilityManager.ts @@ -85,11 +85,11 @@ export class AccessibilityManager extends Disposable { this.register(this._terminal.onRender(e => this._refreshRows(e.start, e.end))); this.register(this._terminal.onScroll(() => this._refreshRows())); // Line feed is an issue as the prompt won't be read out after a command is run - this.register(this._terminal.addDisposableListener('a11y.char', (char) => this._onChar(char))); + this.register(this._terminal.onA11yChar(char => this._onChar(char))); this.register(this._terminal.onLineFeed(() => this._onChar('\n'))); - this.register(this._terminal.addDisposableListener('a11y.tab', spaceCount => this._onTab(spaceCount))); + this.register(this._terminal.onA11yTab(spaceCount => this._onTab(spaceCount))); this.register(this._terminal.onKey(e => this._onKey(e.key))); - this.register(this._terminal.addDisposableListener('blur', () => this._clearLiveRegion())); + this.register(this._terminal.onBlur(() => this._clearLiveRegion())); this._screenDprMonitor = new ScreenDprMonitor(); this.register(this._screenDprMonitor); diff --git a/src/Clipboard.ts b/src/Clipboard.ts index 7a32badc..cbb0935e 100644 --- a/src/Clipboard.ts +++ b/src/Clipboard.ts @@ -63,7 +63,6 @@ export function pasteHandler(ev: ClipboardEvent, term: ITerminal): void { text = bracketTextForPaste(text, term.bracketedPasteMode); term.handler(text); term.textarea.value = ''; - term.emit('paste', text); term.cancel(ev); }; diff --git a/src/InputHandler.ts b/src/InputHandler.ts index b4689cd5..2b592aa7 100644 --- a/src/InputHandler.ts +++ b/src/InputHandler.ts @@ -342,7 +342,7 @@ export class InputHandler extends Disposable implements IInputHandler { buffer = this._terminal.buffer; if (buffer.x !== cursorStartX || buffer.y !== cursorStartY) { - this._terminal.emit('cursormove'); + this._onCursorMove.fire(); } } @@ -377,7 +377,7 @@ export class InputHandler extends Disposable implements IInputHandler { } if (screenReaderMode) { - this._terminal.emit('a11y.char', stringFromCodePoint(code)); + this._terminal.onA11yCharEmitter.fire(stringFromCodePoint(code)); } // insert combining char at last cursor position @@ -542,7 +542,7 @@ export class InputHandler extends Disposable implements IInputHandler { const originalX = this._terminal.buffer.x; this._terminal.buffer.x = this._terminal.buffer.nextStop(); if (this._terminal.options.screenReaderMode) { - this._terminal.emit('a11y.tab', this._terminal.buffer.x - originalX); + this._terminal.onA11yTabEmitter.fire(this._terminal.buffer.x - originalX); } } diff --git a/src/Terminal.test.ts b/src/Terminal.test.ts index a3cff41f..36886da1 100644 --- a/src/Terminal.test.ts +++ b/src/Terminal.test.ts @@ -57,20 +57,20 @@ describe('Terminal', () => { term.handler('fake'); }); it('should fire the onCursorMove event', (done) => { - term.on('cursormove', () => done()); + term.onCursorMove(() => done()); term.write('foo'); }); it('should fire the onLineFeed event', (done) => { - term.on('linefeed', () => done()); + term.onLineFeed(() => done()); term.write('\n'); }); it('should fire a scroll event when scrollback is created', (done) => { - term.on('scroll', () => done()); + term.onScroll(() => done()); term.write('\n'.repeat(INIT_ROWS)); }); it('should fire a scroll event when scrollback is cleared', (done) => { term.write('\n'.repeat(INIT_ROWS)); - term.on('scroll', () => done()); + term.onScroll(() => done()); term.clear(); }); it('should fire a key event after a keypress DOM event', (done) => { @@ -126,158 +126,6 @@ describe('Terminal', () => { }); }); - describe('on', () => { - beforeEach(() => { - term.on('key', () => { }); - term.on('keypress', () => { }); - term.on('keydown', () => { }); - }); - - describe('data', () => { - it('should emit a data event', (done) => { - term.on('data', () => { - done(); - }); - - term.handler('fake'); - }); - }); - - describe('cursormove', () => { - it('should emit a cursormove event', (done) => { - term.on('cursormove', () => { - done(); - }); - term.write('foo'); - }); - }); - - describe('linefeed', () => { - it('should emit a linefeed event', (done) => { - term.on('linefeed', () => { - done(); - }); - term.write('\n'); - }); - }); - - describe('scroll', () => { - it('should emit a scroll event when scrollback is created', (done) => { - term.on('scroll', () => { - done(); - }); - term.write('\n'.repeat(INIT_ROWS)); - }); - it('should emit a scroll event when scrollback is cleared', (done) => { - term.write('\n'.repeat(INIT_ROWS)); - term.on('scroll', () => { - done(); - }); - term.clear(); - }); - }); - - describe(`keypress (including 'key' event)`, () => { - it('should receive a string and event object', (done) => { - let steps = 0; - - const finish = () => { - if ((++steps) === 2) { - done(); - } - }; - - const evKeyPress = { - preventDefault: () => { }, - stopPropagation: () => { }, - type: 'keypress', - keyCode: 13 - }; - - term.on('keypress', (key, event) => { - assert.equal(typeof key, 'string'); - expect(event).to.be.an.instanceof(Object); - finish(); - }); - - term.on('key', (key, event) => { - assert.equal(typeof key, 'string'); - expect(event).to.be.an.instanceof(Object); - finish(); - }); - - term.keyPress(evKeyPress); - }); - }); - - describe(`keydown (including 'key' event)`, () => { - it(`should receive an event object for 'keydown' and a string and event object for 'key'`, (done) => { - let steps = 0; - - const finish = () => { - if ((++steps) === 2) { - done(); - } - }; - - const evKeyDown = { - preventDefault: () => { }, - stopPropagation: () => { }, - type: 'keydown', - keyCode: 13 - }; - - term.on('keydown', (event) => { - expect(event).to.be.an.instanceof(Object); - finish(); - }); - - term.on('key', (key, event) => { - assert.equal(typeof key, 'string'); - expect(event).to.be.an.instanceof(Object); - finish(); - }); - - term.keyDown(evKeyDown); - }); - }); - - describe('resize', () => { - it('should receive an object: {cols: number, rows: number}', (done) => { - term.on('resize', (data) => { - expect(data).to.have.keys(['cols', 'rows']); - assert.equal(typeof data.cols, 'number'); - assert.equal(typeof data.rows, 'number'); - done(); - }); - - term.resize(1, 1); - }); - }); - - describe('scroll', () => { - it('should receive a number', (done) => { - term.on('scroll', (ydisp) => { - assert.equal(typeof ydisp, 'number'); - done(); - }); - - term.scroll(); - }); - }); - - describe('title', () => { - it('should receive a string', (done) => { - term.on('title', (title) => { - assert.equal(typeof title, 'string'); - done(); - }); - - term.handleTitle('title'); - }); - }); - }); - describe('attachCustomKeyEventHandler', () => { const evKeyDown = { preventDefault: () => { }, @@ -741,10 +589,10 @@ describe('Terminal', () => { it('should emit key with alt + key on keyPress', (done) => { const keys = ['@', '@', '\\', '\\', '|', '|']; - term.on('keypress', (key) => { - if (key) { - const index = keys.indexOf(key); - assert(index !== -1, 'Emitted wrong key: ' + key); + term.onKey(e => { + if (e.key) { + const index = keys.indexOf(e.key); + assert(index !== -1, 'Emitted wrong key: ' + e.key); keys.splice(index, 1); } if (keys.length === 0) done(); @@ -807,10 +655,10 @@ describe('Terminal', () => { it('should emit key with alt + ctrl + key on keyPress', (done) => { const keys = ['@', '@', '\\', '\\', '|', '|']; - term.on('keypress', (key) => { - if (key) { - const index = keys.indexOf(key); - assert(index !== -1, 'Emitted wrong key: ' + key); + term.onKey(e => { + if (e.key) { + const index = keys.indexOf(e.key); + assert(index !== -1, 'Emitted wrong key: ' + e.key); keys.splice(index, 1); } if (keys.length === 0) done(); diff --git a/src/Terminal.ts b/src/Terminal.ts index a18bb209..f99b6a9d 100644 --- a/src/Terminal.ts +++ b/src/Terminal.ts @@ -26,7 +26,6 @@ import { IRenderer, CharacterJoinerHandler } from 'browser/renderer/Types'; import { BufferSet } from 'common/buffer/BufferSet'; import { Buffer } from 'common/buffer/Buffer'; import { CompositionHelper } from './CompositionHelper'; -import { EventEmitter } from 'common/EventEmitter'; import { Viewport } from './Viewport'; import { rightClickHandler, moveTextAreaUnderMouseCursor, pasteHandler, copyHandler } from './Clipboard'; import { C0 } from 'common/data/EscapeSequences'; @@ -56,6 +55,7 @@ import { OptionsService } from 'common/services/OptionsService'; import { ICharSizeService } from 'browser/services/Services'; import { CharSizeService } from 'browser/services/CharSizeService'; import { BufferService, MINIMUM_COLS, MINIMUM_ROWS } from 'common/services/BufferService'; +import { Disposable } from 'common/Lifecycle'; // Let it work inside Node.js for automated testing purposes. const document = (typeof window !== 'undefined') ? window.document : null; @@ -76,7 +76,7 @@ const WRITE_BUFFER_PAUSE_THRESHOLD = 5; const WRITE_TIMEOUT_MS = 12; const WRITE_BUFFER_LENGTH_THRESHOLD = 50; -export class Terminal extends EventEmitter implements ITerminal, IDisposable, IInputHandlingTerminal { +export class Terminal extends Disposable implements ITerminal, IDisposable, IInputHandlingTerminal { public textarea: HTMLTextAreaElement; public element: HTMLElement; public screenElement: HTMLElement; @@ -209,6 +209,15 @@ export class Terminal extends EventEmitter implements ITerminal, IDisposable, II private _onTitleChange = new EventEmitter2(); public get onTitleChange(): IEvent { return this._onTitleChange.event; } + private _onFocus = new EventEmitter2(); + public get onFocus(): IEvent { return this._onFocus.event; } + private _onBlur = new EventEmitter2(); + public get onBlur(): IEvent { return this._onBlur.event; } + public onA11yCharEmitter = new EventEmitter2(); + public get onA11yChar(): IEvent { return this.onA11yCharEmitter.event; } + public onA11yTabEmitter = new EventEmitter2(); + public get onA11yTab(): IEvent { return this.onA11yTabEmitter.event; } + /** * Creates a new `Terminal` object. * @@ -234,18 +243,6 @@ export class Terminal extends EventEmitter implements ITerminal, IDisposable, II // this.options = clone(options); this._setup(); - - // TODO: Remove these in v4 - // Fire old style events from new emitters - this.onCursorMove(() => this.emit('cursormove')); - this.onData(e => this.emit('data', e)); - this.onKey(e => this.emit('key', e.key, e.domEvent)); - this.onLineFeed(() => this.emit('linefeed')); - this.onRender(e => this.emit('refresh', e)); - this.onResize(e => this.emit('resize', e)); - this.onSelectionChange(() => this.emit('selection')); - this.onScroll(e => this.emit('scroll', e)); - this.onTitleChange(e => this.emit('title', e)); } public dispose(): void { @@ -444,7 +441,7 @@ export class Terminal extends EventEmitter implements ITerminal, IDisposable, II this.updateCursorStyle(ev); this.element.classList.add('focus'); this.showCursor(); - this.emit('focus'); + this._onFocus.fire(); } /** @@ -467,7 +464,7 @@ export class Terminal extends EventEmitter implements ITerminal, IDisposable, II this.handler(C0.ESC + '[O'); } this.element.classList.remove('focus'); - this.emit('blur'); + this._onBlur.fire(); } /** @@ -639,8 +636,8 @@ export class Terminal extends EventEmitter implements ITerminal, IDisposable, II this.register(this.onCursorMove(() => this._renderService.onCursorMove())); this.register(this.onResize(() => this._renderService.onResize(this.cols, this.rows))); - this.register(this.addDisposableListener('blur', () => this._renderService.onBlur())); - this.register(this.addDisposableListener('focus', () => this._renderService.onFocus())); + this.register(this.onBlur(() => this._renderService.onBlur())); + this.register(this.onFocus(() => this._renderService.onFocus())); this.register(this._renderService.onDimensionsChange(() => this.viewport.syncScrollArea())); this.selectionManager = new SelectionManager(this, this._charSizeService, this._bufferService); @@ -803,12 +800,6 @@ export class Terminal extends EventEmitter implements ITerminal, IDisposable, II // vt300: ^[[ 24(1/3/5)~ [ Cx , Cy ] \r // locator: CSI P e ; P b ; P r ; P c ; P p & w function sendEvent(button: number, pos: {x: number, y: number}): void { - // self.emit('mouse', { - // x: pos.x - 32, - // y: pos.x - 32, - // button: button - // }); - if (self._vt300Mouse) { // NOTE: Unstable. // http://www.vt100.net/docs/vt3xx-gp/chapter15.html @@ -1597,7 +1588,6 @@ export class Terminal extends EventEmitter implements ITerminal, IDisposable, II return true; } - this.emit('keydown', event); this._onKey.fire({ key: result.key, domEvent: event }); this.showCursor(); this.handler(result.key); @@ -1676,7 +1666,6 @@ export class Terminal extends EventEmitter implements ITerminal, IDisposable, II key = String.fromCharCode(key); - this.emit('keypress', key, ev); this._onKey.fire({ key, domEvent: ev }); this.showCursor(); this.handler(key); @@ -1689,7 +1678,6 @@ export class Terminal extends EventEmitter implements ITerminal, IDisposable, II * Note: We could do sweet things with webaudio here */ public bell(): void { - this.emit('bell'); if (this._soundBell()) { this.soundManager.playBellSound(); } diff --git a/src/TestUtils.test.ts b/src/TestUtils.test.ts index bbe09508..4f293eed 100644 --- a/src/TestUtils.test.ts +++ b/src/TestUtils.test.ts @@ -14,6 +14,7 @@ import { Terminal } from './Terminal'; import { AttributeData } from 'common/buffer/BufferLine'; import { IColorManager, IColorSet, IMouseHelper } from 'browser/Types'; import { IOptionsService } from 'common/services/Services'; +import { EventEmitter2 } from 'common/EventEmitter2'; export class TestTerminal extends Terminal { writeSync(data: string): void { @@ -23,6 +24,10 @@ export class TestTerminal extends Terminal { } export class MockTerminal implements ITerminal { + onBlur: IEvent; + onFocus: IEvent; + onA11yChar: IEvent; + onA11yTab: IEvent; onCursorMove: IEvent; onLineFeed: IEvent; onSelectionChange: IEvent; @@ -181,6 +186,8 @@ export class MockTerminal implements ITerminal { } export class MockInputHandlingTerminal implements IInputHandlingTerminal { + onA11yCharEmitter: EventEmitter2; + onA11yTabEmitter: EventEmitter2; element: HTMLElement; options: ITerminalOptions = {}; cols: number; diff --git a/src/Types.ts b/src/Types.ts index 71987bbe..536f7cca 100644 --- a/src/Types.ts +++ b/src/Types.ts @@ -3,9 +3,9 @@ * @license MIT */ -import { ITerminalOptions as IPublicTerminalOptions, IEventEmitter, IDisposable, IMarker, ISelectionPosition } from 'xterm'; +import { ITerminalOptions as IPublicTerminalOptions, IDisposable, IMarker, ISelectionPosition } from 'xterm'; import { ICharset, IAttributeData, CharData } from 'common/Types'; -import { IEvent } from 'common/EventEmitter2'; +import { IEvent, EventEmitter2 } from 'common/EventEmitter2'; import { IColorSet, IMouseHelper } from 'browser/Types'; import { IOptionsService } from 'common/services/Services'; import { IBuffer, IBufferSet } from 'common/buffer/Types'; @@ -22,7 +22,7 @@ export type LinkMatcherValidationCallback = (uri: string, callback: (isValid: bo * InputHandler. This cleanly separates the large amount of methods needed by * InputHandler cleanly from the ITerminal interface. */ -export interface IInputHandlingTerminal extends IEventEmitter { +export interface IInputHandlingTerminal { element: HTMLElement; options: ITerminalOptions; cols: number; @@ -54,6 +54,9 @@ export interface IInputHandlingTerminal extends IEventEmitter { viewport: IViewport; selectionManager: ISelectionManager; + onA11yCharEmitter: EventEmitter2; + onA11yTabEmitter: EventEmitter2; + bell(): void; focus(): void; updateRange(y: number): void; @@ -209,6 +212,11 @@ export interface ITerminal extends IPublicTerminal, IElementAccessor, IBufferAcc // TODO: We should remove options once components adopt optionsService options: ITerminalOptions; + onBlur: IEvent; + onFocus: IEvent; + onA11yChar: IEvent; + onA11yTab: IEvent; + handler(data: string): void; scrollLines(disp: number, suppressScrollEvent?: boolean): void; cancel(ev: Event, force?: boolean): boolean | void; @@ -217,7 +225,7 @@ export interface ITerminal extends IPublicTerminal, IElementAccessor, IBufferAcc } // Portions of the public API that are required by the internal Terminal -export interface IPublicTerminal extends IDisposable, IEventEmitter { +export interface IPublicTerminal extends IDisposable { textarea: HTMLTextAreaElement; rows: number; cols: number; diff --git a/src/common/EventEmitter.test.ts b/src/common/EventEmitter.test.ts deleted file mode 100644 index c7f75ba0..00000000 --- a/src/common/EventEmitter.test.ts +++ /dev/null @@ -1,77 +0,0 @@ -/** - * Copyright (c) 2017 The xterm.js authors. All rights reserved. - * @license MIT - */ - -import { assert } from 'chai'; -import { EventEmitter } from 'common/EventEmitter'; - -describe('EventEmitter', () => { - let eventEmitter: EventEmitter; - - beforeEach(() => { - eventEmitter = new EventEmitter(); - }); - - describe('emit', () => { - it('should emit events to listeners', () => { - let count1 = 0; - let count2 = 0; - const listener1 = () => count1++; - const listener2 = () => count2++; - eventEmitter.on('test', listener1); - eventEmitter.on('test', listener2); - eventEmitter.emit('test'); - assert.equal(count1, 1); - assert.equal(count2, 1); - eventEmitter.emit('test'); - assert.equal(count1, 2); - assert.equal(count2, 2); - }); - - it('should manage multiple listener types', () => { - let count1 = 0; - let count2 = 0; - const listener1 = () => count1++; - const listener2 = () => count2++; - eventEmitter.on('test', listener1); - eventEmitter.on('foo', listener2); - eventEmitter.emit('test'); - assert.equal(count1, 1); - assert.equal(count2, 0); - eventEmitter.emit('foo'); - assert.equal(count1, 1); - assert.equal(count2, 1); - }); - }); - - describe('listeners', () => { - it('should return listeners for the type requested', () => { - assert.equal(eventEmitter.listeners('test').length, 0); - const listener = () => {}; - eventEmitter.on('test', listener); - assert.deepEqual(eventEmitter.listeners('test'), [listener]); - }); - }); - - describe('off', () => { - it('should remove the specific listener', () => { - const listener1 = () => {}; - const listener2 = () => {}; - eventEmitter.on('foo', listener1); - eventEmitter.on('foo', listener2); - assert.equal(eventEmitter.listeners('foo').length, 2); - eventEmitter.off('foo', listener1); - assert.deepEqual(eventEmitter.listeners('foo'), [listener2]); - }); - }); - - describe('removeAllListeners', () => { - it('should clear all listeners', () => { - eventEmitter.on('foo', () => {}); - assert.equal(eventEmitter.listeners('foo').length, 1); - eventEmitter.removeAllListeners('foo'); - assert.equal(eventEmitter.listeners('foo').length, 0); - }); - }); -}); diff --git a/src/common/EventEmitter.ts b/src/common/EventEmitter.ts deleted file mode 100644 index 266216a4..00000000 --- a/src/common/EventEmitter.ts +++ /dev/null @@ -1,98 +0,0 @@ -/** - * Copyright (c) 2017 The xterm.js authors. All rights reserved. - * @license MIT - */ - -import { IDisposable, IEventEmitter, XtermListener } from 'common/Types'; -import { Disposable } from 'common/Lifecycle'; - -export class EventEmitter extends Disposable implements IEventEmitter, IDisposable { - private _events: {[type: string]: XtermListener[]}; - - constructor() { - super(); - // Restore the previous events if available, this will happen if the - // constructor is called multiple times on the same object (terminal reset). - this._events = (this)._events || {}; - } - - public on(type: string, listener: XtermListener): void { - this._events[type] = this._events[type] || []; - this._events[type].push(listener); - } - - /** - * Adds a disposable listener to the EventEmitter, returning the disposable. - * @param type The event type. - * @param handler The handler for the listener. - */ - public addDisposableListener(type: string, handler: XtermListener): IDisposable { - // TODO: Rename addDisposableEventListener to more easily disambiguate from Dom listener - this.on(type, handler); - let disposed = false; - return { - dispose: () => { - if (disposed) { - // Already disposed - return; - } - this.off(type, handler); - disposed = true; - } - }; - } - - public off(type: string, listener: XtermListener): void { - if (!this._events[type]) { - return; - } - - const obj = this._events[type]; - let i = obj.length; - - while (i--) { - if (obj[i] === listener) { - obj.splice(i, 1); - return; - } - } - } - - public removeAllListeners(type: string): void { - if (this._events[type]) { - delete this._events[type]; - } - } - - public emit(type: string, ...args: any[]): void { - if (!this._events[type]) { - return; - } - const obj = this._events[type]; - for (let i = 0; i < obj.length; i++) { - obj[i].apply(this, args); - } - } - - public emitMayRemoveListeners(type: string, ...args: any[]): void { - if (!this._events[type]) { - return; - } - const obj = this._events[type]; - let length = obj.length; - for (let i = 0; i < obj.length; i++) { - obj[i].apply(this, args); - i -= length - obj.length; - length = obj.length; - } - } - - public listeners(type: string): XtermListener[] { - return this._events[type] || []; - } - - public dispose(): void { - super.dispose(); - this._events = {}; - } -} diff --git a/src/public/Terminal.ts b/src/public/Terminal.ts index 5c7b4b99..2ccbdef6 100644 --- a/src/public/Terminal.ts +++ b/src/public/Terminal.ts @@ -43,27 +43,6 @@ export class Terminal implements ITerminalApi { public focus(): void { this._core.focus(); } - public on(type: 'blur' | 'focus' | 'linefeed' | 'selection', listener: () => void): void; - public on(type: 'data', listener: (...args: any[]) => void): void; - public on(type: 'key', listener: (key?: string, event?: KeyboardEvent) => void): void; - public on(type: 'keypress' | 'keydown', listener: (event?: KeyboardEvent) => void): void; - public on(type: 'refresh', listener: (data?: { start: number; end: number; }) => void): void; - public on(type: 'resize', listener: (data?: { cols: number; rows: number; }) => void): void; - public on(type: 'scroll', listener: (ydisp?: number) => void): void; - public on(type: 'title', listener: (title?: string) => void): void; - public on(type: string, listener: (...args: any[]) => void): void; - public on(type: any, listener: any): void { - this._core.on(type, listener); - } - public off(type: string, listener: (...args: any[]) => void): void { - this._core.off(type, listener); - } - public emit(type: string, data?: any): void { - this._core.emit(type, data); - } - public addDisposableListener(type: string, handler: (...args: any[]) => void): IDisposable { - return this._core.addDisposableListener(type, handler); - } public resize(columns: number, rows: number): void { this._core.resize(columns, rows); } diff --git a/typings/xterm.d.ts b/typings/xterm.d.ts index 22446e36..3dc08782 100644 --- a/typings/xterm.d.ts +++ b/typings/xterm.d.ts @@ -268,13 +268,6 @@ declare module 'xterm' { willLinkActivate?: (event: MouseEvent, uri: string) => boolean; } - export interface IEventEmitter { - on(type: string, listener: (...args: any[]) => void): void; - off(type: string, listener: (...args: any[]) => void): void; - emit(type: string, data?: any): void; - addDisposableListener(type: string, handler: (...args: any[]) => void): IDisposable; - } - /** * An object that can be disposed via a dispose function. */ @@ -305,7 +298,7 @@ declare module 'xterm' { /** * The class that represents an xterm.js terminal. */ - export class Terminal implements IEventEmitter, IDisposable { + export class Terminal implements IDisposable { /** * The element containing the terminal. */ @@ -429,96 +422,6 @@ declare module 'xterm' { */ focus(): void; - /** - * Registers an event listener. - * @param type The type of the event. - * @param listener The listener. - * @deprecated use `Terminal.onEvent(listener)` instead. - */ - on(type: 'blur' | 'focus' | 'linefeed' | 'selection', listener: () => void): void; - /** - * Registers an event listener. - * @param type The type of the event. - * @param listener The listener. - * @deprecated use `Terminal.onEvent(listener)` instead. - */ - on(type: 'data', listener: (...args: any[]) => void): void; - /** - * Registers an event listener. - * @param type The type of the event. - * @param listener The listener. - * @deprecated use `Terminal.onEvent(listener)` instead. - */ - on(type: 'key', listener: (key: string, event: KeyboardEvent) => void): void; - /** - * Registers an event listener. - * @param type The type of the event. - * @param listener The listener. - * @deprecated use `Terminal.onEvent(listener)` instead. - */ - on(type: 'keypress' | 'keydown', listener: (event: KeyboardEvent) => void): void; - /** - * Registers an event listener. - * @param type The type of the event. - * @param listener The listener. - * @deprecated use `Terminal.onEvent(listener)` instead. - */ - on(type: 'refresh', listener: (data: {start: number, end: number}) => void): void; - /** - * Registers an event listener. - * @param type The type of the event. - * @param listener The listener. - * @deprecated use `Terminal.onEvent(listener)` instead. - */ - on(type: 'resize', listener: (data: {cols: number, rows: number}) => void): void; - /** - * Registers an event listener. - * @param type The type of the event. - * @param listener The listener. - * @deprecated use `Terminal.onEvent(listener)` instead. - */ - on(type: 'scroll', listener: (ydisp: number) => void): void; - /** - * Registers an event listener. - * @param type The type of the event. - * @param listener The listener. - * @deprecated use `Terminal.onEvent(listener)` instead. - */ - on(type: 'title', listener: (title: string) => void): void; - /** - * Registers an event listener. - * @param type The type of the event. - * @param listener The listener. - * @deprecated use `Terminal.onEvent(listener)` instead. - */ - on(type: string, listener: (...args: any[]) => void): void; - - /** - * Deregisters an event listener. - * @param type The type of the event. - * @param listener The listener. - * @deprecated use `Terminal.onEvent(listener).dispose()` instead. - */ - off(type: 'blur' | 'focus' | 'linefeed' | 'selection' | 'data' | 'key' | 'keypress' | 'keydown' | 'refresh' | 'resize' | 'scroll' | 'title' | string, listener: (...args: any[]) => void): void; - - /** - * Emits an event on the terminal. - * @param type The type of event - * @param data data associated with the event. - * @deprecated This is being removed from the API with no replacement, see - * issue #1505. - */ - emit(type: string, data?: any): void; - - /** - * Adds an event listener to the Terminal, returning an IDisposable that can - * be used to conveniently remove the event listener. - * @param type The type of event. - * @param handler The event handler. - * @deprecated use `Terminal.onEvent(listener)` instead. - */ - addDisposableListener(type: string, handler: (...args: any[]) => void): IDisposable; - /** * 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 From 80ce33f9ef1c3c8eceea79a5cff3c9938e5b6ec2 Mon Sep 17 00:00:00 2001 From: Daniel Imms Date: Sat, 8 Jun 2019 21:33:02 -0700 Subject: [PATCH 2/4] Rename EventEmitter2 to EventEmitter Fixes #2029 --- src/InputHandler.ts | 10 +++---- src/Linkifier.ts | 8 +++--- src/SelectionManager.ts | 8 +++--- src/Terminal.ts | 28 +++++++++---------- src/TestUtils.test.ts | 6 ++-- src/Types.ts | 6 ++-- src/browser/TestUtils.test.ts | 4 +-- src/browser/services/CharSizeService.ts | 4 +-- src/browser/services/RenderService.ts | 8 +++--- src/browser/services/Services.d.ts | 2 +- src/common/CircularList.ts | 8 +++--- ...tEmitter2.test.ts => EventEmitter.test.ts} | 8 +++--- .../{EventEmitter2.ts => EventEmitter.ts} | 2 +- src/common/TestUtils.test.ts | 4 +-- src/common/Types.ts | 8 +++--- src/common/buffer/BufferSet.ts | 4 +-- src/common/buffer/Marker.ts | 4 +-- src/common/buffer/Types.ts | 2 +- src/common/services/OptionsService.ts | 4 +-- src/common/services/Services.d.ts | 2 +- src/public/Terminal.ts | 2 +- 21 files changed, 66 insertions(+), 66 deletions(-) rename src/common/{EventEmitter2.test.ts => EventEmitter.test.ts} (81%) rename src/common/{EventEmitter2.ts => EventEmitter.ts} (97%) diff --git a/src/InputHandler.ts b/src/InputHandler.ts index 2b592aa7..5ea20caf 100644 --- a/src/InputHandler.ts +++ b/src/InputHandler.ts @@ -14,7 +14,7 @@ import { Disposable } from 'common/Lifecycle'; import { concat } from 'common/TypedArrayUtils'; import { StringToUtf32, stringFromCodePoint, utf32ToString, Utf8ToUtf32 } from 'common/input/TextDecoder'; import { CellData, Attributes, FgFlags, BgFlags, AttributeData, NULL_CELL_WIDTH, NULL_CELL_CODE, DEFAULT_ATTR_DATA } from 'common/buffer/BufferLine'; -import { EventEmitter2, IEvent } from 'common/EventEmitter2'; +import { EventEmitter, IEvent } from 'common/EventEmitter'; import { IParsingState, IDcsHandler, IEscapeSequenceParser } from 'common/parser/Types'; /** @@ -108,13 +108,13 @@ export class InputHandler extends Disposable implements IInputHandler { private _utf8Decoder: Utf8ToUtf32 = new Utf8ToUtf32(); private _workCell: CellData = new CellData(); - private _onCursorMove = new EventEmitter2(); + private _onCursorMove = new EventEmitter(); public get onCursorMove(): IEvent { return this._onCursorMove.event; } - private _onData = new EventEmitter2(); + private _onData = new EventEmitter(); public get onData(): IEvent { return this._onData.event; } - private _onLineFeed = new EventEmitter2(); + private _onLineFeed = new EventEmitter(); public get onLineFeed(): IEvent { return this._onLineFeed.event; } - private _onScroll = new EventEmitter2(); + private _onScroll = new EventEmitter(); public get onScroll(): IEvent { return this._onScroll.event; } constructor( diff --git a/src/Linkifier.ts b/src/Linkifier.ts index 50794a58..c11849de 100644 --- a/src/Linkifier.ts +++ b/src/Linkifier.ts @@ -7,7 +7,7 @@ import { ILinkifierEvent, ILinkMatcher, LinkMatcherHandler, ILinkMatcherOptions, import { IBufferStringIteratorResult } from 'common/buffer/Types'; import { MouseZone } from './MouseZoneManager'; import { getStringCellWidth } from 'common/CharWidth'; -import { EventEmitter2, IEvent } from 'common/EventEmitter2'; +import { EventEmitter, IEvent } from 'common/EventEmitter'; /** * The Linkifier applies links to rows shortly after they have been refreshed. @@ -34,11 +34,11 @@ export class Linkifier implements ILinkifier { private _nextLinkMatcherId = 0; private _rowsToLinkify: { start: number, end: number }; - private _onLinkHover = new EventEmitter2(); + private _onLinkHover = new EventEmitter(); public get onLinkHover(): IEvent { return this._onLinkHover.event; } - private _onLinkLeave = new EventEmitter2(); + private _onLinkLeave = new EventEmitter(); public get onLinkLeave(): IEvent { return this._onLinkLeave.event; } - private _onLinkTooltip = new EventEmitter2(); + private _onLinkTooltip = new EventEmitter(); public get onLinkTooltip(): IEvent { return this._onLinkTooltip.event; } constructor( diff --git a/src/SelectionManager.ts b/src/SelectionManager.ts index 1a8d6b6c..ef16f5c5 100644 --- a/src/SelectionManager.ts +++ b/src/SelectionManager.ts @@ -12,7 +12,7 @@ import { SelectionModel } from './SelectionModel'; import { AltClickHandler } from './handlers/AltClickHandler'; import { CellData } from 'common/buffer/BufferLine'; import { IDisposable } from 'xterm'; -import { EventEmitter2, IEvent } from 'common/EventEmitter2'; +import { EventEmitter, IEvent } from 'common/EventEmitter'; import { ICharSizeService } from 'browser/services/Services'; import { IBufferService } from 'common/services/Services'; @@ -110,11 +110,11 @@ export class SelectionManager implements ISelectionManager { private _mouseDownTimeStamp: number; - private _onLinuxMouseSelection = new EventEmitter2(); + private _onLinuxMouseSelection = new EventEmitter(); public get onLinuxMouseSelection(): IEvent { return this._onLinuxMouseSelection.event; } - private _onRedrawRequest = new EventEmitter2(); + private _onRedrawRequest = new EventEmitter(); public get onRedrawRequest(): IEvent { return this._onRedrawRequest.event; } - private _onSelectionChange = new EventEmitter2(); + private _onSelectionChange = new EventEmitter(); public get onSelectionChange(): IEvent { return this._onSelectionChange.event; } constructor( diff --git a/src/Terminal.ts b/src/Terminal.ts index f99b6a9d..9d27e0f5 100644 --- a/src/Terminal.ts +++ b/src/Terminal.ts @@ -45,7 +45,7 @@ import { removeTerminalFromCache } from './renderer/atlas/CharAtlasCache'; import { DomRenderer } from './renderer/dom/DomRenderer'; import { IKeyboardEvent, KeyboardResultType, ICharset, IBufferLine, IAttributeData } from 'common/Types'; import { evaluateKeyboardEvent } from 'common/input/Keyboard'; -import { EventEmitter2, IEvent } from 'common/EventEmitter2'; +import { EventEmitter, IEvent } from 'common/EventEmitter'; import { Attributes, DEFAULT_ATTR_DATA } from 'common/buffer/BufferLine'; import { applyWindowsMode } from './WindowsMode'; import { ColorManager } from 'browser/ColorManager'; @@ -190,32 +190,32 @@ export class Terminal extends Disposable implements ITerminal, IDisposable, IInp public get cols(): number { return this._bufferService.cols; } public get rows(): number { return this._bufferService.rows; } - private _onCursorMove = new EventEmitter2(); + private _onCursorMove = new EventEmitter(); public get onCursorMove(): IEvent { return this._onCursorMove.event; } - private _onData = new EventEmitter2(); + private _onData = new EventEmitter(); public get onData(): IEvent { return this._onData.event; } - private _onKey = new EventEmitter2<{ key: string, domEvent: KeyboardEvent }>(); + private _onKey = new EventEmitter<{ key: string, domEvent: KeyboardEvent }>(); public get onKey(): IEvent<{ key: string, domEvent: KeyboardEvent }> { return this._onKey.event; } - private _onLineFeed = new EventEmitter2(); + private _onLineFeed = new EventEmitter(); public get onLineFeed(): IEvent { return this._onLineFeed.event; } - private _onRender = new EventEmitter2<{ start: number, end: number }>(); + private _onRender = new EventEmitter<{ start: number, end: number }>(); public get onRender(): IEvent<{ start: number, end: number }> { return this._onRender.event; } - private _onResize = new EventEmitter2<{ cols: number, rows: number }>(); + private _onResize = new EventEmitter<{ cols: number, rows: number }>(); public get onResize(): IEvent<{ cols: number, rows: number }> { return this._onResize.event; } - private _onScroll = new EventEmitter2(); + private _onScroll = new EventEmitter(); public get onScroll(): IEvent { return this._onScroll.event; } - private _onSelectionChange = new EventEmitter2(); + private _onSelectionChange = new EventEmitter(); public get onSelectionChange(): IEvent { return this._onSelectionChange.event; } - private _onTitleChange = new EventEmitter2(); + private _onTitleChange = new EventEmitter(); public get onTitleChange(): IEvent { return this._onTitleChange.event; } - private _onFocus = new EventEmitter2(); + private _onFocus = new EventEmitter(); public get onFocus(): IEvent { return this._onFocus.event; } - private _onBlur = new EventEmitter2(); + private _onBlur = new EventEmitter(); public get onBlur(): IEvent { return this._onBlur.event; } - public onA11yCharEmitter = new EventEmitter2(); + public onA11yCharEmitter = new EventEmitter(); public get onA11yChar(): IEvent { return this.onA11yCharEmitter.event; } - public onA11yTabEmitter = new EventEmitter2(); + public onA11yTabEmitter = new EventEmitter(); public get onA11yTab(): IEvent { return this.onA11yTabEmitter.event; } /** diff --git a/src/TestUtils.test.ts b/src/TestUtils.test.ts index 4f293eed..6afd018d 100644 --- a/src/TestUtils.test.ts +++ b/src/TestUtils.test.ts @@ -14,7 +14,7 @@ import { Terminal } from './Terminal'; import { AttributeData } from 'common/buffer/BufferLine'; import { IColorManager, IColorSet, IMouseHelper } from 'browser/Types'; import { IOptionsService } from 'common/services/Services'; -import { EventEmitter2 } from 'common/EventEmitter2'; +import { EventEmitter } from 'common/EventEmitter'; export class TestTerminal extends Terminal { writeSync(data: string): void { @@ -186,8 +186,8 @@ export class MockTerminal implements ITerminal { } export class MockInputHandlingTerminal implements IInputHandlingTerminal { - onA11yCharEmitter: EventEmitter2; - onA11yTabEmitter: EventEmitter2; + onA11yCharEmitter: EventEmitter; + onA11yTabEmitter: EventEmitter; element: HTMLElement; options: ITerminalOptions = {}; cols: number; diff --git a/src/Types.ts b/src/Types.ts index 536f7cca..a3435614 100644 --- a/src/Types.ts +++ b/src/Types.ts @@ -5,7 +5,7 @@ import { ITerminalOptions as IPublicTerminalOptions, IDisposable, IMarker, ISelectionPosition } from 'xterm'; import { ICharset, IAttributeData, CharData } from 'common/Types'; -import { IEvent, EventEmitter2 } from 'common/EventEmitter2'; +import { IEvent, EventEmitter } from 'common/EventEmitter'; import { IColorSet, IMouseHelper } from 'browser/Types'; import { IOptionsService } from 'common/services/Services'; import { IBuffer, IBufferSet } from 'common/buffer/Types'; @@ -54,8 +54,8 @@ export interface IInputHandlingTerminal { viewport: IViewport; selectionManager: ISelectionManager; - onA11yCharEmitter: EventEmitter2; - onA11yTabEmitter: EventEmitter2; + onA11yCharEmitter: EventEmitter; + onA11yTabEmitter: EventEmitter; bell(): void; focus(): void; diff --git a/src/browser/TestUtils.test.ts b/src/browser/TestUtils.test.ts index 7c965c8d..b286295b 100644 --- a/src/browser/TestUtils.test.ts +++ b/src/browser/TestUtils.test.ts @@ -3,12 +3,12 @@ * @license MIT */ -import { IEvent, EventEmitter2 } from 'common/EventEmitter2'; +import { IEvent, EventEmitter } from 'common/EventEmitter'; import { ICharSizeService } from 'browser/services/Services'; export class MockCharSizeService implements ICharSizeService { get hasValidSize(): boolean { return this.width > 0 && this.height > 0; } - onCharSizeChange: IEvent = new EventEmitter2().event; + onCharSizeChange: IEvent = new EventEmitter().event; constructor(public width: number, public height: number) {} measure(): void {} } diff --git a/src/browser/services/CharSizeService.ts b/src/browser/services/CharSizeService.ts index 9312e383..42920bfa 100644 --- a/src/browser/services/CharSizeService.ts +++ b/src/browser/services/CharSizeService.ts @@ -4,7 +4,7 @@ */ import { IOptionsService } from 'common/services/Services'; -import { IEvent, EventEmitter2 } from 'common/EventEmitter2'; +import { IEvent, EventEmitter } from 'common/EventEmitter'; import { ICharSizeService } from 'browser/services/Services'; export class CharSizeService implements ICharSizeService { @@ -14,7 +14,7 @@ export class CharSizeService implements ICharSizeService { public get hasValidSize(): boolean { return this.width > 0 && this.height > 0; } - private _onCharSizeChange = new EventEmitter2(); + private _onCharSizeChange = new EventEmitter(); public get onCharSizeChange(): IEvent { return this._onCharSizeChange.event; } constructor( diff --git a/src/browser/services/RenderService.ts b/src/browser/services/RenderService.ts index 5930569d..5035ed3d 100644 --- a/src/browser/services/RenderService.ts +++ b/src/browser/services/RenderService.ts @@ -5,7 +5,7 @@ import { IRenderer, IRenderDimensions, CharacterJoinerHandler } from 'browser/renderer/Types'; import { RenderDebouncer } from 'browser/RenderDebouncer'; -import { EventEmitter2, IEvent } from 'common/EventEmitter2'; +import { EventEmitter, IEvent } from 'common/EventEmitter'; import { Disposable } from 'common/Lifecycle'; import { ScreenDprMonitor } from 'browser/ScreenDprMonitor'; import { addDisposableDomListener } from 'browser/Lifecycle'; @@ -22,11 +22,11 @@ export class RenderService extends Disposable implements IRenderService { private _canvasWidth: number = 0; private _canvasHeight: number = 0; - private _onDimensionsChange = new EventEmitter2(); + private _onDimensionsChange = new EventEmitter(); public get onDimensionsChange(): IEvent { return this._onDimensionsChange.event; } - private _onRender = new EventEmitter2<{ start: number, end: number }>(); + private _onRender = new EventEmitter<{ start: number, end: number }>(); public get onRender(): IEvent<{ start: number, end: number }> { return this._onRender.event; } - private _onRefreshRequest = new EventEmitter2<{ start: number, end: number }>(); + private _onRefreshRequest = new EventEmitter<{ start: number, end: number }>(); public get onRefreshRequest(): IEvent<{ start: number, end: number }> { return this._onRefreshRequest.event; } public get dimensions(): IRenderDimensions { return this._renderer.dimensions; } diff --git a/src/browser/services/Services.d.ts b/src/browser/services/Services.d.ts index 6bdf383a..1916572c 100644 --- a/src/browser/services/Services.d.ts +++ b/src/browser/services/Services.d.ts @@ -3,7 +3,7 @@ * @license MIT */ -import { IEvent } from 'common/EventEmitter2'; +import { IEvent } from 'common/EventEmitter'; import { IRenderDimensions, IRenderer, CharacterJoinerHandler } from 'browser/renderer/Types'; import { IColorSet } from 'browser/Types'; diff --git a/src/common/CircularList.ts b/src/common/CircularList.ts index 88e714b8..d4ad3fce 100644 --- a/src/common/CircularList.ts +++ b/src/common/CircularList.ts @@ -4,7 +4,7 @@ */ import { ICircularList } from 'common/Types'; -import { EventEmitter2, IEvent } from 'common/EventEmitter2'; +import { EventEmitter, IEvent } from 'common/EventEmitter'; export interface IInsertEvent { index: number; @@ -25,11 +25,11 @@ export class CircularList implements ICircularList { private _startIndex: number; private _length: number; - public onDeleteEmitter = new EventEmitter2(); + public onDeleteEmitter = new EventEmitter(); public get onDelete(): IEvent { return this.onDeleteEmitter.event; } - public onInsertEmitter = new EventEmitter2(); + public onInsertEmitter = new EventEmitter(); public get onInsert(): IEvent { return this.onInsertEmitter.event; } - public onTrimEmitter = new EventEmitter2(); + public onTrimEmitter = new EventEmitter(); public get onTrim(): IEvent { return this.onTrimEmitter.event; } constructor( diff --git a/src/common/EventEmitter2.test.ts b/src/common/EventEmitter.test.ts similarity index 81% rename from src/common/EventEmitter2.test.ts rename to src/common/EventEmitter.test.ts index bd8b5dea..e9013a99 100644 --- a/src/common/EventEmitter2.test.ts +++ b/src/common/EventEmitter.test.ts @@ -4,12 +4,12 @@ */ import { assert } from 'chai'; -import { EventEmitter2 } from 'common/EventEmitter2'; +import { EventEmitter } from 'common/EventEmitter'; -describe('EventEmitter2', () => { +describe('EventEmitter', () => { it('should fire listeners multiple times', () => { const order: string[] = []; - const emitter = new EventEmitter2(); + const emitter = new EventEmitter(); emitter.event(data => order.push(data + 'a')); emitter.event(data => order.push(data + 'b')); emitter.fire(1); @@ -19,7 +19,7 @@ describe('EventEmitter2', () => { it('should not fire listeners once disposed', () => { const order: string[] = []; - const emitter = new EventEmitter2(); + const emitter = new EventEmitter(); emitter.event(data => order.push(data + 'a')); const disposeB = emitter.event(data => order.push(data + 'b')); emitter.event(data => order.push(data + 'c')); diff --git a/src/common/EventEmitter2.ts b/src/common/EventEmitter.ts similarity index 97% rename from src/common/EventEmitter2.ts rename to src/common/EventEmitter.ts index fcbef969..efc101ce 100644 --- a/src/common/EventEmitter2.ts +++ b/src/common/EventEmitter.ts @@ -13,7 +13,7 @@ export interface IEvent { (listener: (e: T) => any): IDisposable; } -export class EventEmitter2 { +export class EventEmitter { private _listeners: IListener[] = []; private _event?: IEvent; diff --git a/src/common/TestUtils.test.ts b/src/common/TestUtils.test.ts index 0a0cb6a4..0bb56ee3 100644 --- a/src/common/TestUtils.test.ts +++ b/src/common/TestUtils.test.ts @@ -4,7 +4,7 @@ */ import { IBufferService, IOptionsService, ITerminalOptions, IPartialTerminalOptions } from 'common/services/Services'; -import { IEvent, EventEmitter2 } from 'common/EventEmitter2'; +import { IEvent, EventEmitter } from 'common/EventEmitter'; import { clone } from 'common/Clone'; import { DEFAULT_OPTIONS } from 'common/services/OptionsService'; @@ -21,7 +21,7 @@ export class MockBufferService implements IBufferService { export class MockOptionsService implements IOptionsService { options: ITerminalOptions = clone(DEFAULT_OPTIONS); - onOptionChange: IEvent = new EventEmitter2().event; + onOptionChange: IEvent = new EventEmitter().event; constructor(testOptions: IPartialTerminalOptions) { Object.keys(testOptions).forEach(key => this.options[key] = (testOptions)[key]); } diff --git a/src/common/Types.ts b/src/common/Types.ts index 67d449e5..b29515d4 100644 --- a/src/common/Types.ts +++ b/src/common/Types.ts @@ -3,7 +3,7 @@ * @license MIT */ -import { IEvent, EventEmitter2 } from 'common/EventEmitter2'; +import { IEvent, EventEmitter } from 'common/EventEmitter'; import { IDeleteEvent, IInsertEvent } from 'common/CircularList'; export const DEFAULT_COLOR = 256; @@ -40,11 +40,11 @@ export interface ICircularList { maxLength: number; isFull: boolean; - onDeleteEmitter: EventEmitter2; + onDeleteEmitter: EventEmitter; onDelete: IEvent; - onInsertEmitter: EventEmitter2; + onInsertEmitter: EventEmitter; onInsert: IEvent; - onTrimEmitter: EventEmitter2; + onTrimEmitter: EventEmitter; onTrim: IEvent; get(index: number): T | undefined; diff --git a/src/common/buffer/BufferSet.ts b/src/common/buffer/BufferSet.ts index cc8fe737..50e6e505 100644 --- a/src/common/buffer/BufferSet.ts +++ b/src/common/buffer/BufferSet.ts @@ -6,7 +6,7 @@ import { IBuffer, IBufferSet } from 'common/buffer/Types'; import { IAttributeData } from 'common/Types'; import { Buffer } from 'common/buffer/Buffer'; -import { EventEmitter2, IEvent } from 'common/EventEmitter2'; +import { EventEmitter, IEvent } from 'common/EventEmitter'; import { IOptionsService, IBufferService } from 'common/services/Services'; /** @@ -19,7 +19,7 @@ export class BufferSet implements IBufferSet { private _activeBuffer: Buffer; - private _onBufferActivate = new EventEmitter2<{activeBuffer: IBuffer, inactiveBuffer: IBuffer}>(); + private _onBufferActivate = new EventEmitter<{activeBuffer: IBuffer, inactiveBuffer: IBuffer}>(); public get onBufferActivate(): IEvent<{activeBuffer: IBuffer, inactiveBuffer: IBuffer}> { return this._onBufferActivate.event; } /** diff --git a/src/common/buffer/Marker.ts b/src/common/buffer/Marker.ts index 51c5d7f8..7f52ac99 100644 --- a/src/common/buffer/Marker.ts +++ b/src/common/buffer/Marker.ts @@ -3,7 +3,7 @@ * @license MIT */ -import { EventEmitter2, IEvent } from 'common/EventEmitter2'; +import { EventEmitter, IEvent } from 'common/EventEmitter'; import { Disposable } from 'common/Lifecycle'; import { IMarker } from 'common/Types'; @@ -15,7 +15,7 @@ export class Marker extends Disposable implements IMarker { public get id(): number { return this._id; } - private _onDispose = new EventEmitter2(); + private _onDispose = new EventEmitter(); public get onDispose(): IEvent { return this._onDispose.event; } constructor( diff --git a/src/common/buffer/Types.ts b/src/common/buffer/Types.ts index 37ce2b7e..4b4bb85f 100644 --- a/src/common/buffer/Types.ts +++ b/src/common/buffer/Types.ts @@ -4,7 +4,7 @@ */ import { IAttributeData, ICircularList, IBufferLine, ICellData } from 'common/Types'; -import { IEvent } from 'common/EventEmitter2'; +import { IEvent } from 'common/EventEmitter'; // BufferIndex denotes a position in the buffer: [rowIndex, colIndex] export type BufferIndex = [number, number]; diff --git a/src/common/services/OptionsService.ts b/src/common/services/OptionsService.ts index d518aae6..2d2a08f0 100644 --- a/src/common/services/OptionsService.ts +++ b/src/common/services/OptionsService.ts @@ -4,7 +4,7 @@ */ import { IOptionsService, ITerminalOptions, IPartialTerminalOptions } from 'common/services/Services'; -import { EventEmitter2, IEvent } from 'common/EventEmitter2'; +import { EventEmitter, IEvent } from 'common/EventEmitter'; import { isMac } from 'common/Platform'; import { clone } from 'common/Clone'; @@ -57,7 +57,7 @@ const CONSTRUCTOR_ONLY_OPTIONS = ['cols', 'rows']; export class OptionsService implements IOptionsService { public options: ITerminalOptions; - private _onOptionChange = new EventEmitter2(); + private _onOptionChange = new EventEmitter(); public get onOptionChange(): IEvent { return this._onOptionChange.event; } constructor(options: IPartialTerminalOptions) { diff --git a/src/common/services/Services.d.ts b/src/common/services/Services.d.ts index 8ebc0308..0c7f92bd 100644 --- a/src/common/services/Services.d.ts +++ b/src/common/services/Services.d.ts @@ -3,7 +3,7 @@ * @license MIT */ -import { IEvent } from 'common/EventEmitter2'; +import { IEvent } from 'common/EventEmitter'; export interface IBufferService { readonly cols: number; diff --git a/src/public/Terminal.ts b/src/public/Terminal.ts index 2ccbdef6..1c019b16 100644 --- a/src/public/Terminal.ts +++ b/src/public/Terminal.ts @@ -9,7 +9,7 @@ import { IBufferLine } from 'common/Types'; import { IBuffer } from 'common/buffer/Types'; import { Terminal as TerminalCore } from '../Terminal'; import * as Strings from '../Strings'; -import { IEvent } from 'common/EventEmitter2'; +import { IEvent } from 'common/EventEmitter'; import { AddonManager } from './AddonManager'; export class Terminal implements ITerminalApi { From 73a08f785075977513c6dd2edde9908e8e6c87d3 Mon Sep 17 00:00:00 2001 From: Daniel Imms Date: Sat, 8 Jun 2019 21:46:13 -0700 Subject: [PATCH 3/4] Consolidate service init --- src/Terminal.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Terminal.ts b/src/Terminal.ts index a1c70d3b..835ff420 100644 --- a/src/Terminal.ts +++ b/src/Terminal.ts @@ -235,9 +235,9 @@ export class Terminal extends Disposable implements ITerminal, IDisposable, IInp // Setup and initialize common services this.optionsService = new OptionsService(options); + this._bufferService = new BufferService(this.optionsService); this._setupOptionsListeners(); this._setup(); - this._bufferService = new BufferService(this.optionsService); } public dispose(): void { From 07cef1ec9eaa3db423398c2654705f468114340e Mon Sep 17 00:00:00 2001 From: Daniel Imms Date: Sat, 8 Jun 2019 21:51:24 -0700 Subject: [PATCH 4/4] Increase attach addon timeouts --- addons/xterm-addon-attach/src/AttachAddon.api.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/addons/xterm-addon-attach/src/AttachAddon.api.ts b/addons/xterm-addon-attach/src/AttachAddon.api.ts index 39a6f73a..945824a2 100644 --- a/addons/xterm-addon-attach/src/AttachAddon.api.ts +++ b/addons/xterm-addon-attach/src/AttachAddon.api.ts @@ -17,7 +17,7 @@ const height = 600; describe('AttachAddon', () => { before(async function(): Promise { - this.timeout(10000); + this.timeout(20000); browser = await puppeteer.launch({ headless: process.argv.indexOf('--headless') !== -1, slowMo: 80, @@ -32,7 +32,7 @@ describe('AttachAddon', () => { }); beforeEach(async function(): Promise { - this.timeout(5000); + this.timeout(20000); await page.goto(APP); });