jueves, 6 de diciembre de 2012

Tips para convertirse en un ZinjaI Master (parte 3)

Después de darles algunos tips para moverse fácilmente por el código, y para realizar algunas operaciones de edición básicas en un periquete, en esta tercera parte voy a comentarles sobre algunas otras funcionalidades afines que han quedado fuera de las dos primeras para no hacerlas tan largas, o porque no son tan triviales.

Por un lado están los autocódigos. Ya hablé de ellos en otro post, así que no voy a volver a explayarme. Si no saben lo que son, escriban "fori(N)" (reemplazando N por lo que quieran) y presionen la tecla Tab justo después de cerrar el paréntesis. Tengo que decir que agregarlos me llevó bastante tiempo porque no me ponía de acuerdo conmigo mismo acerca de cuál sería la forma menos intrusiva de invocarlos (problema cuya solución inspiró NetBeans si mal no recuerdo a través de un comentario de un usuario). Pero una vez implementados, resultaron mucho más útiles de lo que imaginaba, y ahora no vivo sin ellos. Pueden seguir el link que puse antes para ver cuales hay configurados por defecto y cómo definir nuevos con lo que ustedes quieran o necesiten.

Algo nuevo y que también me agilizó mucho el desarrollo, sobre todo en proyectos, es la opción "Implementar funciones/métodos faltantes" del menú herramientas. El atajo es Ctrl+Shift+H, y lo que hace es buscar qué métodos o funciones tienen su prototipo declarado en algún .h, pero no tienen su implementación en ningún lado, para luego agregar esas implementaciones automáticamente. Supongamos que tenemos una clase con su .h y su .cpp, y tenemos que agregar unos cuantos métodos. Pues bien, vamos al .h y agregamos todos los prototipos, luegos vamos al .cpp (con la tecla F12), y al presionar Ctrl+Shift+H ZinjaI mostrará una ventana con la lista de métodos declarados pero sin implementar aún. Al hacer click en aceptar, agregará automáticamente todas las implementaciones en blanco para esos métodos al final del archivo (tarea tediosa y repetitiva de hacer manualmente). En la última versión de ZinjaI hice algunos cambios en el parser para que ya no confunda las macros como el DECLARE_EVENT_TABLE de wxWidgets con métodos, pero aún existe una limitación en relación a las clases anidadas (clases definidas dentro de otras clases, cosa que el parser que uso no me informa), en cuyo caso puede que la lista de métodos faltante sugerida no sea 100% correcta.


Para los pocos que tienen la (generalmente mala) costumbre de abusar del preprocesador (cosa que he estado haciendo últimamente), hay un par de atajos relativamente nuevos para ayudarnos a lidiar con eso. Estos son Ctrl+Alt+M y Ctrl+Shift+M. En ambos casos, ZinjaI guarda el código del archivo en que estén trabajando y lo manda a preprocesar (esto es la primer parte de la compilación) y utiliza el resultado para dos cosas. Con Ctrl+Alt+M determina cuales lineas serán compiladas y cuales no (de acuerdo a los #if), y tacha estas últimas. Entonces así podemos ver rápidamente el código que efectivamente se compila para una dada configuración del proyecto y arquitectura. Con Ctrl+Shift+M muestra, a modo de calltip, la linea que realmente se generará y compilará a partir de la línea actual, expandiendo las macros de preprocesador y reemplazando las constantes. Esto es muy útil cuando no recordamos detalles sobre una macro, cuando queremos verificar si su invocación resulta en lo que esperabamos, o cuando, peor aún, nos surge un error de compilación dentro de una de ellas (estos errores son particularmente engorrosos). Además, si presionamos esta combinación en un línea que contiene un #include nos dirá exactamente qué archivo se incluirá (la ruta completa según las opciones de compilación actuales).

 Se muestran tachadas las lineas que no se compilan debido a los #if..., y en amarillo la
instrucción que realmente se compila al reemplazar la llamada a la macro _lock_elements_list de la linea 989

Otra novedad en la última versión de ZinjaI es la posibilidad de crear más fácilmente nuevas plantillas. Hay un ítem "Guardar como nueva plantilla..." en el menú "Herramientas". Si lo que tenemos abierto en el momento es un programa simple, crea una plantilla de programa simple, mientras que si es un proyecto, crea un proyecto. En cualquier caso la plantilla guardará el/los fuentes, la ubicación del cursor, las opciones de compilación, etc. Estas plantillas van a parar a la carpeta $HOME/.zinjai/templates en GNU/Linux, y $HOME/zinjai/templates en Windows (donde $HOME será usualmente la carpeta del usuario en Users o Documents And Settings según la versión de Windows). Estando allí, las plantillas están disponibles solo para ese usuario. Si las movemos a la carpeta templates de la instalación de ZinjaI (cosa que tal vez requiera permisos de administrador) pasarán a estar disponibles para todos los usuarios.

Las plantillas de proyecto sirven para crear proyectos, y las de programas simples para crear programas simple, obviamente. Pero las plantillas de programas simples también sirven para configurar otros programas simples. Supongamos que creamos un programa simple (un cpp sin proyecto) con la plantilla de OpenGL. En esta caso, gracias a la plantilla, ZinjaI configurará las opciones de compilación necesarias para las bibliotecas relacionadas a OpenGL y sus dependencias. Pero cuando guardemos el programa, por no tener un archivo de proyecto (solo se guarda el fuente de un progama simple), esta configuración se pierde. Cuando lo abranos nuevamente, no podremos recompilarlo sin esta configuración. Pero si tenemos la plantilla, podemos ir a las opciones de compilación (ítem "Opciones..." del menú "Ejecución"), hacer click en el botón de los tres puntos que está junto al campo "Parametros extra para el compilador" y buscar al final del menú que aperece la opción "Copiar de plantilla" para poder configurar la compilación del programa simple que acabamos de abrir igual que la de alguna de las plantillas en dos clicks. Respecto a los proyectos, en versiones futuras de ZinjaI tendremos la posibilidad de hacer algo similar. Para agregar en un proyecto ya creado configuraciones de otras plantillas, verán un botón en la pestaña Bibliotecas de las opciones de compilación del proyecto, pero esto aún no está disponible.

Copia de los argumentos de compilación de una plantilla a un programa abierto.

Finalmente, un atajo que olvidé mencionar en los posts anteriores, y que está presente en la mayoría de los IDEs es Ctrl+Espacio. Este atajo invoca al menú de autocompletado, ese menú que aparece luego de ingresar la tercer letra de una palabra, o al ingresar el . o el > de la flecha para referenciar a un método o atributo de un objeto. Y en este caso también funciona para mostrar el calltip, ese cartelito emergente amarillo con los prototipos de las funciones/métodos que aparece luego de abrir un paréntesis o ingresar una coma en una lista de argumentos.

Espero que estén aprovechando estos tips y acostumbrándose a estos atajos. Pueden tener una lista bastante completa de atajos para imprimir y/o utilizar como referencia si buscan "atajos" en la ayuda de ZinjaI. En la cuarta parte, voy a comentar algunos aspectos configurables del IDE, para que puedan adaptar su comportamiento a lo que les resulte más cómodo o útil.

Este post es continuación de  Tips para convertirse en un ZinjaI Master (parte 2) y sigue en Tips para convertirse en un ZinjaI Master (parte 4)

1 comentario: