From dbec3a32f89498d932220f5d44b48fa40094d8ac Mon Sep 17 00:00:00 2001 From: Daniel Imms Date: Sun, 5 Nov 2017 12:06:25 -0800 Subject: [PATCH 1/2] Fix selecting of last column Fixes #1029 --- src/utils/MouseHelper.ts | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/utils/MouseHelper.ts b/src/utils/MouseHelper.ts index b7ef09ad1..d7d8f6981 100644 --- a/src/utils/MouseHelper.ts +++ b/src/utils/MouseHelper.ts @@ -62,8 +62,10 @@ export class MouseHelper { coords[0] = Math.ceil((coords[0] + (isSelection ? this._renderer.dimensions.actualCellWidth / 2 : 0)) / this._renderer.dimensions.actualCellWidth); coords[1] = Math.ceil(coords[1] / this._renderer.dimensions.actualCellHeight); - // Ensure coordinates are within the terminal viewport. - coords[0] = Math.min(Math.max(coords[0], 1), colCount); + // Ensure coordinates are within the terminal viewport. Note that selections + // need an addition point of precision to cover the end point (as characters + // cover half of one char and half of the next). + coords[0] = Math.min(Math.max(coords[0], 1), colCount + (isSelection ? 1 : 0)); coords[1] = Math.min(Math.max(coords[1], 1), rowCount); return coords; From 8478aa7a511154503e0b0a7bd3334119ca65a47d Mon Sep 17 00:00:00 2001 From: Daniel Imms Date: Sun, 5 Nov 2017 12:18:59 -0800 Subject: [PATCH 2/2] Fix selection on bottom right char when mouse goes outside viewport Part of #1029 --- src/SelectionManager.ts | 2 +- src/renderer/SelectionRenderLayer.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/SelectionManager.ts b/src/SelectionManager.ts index 5344e4248..bf5144cba 100644 --- a/src/SelectionManager.ts +++ b/src/SelectionManager.ts @@ -495,7 +495,7 @@ export class SelectionManager extends EventEmitter implements ISelectionManager // If the cursor was above or below the viewport, make sure it's at the // start or end of the viewport respectively. if (this._dragScrollAmount > 0) { - this._model.selectionEnd[0] = this._terminal.cols - 1; + this._model.selectionEnd[0] = this._terminal.cols; } else if (this._dragScrollAmount < 0) { this._model.selectionEnd[0] = 0; } diff --git a/src/renderer/SelectionRenderLayer.ts b/src/renderer/SelectionRenderLayer.ts index 54eb7fc4d..9740bb9a6 100644 --- a/src/renderer/SelectionRenderLayer.ts +++ b/src/renderer/SelectionRenderLayer.ts @@ -77,7 +77,7 @@ export class SelectionRenderLayer extends BaseRenderLayer { // Draw final row if (viewportCappedStartRow !== viewportCappedEndRow) { - // Only draw viewportEndRow if it's not the same as viewporttartRow + // Only draw viewportEndRow if it's not the same as viewportStartRow const endCol = viewportEndRow === viewportCappedEndRow ? end[0] : terminal.cols; this.fillCells(0, viewportCappedEndRow, endCol, 1); }