diff --git a/src/vs/editor/common/controller/cursorCommon.ts b/src/vs/editor/common/controller/cursorCommon.ts index d981f26a0a0880783a78cdc438180f5f0c0d993e..ac2699979188ad8535a52cbf75d1b53e847c654e 100644 --- a/src/vs/editor/common/controller/cursorCommon.ts +++ b/src/vs/editor/common/controller/cursorCommon.ts @@ -277,21 +277,18 @@ export class SingleCursorState { public readonly position: Position; public readonly leftoverVisibleColumns: number; public readonly selection: Selection; - public readonly isEnd: boolean; constructor( selectionStart: Range, selectionStartLeftoverVisibleColumns: number, position: Position, leftoverVisibleColumns: number, - isEnd: boolean = false ) { this.selectionStart = selectionStart; this.selectionStartLeftoverVisibleColumns = selectionStartLeftoverVisibleColumns; this.position = position; this.leftoverVisibleColumns = leftoverVisibleColumns; this.selection = SingleCursorState._computeSelection(this.selectionStart, this.position); - this.isEnd = isEnd; } public equals(other: SingleCursorState) { @@ -307,15 +304,14 @@ export class SingleCursorState { return (!this.selection.isEmpty() || !this.selectionStart.isEmpty()); } - public move(inSelectionMode: boolean, lineNumber: number, column: number, leftoverVisibleColumns: number, isEnd: boolean = false): SingleCursorState { + public move(inSelectionMode: boolean, lineNumber: number, column: number, leftoverVisibleColumns: number): SingleCursorState { if (inSelectionMode) { // move just position return new SingleCursorState( this.selectionStart, this.selectionStartLeftoverVisibleColumns, new Position(lineNumber, column), - leftoverVisibleColumns, - isEnd + leftoverVisibleColumns ); } else { // move everything @@ -323,8 +319,7 @@ export class SingleCursorState { new Range(lineNumber, column, lineNumber, column), leftoverVisibleColumns, new Position(lineNumber, column), - leftoverVisibleColumns, - isEnd + leftoverVisibleColumns ); } } diff --git a/src/vs/editor/common/controller/cursorMoveOperations.ts b/src/vs/editor/common/controller/cursorMoveOperations.ts index 8be77b1031c7c2c1f36f90651f4e449235620fc6..df45d78e9f9d4c5db816dee7ecfd698f6bc0c673 100644 --- a/src/vs/editor/common/controller/cursorMoveOperations.ts +++ b/src/vs/editor/common/controller/cursorMoveOperations.ts @@ -7,6 +7,7 @@ import { CursorColumns, CursorConfiguration, ICursorSimpleModel, SingleCursorSta import { Position } from 'vs/editor/common/core/position'; import { Range } from 'vs/editor/common/core/range'; import * as strings from 'vs/base/common/strings'; +import { Constants } from 'vs/base/common/uint'; export class CursorPosition { _cursorPositionBrand: void; @@ -122,13 +123,9 @@ export class MoveOperations { column = cursor.position.column; } - if (cursor.isEnd) { - column = model.getLineMaxColumn(lineNumber + 1); - } - let r = MoveOperations.down(config, model, lineNumber, column, cursor.leftoverVisibleColumns, linesCount, true); - return cursor.move(inSelectionMode, r.lineNumber, cursor.isEnd ? column : r.column, r.leftoverVisibleColumns, cursor.isEnd); + return cursor.move(inSelectionMode, r.lineNumber, r.column, r.leftoverVisibleColumns); } public static translateDown(config: CursorConfiguration, model: ICursorSimpleModel, cursor: SingleCursorState): SingleCursorState { @@ -178,13 +175,9 @@ export class MoveOperations { column = cursor.position.column; } - if (cursor.isEnd) { - column = model.getLineMaxColumn(lineNumber - 1); - } - let r = MoveOperations.up(config, model, lineNumber, column, cursor.leftoverVisibleColumns, linesCount, true); - return cursor.move(inSelectionMode, r.lineNumber, cursor.isEnd ? column : r.column, r.leftoverVisibleColumns, cursor.isEnd); + return cursor.move(inSelectionMode, r.lineNumber, r.column, r.leftoverVisibleColumns); } public static translateUp(config: CursorConfiguration, model: ICursorSimpleModel, cursor: SingleCursorState): SingleCursorState { @@ -222,7 +215,7 @@ export class MoveOperations { public static moveToEndOfLine(config: CursorConfiguration, model: ICursorSimpleModel, cursor: SingleCursorState, inSelectionMode: boolean): SingleCursorState { let lineNumber = cursor.position.lineNumber; let maxColumn = model.getLineMaxColumn(lineNumber); - return cursor.move(inSelectionMode, lineNumber, maxColumn, 0, true); + return cursor.move(inSelectionMode, lineNumber, maxColumn, Constants.MAX_SAFE_SMALL_INTEGER - maxColumn); } public static moveToBeginningOfBuffer(config: CursorConfiguration, model: ICursorSimpleModel, cursor: SingleCursorState, inSelectionMode: boolean): SingleCursorState { diff --git a/src/vs/editor/common/controller/oneCursor.ts b/src/vs/editor/common/controller/oneCursor.ts index 07716dbb5de98e9928b59d4774455ab83579e6bb..2bb095831339554677818f465093c356d376a985 100644 --- a/src/vs/editor/common/controller/oneCursor.ts +++ b/src/vs/editor/common/controller/oneCursor.ts @@ -99,7 +99,7 @@ export class OneCursor { ); const leftoverVisibleColumns = modelState.position.equals(position) ? modelState.leftoverVisibleColumns : 0; - modelState = new SingleCursorState(selectionStart, selectionStartLeftoverVisibleColumns, position, leftoverVisibleColumns, modelState.isEnd); + modelState = new SingleCursorState(selectionStart, selectionStartLeftoverVisibleColumns, position, leftoverVisibleColumns); } if (!viewState) { @@ -108,12 +108,12 @@ export class OneCursor { const viewSelectionStart2 = context.convertModelPositionToViewPosition(new Position(modelState.selectionStart.endLineNumber, modelState.selectionStart.endColumn)); const viewSelectionStart = new Range(viewSelectionStart1.lineNumber, viewSelectionStart1.column, viewSelectionStart2.lineNumber, viewSelectionStart2.column); const viewPosition = context.convertModelPositionToViewPosition(modelState.position); - viewState = new SingleCursorState(viewSelectionStart, modelState.selectionStartLeftoverVisibleColumns, viewPosition, modelState.leftoverVisibleColumns, modelState.isEnd); + viewState = new SingleCursorState(viewSelectionStart, modelState.selectionStartLeftoverVisibleColumns, viewPosition, modelState.leftoverVisibleColumns); } else { // Validate new view state const viewSelectionStart = context.validateViewRange(viewState.selectionStart, modelState.selectionStart); const viewPosition = context.validateViewPosition(viewState.position, modelState.position); - viewState = new SingleCursorState(viewSelectionStart, modelState.selectionStartLeftoverVisibleColumns, viewPosition, modelState.leftoverVisibleColumns, viewState.isEnd); + viewState = new SingleCursorState(viewSelectionStart, modelState.selectionStartLeftoverVisibleColumns, viewPosition, modelState.leftoverVisibleColumns); } this.modelState = modelState;