Freigeben über


Line Separators in the VS Core Editor

During the VSIP Developer Lab that was held here in Redmond last week, I investigated a quick question for GrafX about how to put line separators in the editor. If you don't know what I mean, open up a Visual Basic project, and create a file with 2 VB classes defined in it. See the lines after the Imports statements and after class definitions?

 

Here's what you need to do to add those line separators to the VS editor. In the colorizer's ColorizeLine method, you need to set the SEPARATOR_AFTER_ATTR flag for the last character of the line. As an example of this, here is a colorizer implementation that I added to the RegExLanguageService sample which will add a separator line on any line with text (length>=1):

using System;
using Microsoft.VisualStudio.Package;
using Microsoft.VisualStudio.TextManager.Interop;

namespace Microsoft.Samples.VisualStudio.LanuageServices.RegularExpressionLanguageService
{
    class RegExColorizer : Colorizer
    {
        public RegExColorizer(LanguageService svc, IVsTextLines buffer, IScanner scanner) : base(svc, buffer, scanner) { }

        public override int ColorizeLine(int line, int length, IntPtr ptr, int state, uint[] attrs)
        {
            int baseReturnVal = base.ColorizeLine(line, length, ptr, state, attrs);
            if (attrs != null && length >= 1)
                    attrs[attrs.Length-1] |= (uint)COLORIZER_ATTRIBUTE.SEPARATOR_AFTER_ATTR;
            return baseReturnVal;

        }
    }
}

You can, of course, do this in a C++ based language service as well on your IColorizer implementation.

VBLines.PNG

Comments

  • Anonymous
    March 04, 2007
    The comment has been removed
  • Anonymous
    March 05, 2007
    Hi Eric,Showing the separator lines is a function of the Colorizer which is a part of the language service. In the case above, this was for adding the needed functionality to a custom language service. I don't believe that C# has an extensible language service/colorizer, and so you would need to provide your own custom C# language service to provide that functionality.If you'd like, please contact me via the contact links on this blog so we can take this offline.Thanks,Aaron