From 95cb6f30bbbb91a36136a682ca4df6e80d6b89ac Mon Sep 17 00:00:00 2001 From: Paris Kasidiaris Date: Sun, 18 Jun 2017 17:56:40 +0300 Subject: [PATCH] Introduce new Buffer and BufferSet classes --- src/Buffer.ts | 23 +++++++++++++++++++++++ src/BufferSet.ts | 44 ++++++++++++++++++++++++++++++++++++++++++++ src/Interfaces.ts | 1 + src/xterm.js | 2 ++ 4 files changed, 70 insertions(+) create mode 100644 src/Buffer.ts create mode 100644 src/BufferSet.ts diff --git a/src/Buffer.ts b/src/Buffer.ts new file mode 100644 index 00000000..ba147d81 --- /dev/null +++ b/src/Buffer.ts @@ -0,0 +1,23 @@ +/** + * @license MIT + */ + +import { ITerminal } from './Interfaces'; +import { CircularList } from './utils/CircularList'; + +export class Buffer { + private _lines: CircularList; + private _ybase: number; + private _ydisp: number; + private _y: number; + private _x: number; + private _tabs: any; + + constructor(private terminal: ITerminal) { + this._lines = new CircularList(this.terminal.scrollback); + } + + public get lines(): CircularList { + return this._lines; + } +} diff --git a/src/BufferSet.ts b/src/BufferSet.ts new file mode 100644 index 00000000..e09ba96b --- /dev/null +++ b/src/BufferSet.ts @@ -0,0 +1,44 @@ +/** + * @license MIT + */ + +import { ITerminal } from './Interfaces'; +import { Buffer } from './Buffer'; + +export class BufferSet { + private _normal: Buffer; + private _alt: Buffer; + private _activeBuffer: Buffer; + + constructor(private _terminal: ITerminal) { + this._normal = new Buffer(this._terminal); + this._alt = new Buffer(this._terminal); + this._activeBuffer = this._normal; + } + + public get alt(): Buffer { + return this._alt; + } + + public get active(): Buffer { + return this._activeBuffer; + } + + public get normal(): Buffer { + return this._normal; + } + + private resetTerminal() { + this._terminal.reset(); + this._terminal.viewport.syncScrollArea(); + this._terminal.showCursor(); + } + + public activateNormalBuffer(): void { + this._activeBuffer = this._normal; + } + + public activateAltBuffer(): void { + this._activeBuffer = this._normal; + } +} diff --git a/src/Interfaces.ts b/src/Interfaces.ts index 4de2f285..039e8a3f 100644 --- a/src/Interfaces.ts +++ b/src/Interfaces.ts @@ -37,6 +37,7 @@ export interface ITerminal { x: number; y: number; defAttr: number; + scrollback: number; /** * Emit the 'data' event and populate the given data. diff --git a/src/xterm.js b/src/xterm.js index a9707096..4b540576 100644 --- a/src/xterm.js +++ b/src/xterm.js @@ -10,6 +10,7 @@ * @license MIT */ +import { BufferSet } from './BufferSet'; import { CompositionHelper } from './CompositionHelper'; import { EventEmitter } from './EventEmitter'; import { Viewport } from './Viewport'; @@ -243,6 +244,7 @@ function Terminal(options) { // leftover surrogate high from previous write invocation this.surrogate_high = ''; + this.buffers = new BufferSet(this); /** * An array of all lines in the entire buffer, including the prompt. The lines are array of * characters which are 2-length arrays where [0] is an attribute and [1] is the character.