From: Daniel Imms Date: Wed, 7 Jun 2017 06:13:50 +0000 (-0700) Subject: Fix select all with no start and include content below viewport X-Git-Url: https://git.proxmox.com/?a=commitdiff_plain;h=2b2431824f93bbd63a999a1e3ddb4d588b414493;p=mirror_xterm.js.git Fix select all with no start and include content below viewport --- diff --git a/src/SelectionManager.test.ts b/src/SelectionManager.test.ts index 5266030..e0ff678 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 04834d2..3dcba40 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 bcb7a9c..f1762e3 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