Potrzebowałem napisać plugin, który swóją funkcjonalnością przypominać będzie CopySourceAsHTML tyle, że zamiast HTML’a produkował będzie źródło LaTeX, jako, że używam go do pisania wszystkiego co ma mieć objętość powyżej 1 strony. LaTeX ma już pakiet umożliwiający formatowanie kodu (listings), ale nie chce przepisywać linijka po linijce kodu – chcę, aby zostało to automatycznie zrobione.
Wcześniej nie pisałem plug-in’ów do VS a poniżej moje spostrzeżenia, uwagi i (może dla kogoś) rady…
Moje uwagi, wnioski i komentarze:
- duży plus za wizard. Pozwala od razu zacząć pracę nad treścią plug-in’a a nie skupiać się na technicznych detalach jak to wszystko do kupy poskładać
- dokumentacja w tym przypadku to koszmar. Zwykle nie narzekam na MSDN, ale w tym przypadku to co oferuje rozczarowuje (lekko mówiąc). Praktycznie zero przykładów użycia
- odpal Reflectora i podglądaj cudze przykłady. Inaczej z nauką będzie kiepsko
- kolory zdefiniowane dla VS przechowywane są w jakimś dziwnym formacie zamiast ARGB jest ABGR. Zwykłe Color.FromArgb nie zadziała tak jak się tego spodziewamy :(.
- aby dostać się do właściwości VS, użyj poniższego kodu. Pamiętaj, żeby usunąc spacje z nazwy (“Fonts and Colors” -> “FontsAndColors”):
_applicationObject.get_Properties(“FontsAndColors”, “TextEditor”)
- dodanie pozycji do menu kontekstowego to również nie lada wyczyn – należy dostać się do menu o nazwie Code Window – tym razem nazwa ze spacjami :/
var menuBarCommandBar =
((Microsoft.VisualStudio.CommandBars.CommandBars)_applicationObject.CommandBars);
Command viewCommand = commands.AddNamedCommand2(_addInInstance,
“CopyAsLaTeXAddIn”, “CopyAsLaTeXAddIn”,
“Executes the command for CopyAsLaTeXAddIn”, true, 0x13,
ref contextGUIDS,
(int)vsCommandStatus.vsCommandStatusSupported +
(int)vsCommandStatus.vsCommandStatusEnabled,
(int)vsCommandStyle.vsCommandStylePictAndText,
vsCommandControlType.vsCommandControlTypeButton);
viewCommand.AddControl(menuBarCommandBar[“Code Window”], 1);
- zero informacji o tym jaki ID jest skojarzony z jaką ikonką – trzeba błądzić po omacku 🙁
Jak tylko doprowadzę mój plugin do stanu akceptowalnego (ma działać w takim zakresie jak go potrzebuję – nie ma być to coś super, ale zostało mi jeszcze wymyślenie jak zrobić kolorowanie klas 🙁 ), opublikuję go – może komuś się przyda.
Founder of Octal Solutions a .NET software house.
Passionate dev, blogger, occasionally speaker, one of the leaders of Wroc.NET user group. Microsoft MVP. Podcaster – Ostrapila.pl