[Xcode] Custom text macros
Bon, étant donnée que l'info est bien planquée, voici un petit truc qui pourra vous intéresser. Les plus assidus d'entre vous auront remarqué l'existence d'un article "Insert Text Macro" dans le menu Edit. Si vous souhaitez vos macros "custom", procéder comme suit:
1. Créer le dossier suivant:
Pour XCode 2.x: [tt]~/Library/Application Support/Apple/Developer Tools/Specifications[/tt]
Pour XCode 3: [tt]~/Library/Application Support/Developer/3.0/Xcode/Specifications[/tt]
2. Créer dedans un fichier texte avec comme extension [tt]xctxtmacro[/tt]. Ce fichier texte doit être formaté à la manière d'un plist non-XML, dont voici un exemple:
[tt](
//
// Objective-C language additional macros (they also show up for Objective-C++)
//
{
Identifier = objccustom;
Name = "Custom Objective C";
IsMenu = YES;
DefaultSettings = {
PreExpressionsSpacing = " ";
InExpressionsSpacing = "";
BlockSeparator = " ";
PostBlockSeparator = "\n";
};
ComputerLanguages = ( "c.objc", "c.objcpp" );
},
{
Identifier = objc.br;
BasedOn = objccustom;
IsMenuItem = YES;
Name = "Brackets";
TextString = "[<#!receiver!#> <#message#>]<#end#>";
CompletionPrefix = "br";
},
{
Identifier = objc.enum;
BasedOn = objccustom;
IsMenuItem = YES;
Name = "Enumerator";
TextString = "NSEnumerator *e = [<#object#> objectEnumerator];\n<#Class#> <#obj#>;\nwhile ((<#obj#> = [e nextObject])) {\n<#!code!#>\n}\n";
CompletionPrefix = "objenum";
},
)[/tt]
Il s'agit en fait d'un tableau contenant différents éléments (des dictionnaires), qui peuvent être soit des menus soit des articles de menus (suivant la valeur de isMenu ou isMenuItem). Quelques infos sur les clés:
BasedOn: donne l'identifier du menu dans lequel doit se trouver l'article
CompletionPrefix: la valeur associée à cette clé est reconnue par le système d'autocomplétion. Dans l'exemple donné taper objenum permet donc d'avoir l'expression associée.
Si la textString contient un placeholder de type <#! !#> et qu'on appelle un macro depuis le menu (ou touche de raccourci), le placeholder est directement remplacé par le texte sélectionné.
3. Redémarrer Xcode.
Associé avec des touches de raccourcis (Xcode->Pref->Key Bindings) c'est redoutable.
1. Créer le dossier suivant:
Pour XCode 2.x: [tt]~/Library/Application Support/Apple/Developer Tools/Specifications[/tt]
Pour XCode 3: [tt]~/Library/Application Support/Developer/3.0/Xcode/Specifications[/tt]
2. Créer dedans un fichier texte avec comme extension [tt]xctxtmacro[/tt]. Ce fichier texte doit être formaté à la manière d'un plist non-XML, dont voici un exemple:
[tt](
//
// Objective-C language additional macros (they also show up for Objective-C++)
//
{
Identifier = objccustom;
Name = "Custom Objective C";
IsMenu = YES;
DefaultSettings = {
PreExpressionsSpacing = " ";
InExpressionsSpacing = "";
BlockSeparator = " ";
PostBlockSeparator = "\n";
};
ComputerLanguages = ( "c.objc", "c.objcpp" );
},
{
Identifier = objc.br;
BasedOn = objccustom;
IsMenuItem = YES;
Name = "Brackets";
TextString = "[<#!receiver!#> <#message#>]<#end#>";
CompletionPrefix = "br";
},
{
Identifier = objc.enum;
BasedOn = objccustom;
IsMenuItem = YES;
Name = "Enumerator";
TextString = "NSEnumerator *e = [<#object#> objectEnumerator];\n<#Class#> <#obj#>;\nwhile ((<#obj#> = [e nextObject])) {\n<#!code!#>\n}\n";
CompletionPrefix = "objenum";
},
)[/tt]
Il s'agit en fait d'un tableau contenant différents éléments (des dictionnaires), qui peuvent être soit des menus soit des articles de menus (suivant la valeur de isMenu ou isMenuItem). Quelques infos sur les clés:
BasedOn: donne l'identifier du menu dans lequel doit se trouver l'article
CompletionPrefix: la valeur associée à cette clé est reconnue par le système d'autocomplétion. Dans l'exemple donné taper objenum permet donc d'avoir l'expression associée.
Si la textString contient un placeholder de type <#! !#> et qu'on appelle un macro depuis le menu (ou touche de raccourci), le placeholder est directement remplacé par le texte sélectionné.
3. Redémarrer Xcode.
Associé avec des touches de raccourcis (Xcode->Pref->Key Bindings) c'est redoutable.
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Merci ! :adios!:
- un éditeur de macro: plus nécessaire d'éditer un plist à la main
- gestion plus complète des placeholders
ça se trouve ici:
http://www.obdev.at/products/completion-dictionary/index.html
ça ne vaut pas encore TextMate, mais c'est déjà une amélioration.
Enjoy!
Tu pourrais pas élaborer sur les avantages de TextMate (vu qu'il parait que il y en a)
Est ce que TextMate permet de naviguer dans le code à la Eclipse ?
Genre je suis dans un objet qui appelle la méthode d'un autre objet. Ctrl-clic sur cette méthode et hop, ca m'envoit dans le code de la dite méthode (et qui plus est, dans un nouvel onglet) ?
Non je n'ai rien trouvé de tel, hélas. Son autocomplétion n'est pas aussi bonne que celle de Xcode non plus (comme quoi la solution parfaite n'existe pas).
Dommage...
Tu peux toujours définir un éditeur externe pour les fichiers sources dans Xcode... Dans la mesure où Xcode vérifie que les fichiers du projet n'ont pas été édités par un éditeur externe, c'est relativement peu contraignant.
Sinon TextMate est capable de lire les projets Xcode, mais c'est assez limité (ne marche que pour les applications, et il ne sait pas ajouter et supprimer des fichiers) et lancer les compilations (+évidemment retrouver les erreurs dans les fichiers) + lancer l'appli.
J'ai tripoter un peu TextMate et ça me plait bien...
Renaud, tu parlais de définir un éditeur externe pour les fichiers source dans XCode.
En gros, je comprend que tu peux indiquer à XCode d'éditer les sources via un outils externe... Mais comment faire ça ?
J'ai regardé dans les préférences mais j'ai rien vu qui y ressemble...
a+
Salut,
Merci pour le tuyau, je m'y suis mis et c'est bien pratique.
Surtout pour les RPRelease
Je déterre ce vieux sujet car cela m'intéresserait de rajouter des text macros pour mon Xcode 3.1.2... Du coup j'ai creusé et j'avoue que j'ai eu un peu de mal...
En effet, le path a encore changé depuis... sauf que si on regarde dans la doc, il dit que le chemin où mettre ses xctxtmacros est dans [tt]~/Library/Application Support/Developer/Shared/Specifications[/tt]... alors qu'en réalité il faut le mettre dans [tt]~/Library/Application Support/Developer/Shared/Xcode/Specifications[/tt] !
Il faut donc bien le mettre ce dossier "Specifications" avec vos fichiers "xctxtmacro" dans le sous-dossier "Xcode" de "Shared" et non directement dans "Shared" comme dit dans la doc !
(J'ai perdu un max de temps à cause de cette erreur dans la doc, j'arrivais pas à m'en sortir et à afficher mes TextMacros... !)