void UpdateLinksOnTextReplace(object sender, Microsoft.VisualStudio.Text.TextContentChangedEventArgs e) { wasReplaced = true; if (e.EditTag != _linkEditTag) { foreach (var change in e.Changes) { int offset = change.OldPosition - baseOffset; if (!links.Any(link => link.Links.Any(segment => segment.Contains(offset) || segment.EndOffset == offset))) { SetCaretPosition = false; ExitTextLinkMode(); return; } } } foreach (TextLink link in links) { var newLinks = new List <ISegment>(); foreach (var s in link.Links) { var newStart = Microsoft.VisualStudio.Text.Tracking.TrackPositionForwardInTime(Microsoft.VisualStudio.Text.PointTrackingMode.Negative, s.Offset + baseOffset, e.BeforeVersion, e.AfterVersion) - baseOffset; var newEnd = Microsoft.VisualStudio.Text.Tracking.TrackPositionForwardInTime(Microsoft.VisualStudio.Text.PointTrackingMode.Positive, s.Offset + s.Length + baseOffset, e.BeforeVersion, e.AfterVersion) - baseOffset; newLinks.Add(new TextSegment(newStart, newEnd - newStart)); } link.Links = newLinks; } // If this is the final edit of a compund edit (e.g. no one has modified the buffer in an event handler before this one). if (Editor.Document.TextBuffer.CurrentSnapshot == e.After) { // Edits due to replacing link text trigger a commit. Otherwise, update the link text if (e.EditTag == _linkEditTag) { // TODO this really should be triggered on the post change if there were any link-inspired updates. foreach (TextLink link in links) { for (int i = 0; (i < link.Links.Count); ++i) { var s = link.Links[i]; int offset = s.Offset + baseOffset; Editor.Document.CommitLineUpdate(Editor.Document.OffsetToLineNumber(offset)); } } } else { UpdateTextLinks(); } } }
void TextBuffer_Changed(object sender, Microsoft.VisualStudio.Text.TextContentChangedEventArgs e) { if (_cur == null || e.After != _cur.TextBuffer.CurrentSnapshot) { return; } if (DelayRefreshTimer != null) { DelayRefreshTimer.Dispose(); } DelayRefreshTimer = new System.Threading.Timer(RefreshFile, null, 500, System.Threading.Timeout.Infinite); }
static void TextBuffer_Changed(object sender, Microsoft.VisualStudio.Text.TextContentChangedEventArgs e) { if (++count > max) { var buf = sender as ITextBuffer; if (buf != null) { buf.Changed -= TextBuffer_Changed; } if (!_hasSendReport) { Logger.UpdateUserData("edit"); _hasSendReport = true; } } }
void TextBuffer_ChangedHighPriority(object sender, Microsoft.VisualStudio.Text.TextContentChangedEventArgs e) { foreach (var change in e.Changes) { if (change.NewText.EndsWith("{")) { var line = e.After.GetLineFromPosition(change.NewPosition); int linenum = line.LineNumber; if (linenum > 0) { int?ind = lineindenter.GetDesiredIndentation(line); int indentLevel; if (ind == null) { int previousLine = LineIndenter.GetPreviousNonWhitespaceLine(e.After, linenum); string previousLineText = e.After.GetLineFromLineNumber(previousLine).GetText(); indentLevel = LineIndenter.GetIndentLevel(e.After, previousLineText); } else { indentLevel = (int)ind; } Span s = new Span(line.Start, line.Length - 1); if (string.IsNullOrWhiteSpace(e.After.GetText(s))) { e.After.TextBuffer.Replace(s, new string(' ', indentLevel)); } } } else if (change.NewText.EndsWith("}")) { var line = e.After.GetLineFromPosition(change.NewPosition); FormatClosingBrace(e.After, line); } } }
private void BufferChangedEventHandler(object sender, Microsoft.VisualStudio.Text.TextContentChangedEventArgs e) { TryTriggerGlobalParse(); }
public static bool TextChangeOccurred(this TextContentChangedEventArgs args, out (ITextChange firstChange, ITextChange lastChange, string newText, string oldText) changeInformation)