moveMultiCursorsUp method

void moveMultiCursorsUp({
  1. bool isShiftPressed = false,
})

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);
}