deleteWordAtSelections method
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();
}