indentLess function
Remove a unit of indentation from all selected lines.
Implementation
bool indentLess(StateCommandTarget target) {
if (target.state.isReadOnly) return false;
final state = target.state;
target.dispatch(state.update([
TransactionSpec(
changes: _changeBySelectedLine(state, (line, changes, range) {
final match = RegExp(r'^\s*').firstMatch(line.text);
final space = match?.group(0) ?? '';
if (space.isEmpty) return;
final col = countColumn(space, state.tabSize);
var keep = 0;
final insertCols = math.max(0, col - getIndentUnit(state));
final insert = indentString(state, insertCols);
while (keep < space.length &&
keep < insert.length &&
space.codeUnitAt(keep) == insert.codeUnitAt(keep)) {
keep++;
}
changes.add(ChangeSpec(
from: line.from + keep,
to: line.from + space.length,
insert: insert.substring(keep),
));
}).changes,
userEvent: 'delete.dedent',
),
]));
return true;
}