pressUpArrowKey method
Moves the cursor up one line, maintaining the column position.
If isShiftPressed is true, extends the selection.
Implementation
void pressUpArrowKey({bool isShiftPressed = false}) {
final currentLine = getLineAtOffset(selection.extentOffset);
if (currentLine <= 0) {
if (isShiftPressed) {
setSelectionSilently(
TextSelection(baseOffset: selection.baseOffset, extentOffset: 0),
);
} else {
setSelectionSilently(const TextSelection.collapsed(offset: 0));
}
return;
}
int targetLine = currentLine - 1;
while (targetLine > 0 && _isLineInFoldedRegion(targetLine)) {
targetLine--;
}
if (_isLineInFoldedRegion(targetLine)) {
targetLine = _getFoldStartForLine(targetLine) ?? 0;
}
final lineStart = getLineStartOffset(currentLine);
final column = selection.extentOffset - lineStart;
final prevLineStart = getLineStartOffset(targetLine);
final prevLineText = getLineText(targetLine);
final prevLineLength = prevLineText.length;
final newColumn = column.clamp(0, prevLineLength);
final newOffset = (prevLineStart + newColumn).clamp(0, length);
if (isShiftPressed) {
setSelectionSilently(
TextSelection(
baseOffset: selection.baseOffset,
extentOffset: newOffset,
),
);
} else {
setSelectionSilently(TextSelection.collapsed(offset: newOffset));
}
}