internal override ActionResults Execute(Selection sel, params object[] args) { insertChar = new Character(Ed.InputChar); var line = Document.Lines[sel.Caret.Line]; undoPos = sel.Start; redoSel = sel.Clone(); var res = Change; if (!sel.IsEmpty) { insertString = DeleteRangeCommand.DeleteRange(Ed, sel); } else if (Buffer.Overtype && sel.Caret.Col < line.Length) { res |= AtomicChange; deleteChar = line[sel.Caret.Col]; line.RemoveAt(sel.Caret.Col); } else { var app = !Buffer.Overtype && CanShowAutocomplete(sel, insertChar.Char) ? AutocompleteShow : AutocompleteKeep; res |= AtomicChange | app; } Document.Lines[sel.Caret.Line].Insert(sel.Caret.Col, insertChar); sel.Clear(new Pos(sel.Caret.Line, sel.Caret.Col + 1)); return(res); }
public override ActionResults Undo(out Pos pos) { pos = undoPos; if (deleteString != null) { pos = InsertRangeCommand.InsertRange(Document, undoPos, deleteString); } else if (deleteChar == Character.NewLine) { pos = new Pos(undoPos.Line, undoPos.Col); var txt = DeleteRangeCommand.DeleteRange(Ed, new Selection(pos, new Pos(pos.Line, Document.Lines[pos.Line].Length))); var ipos = InsertNewLineCommand.InsertNewLine(Document, pos); if (txt != null) { Document.Lines[ipos.Line].Append(txt); } pos = ipos; } else { var ln = Document.Lines[undoPos.Line]; ln.Insert(undoPos.Col, deleteChar); pos = new Pos(undoPos.Line, undoPos.Col + 1); } return(Change); }
internal override ActionResults Execute(Selection sel, params object[] args) { redoSel = sel.Clone(); var res = Clean; if (!sel.IsEmpty) { res = Change; deleteString = DeleteRangeCommand.DeleteRange(Ed, sel); } else { var lines = Document.Lines; var caret = sel.Caret; var ln = lines[caret.Line]; if (caret.Col < ln.Length) { deleteChar = ln.CharacterAt(caret.Col); ln.RemoveAt(caret.Col); res = Change; } else if (caret.Line < lines.Count - 1) { var nl = lines[caret.Line + 1]; deleteChar = Character.NewLine; lines.Remove(nl); ln.Append(nl); res = Change; } } undoPos = sel.Caret; return(res); }
public override ActionResults Undo(out Pos pos) { DeleteRangeCommand.DeleteRange(Ed, undo); pos = undo.Caret; if (deleteString != null) { pos = InsertRange(Document, undo.End, deleteString); } return(Change); }
internal override ActionResults Execute(Selection sel, params object[] args) { redoSel = sel.Clone(); var res = Clean; var lines = Document.Lines; var caret = sel.Caret; var ln = lines[caret.Line]; var indentSize = Line.GetIndentationSize(ln.GetTetras(caret.Col, Ed.IndentSize), Ed.IndentSize); unindent = indentSize == Ed.IndentSize ? indentSize : Ed.IndentSize - indentSize; if (!sel.IsEmpty) { unindent = 0; res = Change; deleteString = DeleteRangeCommand.DeleteRange(Ed, sel); } else if (!Ed.UseTabs && (unindent = GetMaximum(ln, caret.Col, unindent)) > 1 && caret.Col >= unindent) { res = Change; var np = new Pos(caret.Line, caret.Col - unindent); deleteString = DeleteRangeCommand.DeleteRange(Ed, new Selection(caret, np)); sel.Clear(np); } else { unindent = 0; if (caret.Col > 0) { deleteChar = ln.CharacterAt(caret.Col - 1); ln.RemoveAt(caret.Col - 1); sel.Clear(new Pos(caret.Line, caret.Col - 1)); res = Change | AutocompleteKeep; } else if (caret.Line > 0) { ln = lines[caret.Line - 1]; var col = ln.Length; deleteChar = Character.NewLine; var txt = lines[caret.Line]; lines.RemoveAt(caret.Line); ln.Append(txt); sel.Clear(new Pos(caret.Line - 1, col)); res = Change; } } undoPos = sel.Caret; return(res); }
public override ActionResults Redo(out Pos pos) { deleteChar = Character.Empty; deleteString = null; if (unindent != 0) { var caret = redoSel.Caret; var np = new Pos(caret.Line, caret.Col - unindent); DeleteRangeCommand.DeleteRange(Ed, new Selection(caret, np)); } else { Execute(redoSel); } pos = undoPos; return(Change); }
internal override ActionResults Execute(Selection selection, params object[] args) { undoPos = selection.Start; redoSel = selection.Clone(); if (!selection.IsEmpty) { @string = DeleteRangeCommand.DeleteRange(Ed, selection); } var indentKey = Ed.AffinityManager.GetAffinity(new Pos(undoPos.Line, 0)).GetIndentComponentKey(Ed); var pos = InsertNewLine(Document, undoPos); selection.Clear(pos); var comp = indentKey != null?App.Catalog <IDentComponent>().GetComponent(indentKey) : null; indent = comp != null?comp.CalculateIndentation((IView)Ed.FindForm(), pos.Line) : 0; if (indent > 0) { if (pos.Line > 0) { var ln = Document.Lines[pos.Line - 1]; if (ln.IsEmpty() && ln.Length > 0) { unindent = ln.ToList(); ln.RemoveRange(0, ln.Length); } } var str = Ed.UseTabs ? new string('\t', indent / Ed.IndentSize) : new string(' ', indent); Document.Lines[pos.Line].Insert(0, str.MakeCharacters()); selection.Clear(new Pos(pos.Line, pos.Col + str.Length)); } return(Change); }
internal override ActionResults Execute(Selection sel, params object[] args) { insertString = insertString ?? (args != null && args.Length > 0 ? args[0] as IEnumerable <Character> : null); if (insertString == null) { return(Pure); } redoSel = sel.Clone(); if (!sel.IsEmpty) { deleteString = DeleteRangeCommand.DeleteRange(Ed, sel); } var pos = InsertRange(Document, sel.Start, insertString); undo = new Selection(sel.Start, pos); sel.Clear(pos); return(Change); }