Hace tiempo que quería crear una extensión simple para manipular texto en Visual Studio, y ahora finalmente he encontrado algo de tiempo para analizar cómo se escriben las extensiones. Lo que tengo en mente podría lograrse a través de las macros de VBA, pero preferiría implementarlo como una extensión "real"; como un proceso de aprendizaje, y porque honestamente no soporto VBA.Creando una extensión simple de Visual Studio 2010 para manipular texto
Después de una buena cantidad de googlear, leer blogs, profundizar en MSDN y buscar publicaciones de StackOverflow, creo que he reunido suficiente información para poder implementarla, pero me gustaría saber si me estoy acercando a las cosas justo antes de empezar a cortar lejos :)
Lo que me gustaría es:
- comandos que los usuarios pueden unirse a través de teclas de acceso rápido a Herramientas-> Opciones-> Teclado Registro.
- Modifique el búfer de texto de la ventana activa cuando se invocan Comandos.
- que realmente no se preocupan por los menús o barras de herramientas, pero saben cómo agregarlo a través de archivos .vsct (hay mejores opciones?)
Para # 1, parece que tengo que hacer un VSPackage completa , archivo .vsct, etcétera. En su lugar, no hay un punto de extensión MEF agradable y fácil de manejar. (Tal vez exportar un IWpfTextViewCreationListener
y juguetear con el manejo manual de atajos de teclado, pero eso sería un gran truco).
Para el n. ° 2, no estoy seguro de cómo obtener un ITextBuffer
para el documento activo. Podría ir a través de DTE.ActiveDocument
, pero no estoy seguro de cómo obtener un ITextBuffer
de eso. Alternativamente, podría hacer algo en la línea de ...
var txtMgr = (IVsTextManager)ServiceProvider.GetService(typeof(SVsTextManager));
IVsTextView textViewCurrent;
txtMgr.GetActiveView(true, null, out textView);
IWpfTextView wpfViewCurrent = AdaptersFactory.GetWpfTextView(textView);
ITextBuffer textCurrent = wpfViewCurrent.TextBuffer;
... pero que seguro se ve como una forma indirecta de hacer las cosas?
Gracias! Hay algo acerca de agregar un filtro a cada VsTextView que me molesta un poco, pero la solución * es * definitivamente mejor.Lástima que uno tenga que lidiar con el feo legado de com/ole, pero al menos es mínimo y puede abstraerse :) – snemarch