deleteWordAtSelections method

bool deleteWordAtSelections({
  1. required bool forward,
})

Deletes to a word boundary beside every cursor as one undoable edit.

Implementation

bool deleteWordAtSelections({required bool forward}) {
  final active = selections;
  if (active.ranges.isEmpty) return false;
  _refreshDocumentSnapshot();
  final deletionRanges = <TextSelectionRange>[];
  var changed = false;
  for (final range in active.ranges) {
    if (!range.isCollapsed) {
      deletionRanges.add(range);
      changed = true;
      continue;
    }
    final boundary = textMoveByWord(
      document: _document,
      state: TextOffsetStateSnapshot.collapsed(cursorOffset: range.endOffset),
      forward: forward,
    ).cursorOffset;
    deletionRanges.add(
      TextSelectionRange(
        startOffset: math.min(boundary, range.endOffset),
        endOffset: math.max(boundary, range.endOffset),
      ),
    );
    changed |= boundary != range.endOffset;
  }
  if (!changed) return false;
  setSelections(
    TextSelectionSet(
      deletionRanges,
      primaryOffset: active.primary!.activeOffset,
    ),
  );
  return deleteSelections();
}