Язык для просмотра текста в расширении VS2010 - PullRequest
1 голос
/ 29 сентября 2010

Я новичок в создании надстроек для Visual Studio, но мне удалось создать инструмент simpe для VS2010, который немного манипулирует текстом в текущем активном окне кода. Я дошел до того, что мне нужно знать язык (VB.Net, C # или любой другой) текущего текстового представления.

Я попытался получить имя файла (чтобы я мог посмотреть расширение для определения языка), используя следующий код:

IVsTextManager txtMgr = (IVsTextManager)GetService(typeof(SVsTextManager));
int mustHaveFocus = 1;//means true
txtMgr.GetActiveView(mustHaveFocus, null, out currentTextView);

userData = currentTextView as IVsUserData;
if (userData == null)// no text view 
{
    Console.WriteLine("No text view is currently open");
    return;
}

object pathAsObject;
Guid monikerGuid = typeof(IVsUserData).GUID;
userData.GetData(ref monikerGuid, out pathAsObject);
string docPath = (string)pathAsObject;

К сожалению, pathAsObject всегда возвращает ноль. Есть ли другой способ получить имя файла / язык?

1 Ответ

1 голос
/ 29 сентября 2010

Похоже, что это работает:

// Get the current text view.
IVsTextManager txtMgr = (IVsTextManager)GetService(typeof(SVsTextManager));
int mustHaveFocus = 1;//means true
txtMgr.GetActiveView(mustHaveFocus, null, out currentTextView);

userData = currentTextView as IVsUserData;
if (userData == null)// no text view 
{
    Console.WriteLine("No text view is currently open");
    return;
}

// In the next 4 statments, I am trying to get access to the editor's view 
object holder;
Guid guidViewHost = DefGuidList.guidIWpfTextViewHost;
userData.GetData(ref guidViewHost, out holder);
viewHost = (IWpfTextViewHost)holder;

// Get a snapshot of the current editor's text.
allText = viewHost.TextView.TextSnapshot.GetText();

// Get the language for the current editor.
string language = viewHost.TextViewtextView.TextDataModel.ContentType.TypeName;

Это возвращает "Basic" для VB.Net, что именно то, что мне нужно знать.

...