diff --git a/src/SelectionManager.test.ts b/src/SelectionManager.test.ts index 52660307..e0ff6789 100644 --- a/src/SelectionManager.test.ts +++ b/src/SelectionManager.test.ts @@ -44,7 +44,7 @@ describe('SelectionManager', () => { window = w; document = window.document; buffer = new CircularList(100); - terminal = { cols: 80 }; + terminal = { cols: 80, rows: 2 }; selectionManager = new TestSelectionManager(terminal, buffer, rowContainer, null); done(); }); @@ -153,4 +153,17 @@ describe('SelectionManager', () => { assert.deepEqual(selectionManager.model.finalSelectionEnd, [terminal.cols, 0], 'The actual selection spans the entire column'); }); }); + + describe('selectAll', () => { + it('should select the entire buffer, beyond the viewport', () => { + buffer.push(stringToRow('1')); + buffer.push(stringToRow('2')); + buffer.push(stringToRow('3')); + buffer.push(stringToRow('4')); + buffer.push(stringToRow('5')); + selectionManager.selectAll(); + terminal.ybase = buffer.length - terminal.rows; + assert.equal(selectionManager.selectionText, '1\n2\n3\n4\n5'); + }); + }); }); diff --git a/src/SelectionManager.ts b/src/SelectionManager.ts index 04834d22..3dcba406 100644 --- a/src/SelectionManager.ts +++ b/src/SelectionManager.ts @@ -160,7 +160,7 @@ export class SelectionManager extends EventEmitter { if (start[1] !== end[1]) { result.push(this._translateBufferLineToString(this._buffer.get(end[1]), true, 0, end[0])); } - console.log('selectionText result: "' + result + '"'); + return result.join('\n'); } diff --git a/src/SelectionModel.ts b/src/SelectionModel.ts index bcb7a9ce..f1762e38 100644 --- a/src/SelectionModel.ts +++ b/src/SelectionModel.ts @@ -52,12 +52,12 @@ export class SelectionModel { * word selection and triple click line selection. */ public get finalSelectionEnd(): [number, number] { - if (!this.selectionStart) { - return null; + if (this.isSelectAllActive) { + return [this._terminal.cols - 1, this._terminal.ybase + this._terminal.rows - 1]; } - if (this.isSelectAllActive) { - return [this._terminal.cols - 1, this._terminal.ydisp + this._terminal.rows - 1]; + if (!this.selectionStart) { + return null; } // Use the selection start if the end doesn't exist or they're reversed