Я давно хотел создать простое расширение для манипулирования текстом для Visual Studio, и теперь я наконец нашел время, чтобы изучить, как пишутся расширения. То, что я имею в виду, может быть выполнено с помощью макросов VBA, но я бы предпочел реализовать это как «настоящее» расширение; как учебный процесс, и потому что я, честно говоря, терпеть не могу VBA.
После изрядного поиска в Google, чтения блогов, копания в MSDN и просмотра сообщений StackOverflow я думаю, что собрал достаточно информации, чтобы реализовать это, но я хотел бы получить отзывы о том, подхожу ли я к вещам прямо перед тем, как начать. взломать :)
Я бы хотел:
- Регистрация команд, к которым пользователи могут привязывать горячие клавиши через Инструменты->Параметры->Клавиатура.
- Измените текстовый буфер активного окна при вызове команд.
- Меня не интересуют меню или панели инструментов, но я знаю, как добавить их через файлы .vsct (есть ли варианты получше?)
Для # 1, кажется, мне нужно сделать полный VSPackage, файл .vsct и так далее - нет красивой и простой точки расширения MEF, с которой я мог бы справиться вместо этого? (Возможно, экспортировать IWpfTextViewCreationListener
и возиться с ручной обработкой сочетаний клавиш - но это будет серьезный взлом).
Что касается № 2, я не знаю, как получить ITextBuffer
для активного документа. Я мог бы пройти через DTE.ActiveDocument
, но я не уверен, как получить из этого ITextBuffer
. В качестве альтернативы я мог бы сделать что-то вроде...
var txtMgr = (IVsTextManager)ServiceProvider.GetService(typeof(SVsTextManager));
IVsTextView textViewCurrent;
txtMgr.GetActiveView(true, null, out textView);
IWpfTextView wpfViewCurrent = AdaptersFactory.GetWpfTextView(textView);
ITextBuffer textCurrent = wpfViewCurrent.TextBuffer;
...но это точно похоже на окольный путь?