Example #1
0
        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();
 }
Example #6
0
 public static bool TextChangeOccurred(this TextContentChangedEventArgs args, out (ITextChange firstChange, ITextChange lastChange, string newText, string oldText) changeInformation)