Chciałbym utworzyć proste rozszerzenie manipulacji tekstem dla Visual Studio na chwilę, a teraz mam wreszcie znaleźć czas, aby spojrzeć na to, jak napisane są rozszerzenia. To, co mam na myśli, można osiągnąć za pomocą makr VBA, ale wolę zaimplementować je jako "prawdziwe" rozszerzenie; jako proces uczenia się, a ponieważ szczerze nie mogę znieść VBA.Tworzenie prostego edytora Visual Studio 2010 manipulującego tekstem
Po sporych ilościach googlowania, czytania bloga, kopania w MSDN i przeglądania postów StackOverflow, myślę, że zebrałem wystarczająco dużo informacji, żebym mógł je zaimplementować - ale chciałbym otrzymać informację zwrotną, czy zbliżam się do rzeczy tuż zanim zacznę przerabiać :)
Co chciałbym to:
- Rejestrowanie poleceń, które użytkownicy mogą wiązać poprzez skróty klawiszowe do Narzędzia-> Opcje-> klawiatury.
- Zmodyfikuj bufor tekstowy aktywnego okna po wywołaniu Poleceń.
- nie troszczą się o menu i pasków narzędzi, ale wiem jak go dodać za pomocą plików .vsct (są tam lepsze opcje?)
Dla # 1, wydaje się, muszę zrobić pełną VSPackage , .vsct file et cetera - nie ma łatwego i łatwego punktu rozszerzenia MEF, który mogę obsłużyć zamiast tego? (Być może eksportowanie IWpfTextViewCreationListener
i manipulowanie ręczną obsługą skrótów klawiaturowych - ale to byłby poważny hack). Nie ma pewności, jak uzyskać ITextBuffer
dla aktywnego dokumentu. Mogę przejść przez DTE.ActiveDocument
, ale nie jestem pewien, jak uzyskać z tego ITextBuffer
. Alternatywnie, mógłbym zrobić coś na wzór ...
var txtMgr = (IVsTextManager)ServiceProvider.GetService(typeof(SVsTextManager));
IVsTextView textViewCurrent;
txtMgr.GetActiveView(true, null, out textView);
IWpfTextView wpfViewCurrent = AdaptersFactory.GetWpfTextView(textView);
ITextBuffer textCurrent = wpfViewCurrent.TextBuffer;
... ale to na pewno wygląda jak okrężny sposób robienia rzeczy?
Dzięki! Jest coś w dodawaniu filtra do każdego VsTextView, co mnie trochę irytuje, ale rozwiązanie * jest * zdecydowanie lepsze.Szkoda, że wciąż mamy do czynienia z brzydkim dziedzictwem com/ole, ale przynajmniej jest to minimalne i można je oderwać :) – snemarch