public void StartMode() { foreach (TextLink link in links) { if (!link.PrimaryLink.IsInvalid) { link.CurrentText = Editor.Document.GetTextAt(link.PrimaryLink.Offset + baseOffset, link.PrimaryLink.Length); } foreach (TextSegment segment in link.Links) { Editor.Document.EnsureOffsetIsUnfolded(baseOffset + segment.Offset); DocumentLine line = Editor.Document.GetLineByOffset(baseOffset + segment.Offset); if (line.GetMarker(typeof(TextLinkMarker)) != null) { continue; } TextLinkMarker marker = (TextLinkMarker)line.GetMarker(typeof(TextLinkMarker)); if (marker == null) { marker = new TextLinkMarker(this); marker.BaseOffset = baseOffset; Editor.Document.AddMarker(line, marker); textLinkMarkers.Add(marker); } } } editor.Document.BeforeUndoOperation += HandleEditorDocumentBeginUndo; Editor.Document.TextReplaced += UpdateLinksOnTextReplace; this.Editor.Caret.PositionChanged += HandlePositionChanged; this.UpdateTextLinks(); this.HandlePositionChanged(null, null); TextLink firstLink = links.First(l => l.IsEditable); if (SelectPrimaryLink) { Setlink(firstLink); } Editor.Document.CommitUpdateAll(); editor.Document.OptimizeTypedUndo(); this.undoDepth = Editor.Document.GetCurrentUndoDepth(); ShowHelpWindow(); }