public void AddRegisterDirective(RegisterDirective directive, TextEditor editor, bool preserveCaretPosition) { var node = GetRegisterInsertionPointNode(); if (node == null) { return; } Doc.Info.RegisteredTags.Add(directive); var line = Math.Max(node.Location.EndLine, node.Location.BeginLine); var pos = editor.GetPositionFromLineColumn(line, editor.GetLineLength(line) + 1); if (pos < 0) { return; } editor.BeginAtomicUndo(); var oldCaret = editor.CursorPosition; var inserted = editor.InsertText(pos, editor.NewLine + directive.ToString()); if (preserveCaretPosition) { editor.CursorPosition = (pos < oldCaret)? oldCaret + inserted : oldCaret; } editor.EndAtomicUndo(); }