From db78b75e8bd6a88b870daa5b1fa35a990afef476 Mon Sep 17 00:00:00 2001 From: Daniel Imms Date: Tue, 9 Apr 2019 19:55:33 -0700 Subject: [PATCH] Convert selection to EventEmitter2 --- src/SelectionManager.ts | 14 ++++++++------ src/Terminal.ts | 5 +++-- src/addons/terminado/terminado.ts | 2 +- 3 files changed, 12 insertions(+), 9 deletions(-) diff --git a/src/SelectionManager.ts b/src/SelectionManager.ts index 54499428..087e8995 100644 --- a/src/SelectionManager.ts +++ b/src/SelectionManager.ts @@ -108,8 +108,10 @@ export class SelectionManager extends EventEmitter implements ISelectionManager private _mouseDownTimeStamp: number; - private _onNewMouseSelection = new EventEmitter2(); - public get onNewMouseSelection(): IEvent { return this._onNewMouseSelection.event; } + private _onLinuxMouseSelection = new EventEmitter2(); + public get onLinuxMouseSelection(): IEvent { return this._onLinuxMouseSelection.event; } + private _onSelectionChange = new EventEmitter2(); + public get onSelectionChange(): IEvent { return this._onSelectionChange.event; } constructor( private _terminal: ITerminal, @@ -262,7 +264,7 @@ export class SelectionManager extends EventEmitter implements ISelectionManager if (Browser.isLinux && isNewMouseSelection) { const selectionText = this.selectionText; if (selectionText.length) { - this._onNewMouseSelection.fire(this.selectionText); + this._onLinuxMouseSelection.fire(this.selectionText); } } } @@ -322,7 +324,7 @@ export class SelectionManager extends EventEmitter implements ISelectionManager public selectAll(): void { this._model.isSelectAllActive = true; this.refresh(); - this._terminal.emit('selection'); + this._onSelectionChange.fire(); } public selectLines(start: number, end: number): void { @@ -332,7 +334,7 @@ export class SelectionManager extends EventEmitter implements ISelectionManager this._model.selectionStart = [0, start]; this._model.selectionEnd = [this._terminal.cols, end]; this.refresh(); - this._terminal.emit('selection'); + this._onSelectionChange.fire(); } /** @@ -650,7 +652,7 @@ export class SelectionManager extends EventEmitter implements ISelectionManager if (this.selectionText.length <= 1 && timeElapsed < ALT_CLICK_MOVE_CURSOR_TIME) { (new AltClickHandler(event, this._terminal)).move(); } else if (this.hasSelection) { - this._terminal.emit('selection'); + this._onSelectionChange.fire(); } } diff --git a/src/Terminal.ts b/src/Terminal.ts index a52da3d5..59f675f3 100644 --- a/src/Terminal.ts +++ b/src/Terminal.ts @@ -261,7 +261,6 @@ export class Terminal extends EventEmitter implements ITerminal, IDisposable, II this._setup(); // TODO: Replace EventEmitter with EventEmitter2 internally - this.on('selection', () => this._onSelectionChange.fire()); this.on('refresh', e => this._onRender.fire(e)); // TODO: Remove these in v4 @@ -271,6 +270,7 @@ export class Terminal extends EventEmitter implements ITerminal, IDisposable, II this.onKey(e => this.emit('key', e.key, e.domEvent)); this.onLineFeed(() => this.emit('linefeed')); 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)); } @@ -785,9 +785,10 @@ export class Terminal extends EventEmitter implements ITerminal, IDisposable, II this.register(this.renderer.addDisposableListener('resize', (dimensions) => this.viewport.syncScrollArea())); this.selectionManager = new SelectionManager(this, this.charMeasure); + this.register(this.selectionManager.onSelectionChange(() => this._onSelectionChange.fire())); this.register(addDisposableDomListener(this.element, 'mousedown', (e: MouseEvent) => this.selectionManager.onMouseDown(e))); this.register(this.selectionManager.addDisposableListener('refresh', data => this.renderer.onSelectionChanged(data.start, data.end, data.columnSelectMode))); - this.register(this.selectionManager.onNewMouseSelection(text => { + this.register(this.selectionManager.onLinuxMouseSelection(text => { // If there's a new selection, put it into the textarea, focus and select it // in order to register it as a selection on the OS. This event is fired // only on Linux to enable middle click to paste selection. diff --git a/src/addons/terminado/terminado.ts b/src/addons/terminado/terminado.ts index cefa8087..9895a07b 100644 --- a/src/addons/terminado/terminado.ts +++ b/src/addons/terminado/terminado.ts @@ -59,7 +59,7 @@ export function terminadoAttach(term: Terminal, socket: WebSocket, bidirectional socket.addEventListener('message', addonTerminal.__getMessage); if (bidirectional) { - addonTerminal._core.register(addonTerminal.onData(addonTerminal.__sendData); + addonTerminal._core.register(addonTerminal.onData(addonTerminal.__sendData)); } addonTerminal._core.register(addonTerminal.onResize(addonTerminal.__setSize));