Я давно хотел создать простое расширение для работы с текстом для 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;
... но это точно выглядит как обходной путь?