moveMultiCursorsUp method
Moves every secondary cursor up one line, maintaining its column.
Folded regions are skipped exactly as they are for the primary cursor.
When isShiftPressed is true the secondary cursors are cleared.
Implementation
void moveMultiCursorsUp({bool isShiftPressed = false}) {
if (_multiCursors.isEmpty) return;
if (isShiftPressed) {
clearMultiCursors();
return;
}
final updated = <({int line, int character})>[];
for (final cursor in _multiCursors) {
final cursorLine = cursor.line.clamp(0, lineCount - 1);
if (cursorLine <= 0) {
updated.add((line: 0, character: 0));
continue;
}
int targetLine = cursorLine - 1;
while (targetLine > 0 && _isLineInFoldedRegion(targetLine)) {
targetLine--;
}
if (_isLineInFoldedRegion(targetLine)) {
targetLine = _getFoldStartForLine(targetLine) ?? 0;
}
final prevLineText = getLineText(targetLine);
final newChar = cursor.character.clamp(0, prevLineText.length);
updated.add((line: targetLine, character: newChar));
}
_updateMultiCursorsFromList(updated);
}