diff --git a/src/xterm.js b/src/xterm.js index 64143dcb..764f6abc 100644 --- a/src/xterm.js +++ b/src/xterm.js @@ -3062,10 +3062,10 @@ Terminal.prototype.clear = function() { // Don't clear if it's already clear return; } + this.lines = [this.lines[this.ybase + this.y]]; this.ydisp = 0; this.ybase = 0; this.y = 0; - this.lines = [this.lines[this.lines.length - 1]]; for (var i = 1; i < this.rows; i++) { this.lines.push(this.blankLine()); } diff --git a/test/test.js b/test/test.js index ff9d9e4f..043906f6 100644 --- a/test/test.js +++ b/test/test.js @@ -51,7 +51,20 @@ describe('xterm.js', function() { assert.equal(xterm.lines.length, xterm.rows); assert.deepEqual(xterm.lines[0], promptLine); for (var i = 1; i < xterm.rows; i++) { - assert.deepEqual(xterm.lines[0], xterm.blankLine()); + assert.deepEqual(xterm.lines[i], xterm.blankLine()); + } + }); + it('should not break the prompt when cleared twice', function() { + var promptLine = xterm.lines[xterm.ybase + xterm.y]; + xterm.clear(); + xterm.clear(); + assert.equal(xterm.y, 0); + assert.equal(xterm.ybase, 0); + assert.equal(xterm.ydisp, 0); + assert.equal(xterm.lines.length, xterm.rows); + assert.deepEqual(xterm.lines[0], promptLine); + for (var i = 1; i < xterm.rows; i++) { + assert.deepEqual(xterm.lines[i], xterm.blankLine()); } }); });