mirror of
https://github.com/Microsoft/vscode
synced 2024-09-19 18:48:00 +00:00
Fixes #15401: home and end have special behaviours when leaving selection mode
This commit is contained in:
parent
eebf4c7b3c
commit
9377376eb4
|
@ -242,31 +242,50 @@ export class MoveOperations {
|
|||
}
|
||||
|
||||
public static moveToBeginningOfLine(config: CursorConfiguration, model: ICursorSimpleModel, cursor: SingleCursorState, inSelectionMode: boolean): SingleMoveOperationResult {
|
||||
let lineNumber = cursor.position.lineNumber;
|
||||
let column = cursor.position.column;
|
||||
|
||||
let lineNumber: number;
|
||||
let column: number;
|
||||
|
||||
if (cursor.hasSelection() && !inSelectionMode) {
|
||||
// If we are in selection mode, home goes to the beginning of selection
|
||||
lineNumber = cursor.selection.startLineNumber;
|
||||
column = cursor.selection.startColumn;
|
||||
} else {
|
||||
lineNumber = cursor.position.lineNumber;
|
||||
let firstNonBlankColumn = model.getLineFirstNonWhitespaceColumn(lineNumber) || 1;
|
||||
let minColumn = model.getLineMinColumn(lineNumber);
|
||||
|
||||
if (column !== minColumn && column <= firstNonBlankColumn) {
|
||||
if (cursor.position.column !== minColumn && cursor.position.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 lineNumber: number;
|
||||
let column: number;
|
||||
|
||||
if (cursor.hasSelection() && !inSelectionMode) {
|
||||
// If we are in selection mode, end goes to the end of selection
|
||||
lineNumber = cursor.selection.endLineNumber;
|
||||
column = cursor.selection.endColumn;
|
||||
} else {
|
||||
lineNumber = cursor.position.lineNumber;
|
||||
let maxColumn = model.getLineMaxColumn(lineNumber);
|
||||
let lastNonBlankColumn = model.getLineLastNonWhitespaceColumn(lineNumber) || maxColumn;
|
||||
|
||||
if (column !== maxColumn && column >= lastNonBlankColumn) {
|
||||
column = cursor.position.column;
|
||||
if (cursor.position.column !== maxColumn && cursor.position.column >= lastNonBlankColumn) {
|
||||
column = maxColumn;
|
||||
} else {
|
||||
column = lastNonBlankColumn;
|
||||
}
|
||||
}
|
||||
|
||||
return SingleMoveOperationResult.fromMove(cursor, inSelectionMode, lineNumber, column, 0, true, CursorChangeReason.Explicit);
|
||||
}
|
||||
|
|
|
@ -487,6 +487,13 @@ suite('Editor Controller - Cursor', () => {
|
|||
assertCursor(thisCursor, new Selection(1, 8, 1, 1));
|
||||
});
|
||||
|
||||
test('issue #15401: "End" key is behaving weird when text is selected part 1', () => {
|
||||
moveTo(thisCursor, 1, 2);
|
||||
moveTo(thisCursor, 3, 9, true);
|
||||
moveToBeginningOfLine(thisCursor, false);
|
||||
assertCursor(thisCursor, new Selection(1, 2, 1, 2));
|
||||
});
|
||||
|
||||
// --------- move to end of line
|
||||
|
||||
test('move to end of line', () => {
|
||||
|
@ -520,6 +527,13 @@ suite('Editor Controller - Cursor', () => {
|
|||
assertCursor(thisCursor, new Selection(1, 6, 1, LINE1.length + 1));
|
||||
});
|
||||
|
||||
test('issue #15401: "End" key is behaving weird when text is selected part 2', () => {
|
||||
moveTo(thisCursor, 1, 1);
|
||||
moveTo(thisCursor, 3, 9, true);
|
||||
moveToEndOfLine(thisCursor, false);
|
||||
assertCursor(thisCursor, new Selection(3, 9, 3, 9));
|
||||
});
|
||||
|
||||
// --------- move to beginning of buffer
|
||||
|
||||
test('move to beginning of buffer', () => {
|
||||
|
|
Loading…
Reference in a new issue