提交 eebf4c7b 编写于 作者: A Alex Dima

Clean up move to beginning/end of line in cursor

上级 14aa8e71
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
'use strict';
import { ICursorSimpleModel } from 'vs/editor/common/controller/cursorCommon';
export class CursorMoveHelper {
public static getColumnAtBeginningOfLine(model: ICursorSimpleModel, lineNumber: number, column: number): number {
var firstNonBlankColumn = model.getLineFirstNonWhitespaceColumn(lineNumber) || 1;
var minColumn = model.getLineMinColumn(lineNumber);
if (column !== minColumn && column <= firstNonBlankColumn) {
column = minColumn;
} else {
column = firstNonBlankColumn;
}
return column;
}
public static getColumnAtEndOfLine(model: ICursorSimpleModel, lineNumber: number, column: number): number {
var maxColumn = model.getLineMaxColumn(lineNumber);
var lastNonBlankColumn = model.getLineLastNonWhitespaceColumn(lineNumber) || maxColumn;
if (column !== maxColumn && column >= lastNonBlankColumn) {
column = maxColumn;
} else {
column = lastNonBlankColumn;
}
return column;
}
}
......@@ -241,6 +241,36 @@ export class MoveOperations {
return new SingleMoveOperationResult(tmp, true, CursorChangeReason.Explicit);
}
public static moveToBeginningOfLine(config: CursorConfiguration, model: ICursorSimpleModel, cursor: SingleCursorState, inSelectionMode: boolean): SingleMoveOperationResult {
let lineNumber = cursor.position.lineNumber;
let column = cursor.position.column;
let firstNonBlankColumn = model.getLineFirstNonWhitespaceColumn(lineNumber) || 1;
let minColumn = model.getLineMinColumn(lineNumber);
if (column !== minColumn && column <= firstNonBlankColumn) {
column = minColumn;
} else {
column = firstNonBlankColumn;
}
return SingleMoveOperationResult.fromMove(cursor, inSelectionMode, lineNumber, column, 0, true, CursorChangeReason.Explicit);
}
public static moveToEndOfLine(config: CursorConfiguration, model: ICursorSimpleModel, cursor: SingleCursorState, inSelectionMode: boolean): SingleMoveOperationResult {
let lineNumber = cursor.position.lineNumber;
let column = cursor.position.column;
let maxColumn = model.getLineMaxColumn(lineNumber);
let lastNonBlankColumn = model.getLineLastNonWhitespaceColumn(lineNumber) || maxColumn;
if (column !== maxColumn && column >= lastNonBlankColumn) {
column = maxColumn;
} else {
column = lastNonBlankColumn;
}
return SingleMoveOperationResult.fromMove(cursor, inSelectionMode, lineNumber, column, 0, true, CursorChangeReason.Explicit);
}
public static moveToBeginningOfBuffer(config: CursorConfiguration, model: ICursorSimpleModel, cursor: SingleCursorState, inSelectionMode: boolean): SingleMoveOperationResult {
return SingleMoveOperationResult.fromMove(cursor, inSelectionMode, 1, 1, 0, true, CursorChangeReason.Explicit);
}
......
......@@ -5,7 +5,6 @@
'use strict';
import { illegalArgument } from 'vs/base/common/errors';
import { CursorMoveHelper } from 'vs/editor/common/controller/cursorMoveHelper';
import { SingleCursorState, CursorConfiguration, ICursorSimpleModel } from 'vs/editor/common/controller/cursorCommon';
import { Position } from 'vs/editor/common/core/position';
import { Range } from 'vs/editor/common/core/range';
......@@ -512,12 +511,6 @@ export class OneCursor implements IOneCursor {
}
return visibleRange;
}
public getColumnAtBeginningOfViewLine(lineNumber: number, column: number): number {
return CursorMoveHelper.getColumnAtBeginningOfLine(this.viewModel, lineNumber, column);
}
public getColumnAtEndOfViewLine(lineNumber: number, column: number): number {
return CursorMoveHelper.getColumnAtEndOfLine(this.viewModel, lineNumber, column);
}
public getNearestRevealViewPositionInViewport(): Position {
const position = this.viewState.position;
const revealRange = this.getRevealViewLinesRangeInViewport();
......@@ -764,25 +757,17 @@ export class OneCursorOp {
}
public static moveToBeginningOfLine(cursor: OneCursor, inSelectionMode: boolean, ctx: IOneCursorOperationContext): boolean {
let validatedViewPosition = cursor.viewState.position;
let viewLineNumber = validatedViewPosition.lineNumber;
let viewColumn = validatedViewPosition.column;
viewColumn = cursor.getColumnAtBeginningOfViewLine(viewLineNumber, viewColumn);
ctx.cursorPositionChangeReason = editorCommon.CursorChangeReason.Explicit;
cursor.moveViewPosition(inSelectionMode, viewLineNumber, viewColumn, 0, true);
return true;
return this._applyMoveOperationResult(
cursor, ctx,
this._fromViewCursorState(cursor, MoveOperations.moveToBeginningOfLine(cursor.config, cursor.viewModel, cursor.viewState, inSelectionMode))
);
}
public static moveToEndOfLine(cursor: OneCursor, inSelectionMode: boolean, ctx: IOneCursorOperationContext): boolean {
let validatedViewPosition = cursor.viewState.position;
let viewLineNumber = validatedViewPosition.lineNumber;
let viewColumn = validatedViewPosition.column;
viewColumn = cursor.getColumnAtEndOfViewLine(viewLineNumber, viewColumn);
ctx.cursorPositionChangeReason = editorCommon.CursorChangeReason.Explicit;
cursor.moveViewPosition(inSelectionMode, viewLineNumber, viewColumn, 0, true);
return true;
return this._applyMoveOperationResult(
cursor, ctx,
this._fromViewCursorState(cursor, MoveOperations.moveToEndOfLine(cursor.config, cursor.viewModel, cursor.viewState, inSelectionMode))
);
}
public static expandLineSelection(cursor: OneCursor, ctx: IOneCursorOperationContext): boolean {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册