diff --git a/src/Renderer.ts b/src/Renderer.ts index af95d51e..21d48328 100644 --- a/src/Renderer.ts +++ b/src/Renderer.ts @@ -318,6 +318,10 @@ export class Renderer { this._terminal.emit('refresh', {element: this._terminal.element, start: start, end: end}); }; + + public refreshSelection(start: [number, number], end: [number, number]) { + console.log('renderer, refresh:', start, end); + } } diff --git a/src/SelectionManager.ts b/src/SelectionManager.ts index 3c99ef66..e0e5bdbc 100644 --- a/src/SelectionManager.ts +++ b/src/SelectionManager.ts @@ -4,9 +4,11 @@ import { CharMeasure } from './utils/CharMeasure'; import { CircularList } from './utils/CircularList'; +import { EventEmitter } from './EventEmitter'; import * as Mouse from './utils/Mouse'; -export class SelectionManager { +export class SelectionManager extends EventEmitter { + // TODO: Create a SelectionModel private _selectionStart: [number, number]; private _selectionEnd: [number, number]; @@ -18,6 +20,7 @@ export class SelectionManager { private _mouseMoveListener: EventListener; constructor(buffer: CircularList, rowContainer: HTMLElement, selectionContainer: HTMLElement, charMeasure: CharMeasure) { + super(); this._rowContainer = rowContainer; this._selectionContainer = selectionContainer; this._buffer = buffer; @@ -44,6 +47,8 @@ export class SelectionManager { * Redraws the selection. */ public refresh(): void { + // TODO: Figure out when to refresh the selection vs when to refresh the viewport + this.emit('refresh', { start: this._selectionStart, end: this._selectionEnd }); console.log(`Selection: Start: (${this._selectionStart[0]}, ${this._selectionStart[1]}), End: (${this._selectionEnd[0]}, ${this._selectionEnd[1]})`); this._selectionContainer.innerHTML = `


`; } diff --git a/src/xterm.js b/src/xterm.js index 8aa51b73..028debb6 100644 --- a/src/xterm.js +++ b/src/xterm.js @@ -698,6 +698,7 @@ Terminal.prototype.open = function(parent, focus) { this.viewport = new Viewport(this, this.viewportElement, this.viewportScrollArea, this.charMeasure); this.renderer = new Renderer(this); this.selectionManager = new SelectionManager(this.lines, this.rowContainer, this.selectionContainer, this.charMeasure); + this.selectionManager.on('refresh', data => this.renderer.refreshSelection(data.start, data.end)); // Setup loop that draws to screen this.refresh(0, this.rows - 1);