martes, 22 de febrero de 2011

Text macros en XCode

Acabo de "descubrir" una funcionalidad de XCode que no sabía que existía: text macros.

En realidad es algo que sí sabía que estaba, porque muchas veces cuando uno empieza a escribir algo, le aparece código automáticamente para completar.

Por ejemplo, si uno escribe "if", aparece
if (<#condition#>) {
    <#statements#>
}
y apretando Enter o Space se agrega el código permitiendo completar las cosas que faltan.

Lo que no sabía, es que podía definir mis propios macros y como usarlos...

Hay una explicación muy completa de como hacerlo en esta nota, pero a mi me gusta más editarlo en modo texto que usando el editor de propiedades, así que acá va como lo hice yo...

En una ventana del Terminal.app:
cd /Developer/Applications/Xcode.app/Contents
cd PlugIns/TextMacros.xctxtmacro/Contents/Resources
edit ObjectiveC.xctxtmacro
donde "edit" se puede cambiar por cualquier editor de texto de su agrado (en mi caso en particular abre TextWrangler).

Ir al final del archivo, y agregar lo siguiente:
{
    Identifier = objc.singleton;
    BasedOn = objc;
    IsMenuItem = NO;
    Name = "Singleton Pattern";
    TextString = "#pragma mark -\n#pragma mark Singleton pattern\nstatic <#class#> *instance = nil;\n+ (<#class#> *) shared {\n @synchronized(self)\n {\n if (instance == nil) {\n instance = [[self alloc] init];\n }\n }\n return instance;\n}";
    CompletionPrefix = singleton;
    OnlyAtBOL = YES;
},
Esto agrega un nuevo text macro, que se activa escribiendo "singleton" seguido de Ctrl-. o de la tecla Escape, y que se expande a
#pragma mark -
#pragma mark Singleton pattern
static <#class#> *instance = nil;
+ (<#class#> *) shared {
    @synchronized(self)
    {
        if (instance == nil) {
            instance = [[self alloc] init];
        }
    }
    return instance;
}

Una explicación de los campos que se deben configurar en el archivo xctxtmacro:
  • Identifier: el identificador del macro
  • BasedOn: por lo que vi, vale siempre "objc"
  • IsMenuItem: si debe aparecer en el menú Edit -> Insert Text Macro en XCode
  • Name: nombre del macro
  • TextString: el texto que se va a expandir cuando se ejecute el macro, se pueden agregar "placeholders" encerrándolos entre <# y #>
  • CompletionPrefix: el texto que se tiene que digitar para que se dispar el macro
  • OnlyAtBOL: si solo es válido en una linea vacía o no (BOL = begin of line)

Eso es todo. Una vez agregados los nuevos macros, hay que reiniciar XCode y ya quedan disponibles.

No hay comentarios.:

Publicar un comentario