selectWordOrRow method
void
selectWordOrRow(
- Position position
)
Implementation
void selectWordOrRow(Position position) {
if (position.y > buffer.lines.length) {
return;
}
final row = position.y;
final line = buffer.lines[row];
final positionIsInSelection = _selection.contains(position);
final completeLineIsSelected =
_selection.start?.x == 0 && _selection.end?.x == terminalWidth;
if (positionIsInSelection && !completeLineIsSelected) {
// select area on an already existing selection extends it to the full line
_selection.clear();
_selection.init(Position(0, row));
_selection.update(Position(terminalWidth, row));
} else {
// select the word that is under position
var start = position.x;
var end = position.x;
do {
if (start == 0) {
break;
}
final content = line.cellGetContent(start - 1);
if (kWordSeparators.contains(String.fromCharCode(content))) {
break;
}
start--;
} while (true);
do {
if (end >= terminalWidth - 1) {
break;
}
final content = line.cellGetContent(end + 1);
if (kWordSeparators.contains(String.fromCharCode(content))) {
break;
}
end++;
} while (true);
_selection.clear();
_selection.init(Position(start, row));
_selection.update(Position(end, row));
refresh();
}
}