public static void Left (TextEditorData data)
{
if (Platform.IsMac && data.IsSomethingSelected && !data.Caret.PreserveSelection) {
data.Caret.Offset = System.Math.Min (data.SelectionAnchor, data.Caret.Offset);
data.ClearSelection ();
return;
}
LineSegment line = data.Document.GetLine (data.Caret.Line);
IEnumerable<FoldSegment> foldings = data.Document.GetEndFoldings (line);
FoldSegment segment = null;
foreach (FoldSegment folding in foldings) {
if (folding.IsFolded && folding.EndColumn == data.Caret.Column) {
segment = folding;
break;
}
}
if (segment != null) {
data.Caret.Location = data.Document.OffsetToLocation (segment.StartLine.Offset + segment.Column);
return;
}
if (data.Caret.Column > 0) {
if (data.Caret.Column > line.EditableLength) {
data.Caret.Column = line.EditableLength;
} else {
data.Caret.Column--;
}
} else if (data.Caret.Line > 0) {
LineSegment prevLine = data.Document.GetLine (data.Caret.Line - 1);
data.Caret.Location = new DocumentLocation (data.Caret.Line - 1, prevLine.EditableLength);
}
}