未验证 提交 df3b99ba 编写于 作者: A Alex Dima

Just use `leftoverVisibleColumns` for having the cursor always go to the end of line

上级 f86418ac
...@@ -277,21 +277,18 @@ export class SingleCursorState { ...@@ -277,21 +277,18 @@ export class SingleCursorState {
public readonly position: Position; public readonly position: Position;
public readonly leftoverVisibleColumns: number; public readonly leftoverVisibleColumns: number;
public readonly selection: Selection; public readonly selection: Selection;
public readonly isEnd: boolean;
constructor( constructor(
selectionStart: Range, selectionStart: Range,
selectionStartLeftoverVisibleColumns: number, selectionStartLeftoverVisibleColumns: number,
position: Position, position: Position,
leftoverVisibleColumns: number, leftoverVisibleColumns: number,
isEnd: boolean = false
) { ) {
this.selectionStart = selectionStart; this.selectionStart = selectionStart;
this.selectionStartLeftoverVisibleColumns = selectionStartLeftoverVisibleColumns; this.selectionStartLeftoverVisibleColumns = selectionStartLeftoverVisibleColumns;
this.position = position; this.position = position;
this.leftoverVisibleColumns = leftoverVisibleColumns; this.leftoverVisibleColumns = leftoverVisibleColumns;
this.selection = SingleCursorState._computeSelection(this.selectionStart, this.position); this.selection = SingleCursorState._computeSelection(this.selectionStart, this.position);
this.isEnd = isEnd;
} }
public equals(other: SingleCursorState) { public equals(other: SingleCursorState) {
...@@ -307,15 +304,14 @@ export class SingleCursorState { ...@@ -307,15 +304,14 @@ export class SingleCursorState {
return (!this.selection.isEmpty() || !this.selectionStart.isEmpty()); 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) { if (inSelectionMode) {
// move just position // move just position
return new SingleCursorState( return new SingleCursorState(
this.selectionStart, this.selectionStart,
this.selectionStartLeftoverVisibleColumns, this.selectionStartLeftoverVisibleColumns,
new Position(lineNumber, column), new Position(lineNumber, column),
leftoverVisibleColumns, leftoverVisibleColumns
isEnd
); );
} else { } else {
// move everything // move everything
...@@ -323,8 +319,7 @@ export class SingleCursorState { ...@@ -323,8 +319,7 @@ export class SingleCursorState {
new Range(lineNumber, column, lineNumber, column), new Range(lineNumber, column, lineNumber, column),
leftoverVisibleColumns, leftoverVisibleColumns,
new Position(lineNumber, column), new Position(lineNumber, column),
leftoverVisibleColumns, leftoverVisibleColumns
isEnd
); );
} }
} }
......
...@@ -7,6 +7,7 @@ import { CursorColumns, CursorConfiguration, ICursorSimpleModel, SingleCursorSta ...@@ -7,6 +7,7 @@ import { CursorColumns, CursorConfiguration, ICursorSimpleModel, SingleCursorSta
import { Position } from 'vs/editor/common/core/position'; import { Position } from 'vs/editor/common/core/position';
import { Range } from 'vs/editor/common/core/range'; import { Range } from 'vs/editor/common/core/range';
import * as strings from 'vs/base/common/strings'; import * as strings from 'vs/base/common/strings';
import { Constants } from 'vs/base/common/uint';
export class CursorPosition { export class CursorPosition {
_cursorPositionBrand: void; _cursorPositionBrand: void;
...@@ -122,13 +123,9 @@ export class MoveOperations { ...@@ -122,13 +123,9 @@ export class MoveOperations {
column = cursor.position.column; column = cursor.position.column;
} }
if (cursor.isEnd) {
column = model.getLineMaxColumn(lineNumber + 1);
}
let r = MoveOperations.down(config, model, lineNumber, column, cursor.leftoverVisibleColumns, linesCount, true); 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 { public static translateDown(config: CursorConfiguration, model: ICursorSimpleModel, cursor: SingleCursorState): SingleCursorState {
...@@ -178,13 +175,9 @@ export class MoveOperations { ...@@ -178,13 +175,9 @@ export class MoveOperations {
column = cursor.position.column; column = cursor.position.column;
} }
if (cursor.isEnd) {
column = model.getLineMaxColumn(lineNumber - 1);
}
let r = MoveOperations.up(config, model, lineNumber, column, cursor.leftoverVisibleColumns, linesCount, true); 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 { public static translateUp(config: CursorConfiguration, model: ICursorSimpleModel, cursor: SingleCursorState): SingleCursorState {
...@@ -222,7 +215,7 @@ export class MoveOperations { ...@@ -222,7 +215,7 @@ export class MoveOperations {
public static moveToEndOfLine(config: CursorConfiguration, model: ICursorSimpleModel, cursor: SingleCursorState, inSelectionMode: boolean): SingleCursorState { public static moveToEndOfLine(config: CursorConfiguration, model: ICursorSimpleModel, cursor: SingleCursorState, inSelectionMode: boolean): SingleCursorState {
let lineNumber = cursor.position.lineNumber; let lineNumber = cursor.position.lineNumber;
let maxColumn = model.getLineMaxColumn(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 { public static moveToBeginningOfBuffer(config: CursorConfiguration, model: ICursorSimpleModel, cursor: SingleCursorState, inSelectionMode: boolean): SingleCursorState {
......
...@@ -99,7 +99,7 @@ export class OneCursor { ...@@ -99,7 +99,7 @@ export class OneCursor {
); );
const leftoverVisibleColumns = modelState.position.equals(position) ? modelState.leftoverVisibleColumns : 0; 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) { if (!viewState) {
...@@ -108,12 +108,12 @@ export class OneCursor { ...@@ -108,12 +108,12 @@ export class OneCursor {
const viewSelectionStart2 = context.convertModelPositionToViewPosition(new Position(modelState.selectionStart.endLineNumber, modelState.selectionStart.endColumn)); 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 viewSelectionStart = new Range(viewSelectionStart1.lineNumber, viewSelectionStart1.column, viewSelectionStart2.lineNumber, viewSelectionStart2.column);
const viewPosition = context.convertModelPositionToViewPosition(modelState.position); 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 { } else {
// Validate new view state // Validate new view state
const viewSelectionStart = context.validateViewRange(viewState.selectionStart, modelState.selectionStart); const viewSelectionStart = context.validateViewRange(viewState.selectionStart, modelState.selectionStart);
const viewPosition = context.validateViewPosition(viewState.position, modelState.position); 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; this.modelState = modelState;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册