handle method
KeyEventResult
handle({
- required AffogatoAPI api,
- required EditorKeyEvent editorKeyEvent,
override
Implementation
@override
KeyEventResult handle({
required AffogatoAPI api,
required EditorKeyEvent editorKeyEvent,
}) {
if (!editorKeyEvent.editingContext.selection.isCollapsed ||
editorKeyEvent.editingContext.selection.start - 1 < 0) {
return KeyEventResult.ignored;
}
if (editorKeyEvent.keyEvent is KeyDownEvent) {
final String prevChar = editorKeyEvent.editingContext
.content[editorKeyEvent.editingContext.selection.start - 1];
if (triggerChars.containsKey(prevChar)) {
final String precedentText = editorKeyEvent.editingContext.selection
.textBefore(editorKeyEvent.editingContext.content);
final int numSpaces =
numSpacesBeforeFirstChar(precedentText.split('\n').last);
final int tabSizeInSpaces =
api.workspace.workspaceConfigs.stylingConfigs.tabSizeInSpaces;
final String insertText =
"\n${' ' * (numSpaces + tabSizeInSpaces)}\n${' ' * numSpaces}";
final String succeedingText = editorKeyEvent.editingContext.selection
.textAfter(editorKeyEvent.editingContext.content);
final String newText = precedentText + insertText + succeedingText;
api.vfs.documentRequestChange(
VFSDocumentRequestChangeEvent(
originId: name,
entityId: api.workspace.workspaceConfigs.entitiesLocation.entries
.firstWhere(
(entry) => entry.value.$1 == editorKeyEvent.instanceId)
.key,
editorAction: EditorAction(
editingValue: TextEditingValue(
text: newText,
selection: TextSelection.collapsed(
offset: precedentText.length +
1 +
numSpaces +
api.workspace.workspaceConfigs.stylingConfigs
.tabSizeInSpaces,
),
),
),
),
);
return KeyEventResult.handled;
}
} else if (editorKeyEvent.keyEvent is KeyRepeatEvent) {}
return KeyEventResult.ignored;
}