[Xcode] Custom text macros

décembre 2007 modifié dans Objective-C, Swift, C, C++ #1
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.

Réponses

  • LeChatNoirLeChatNoir Membre, Modérateur
    21:00 modifié #2
    ouahou, un peu fastidieux à  mettre en place mais ça a l'air trop pratique !

    Merci !  :adios!:
  • décembre 2006 modifié #3
    Je remonte ce sujet car j'ai découvert que Objective-Development (à  qui l'ont doit l'excellentissime Launchbar) a fait un plugin Xcode pour améliorer les text macros. Parmi les améliorations il y a notamment:
    - 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!
  • elfelf Membre
    21:00 modifié #4
    J'vois pas ce que tout le monde lui trouve de si génial à  TextMate. J'ai essaye, ce n'est qu'un bon éditeur de texte bien solide mais c'est rien de révolutionnaire...

    Tu pourrais pas élaborer sur les avantages de TextMate (vu qu'il parait que il y en a)
  • 21:00 modifié #5
    Juge par toi même: http://macromates.com/screencasts (regarde en particulier ceux sur l'obj-c).
  • elfelf Membre
    21:00 modifié #6
    Hm, ça l'air pas mal avec ces "snippets" mais bon, c'est pas dans XCode. Dommage, il aurrais du remplacer l'éditeur XCode par le sien avec un plugin et ça aurrais été parfait...
  • LeChatNoirLeChatNoir Membre, Modérateur
    21:00 modifié #7
    Juste une question (je n'ai pas trouvé la réponse sur le site) :
    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) ?
  • 21:00 modifié #8
    Tu veux parler du cmd-click de Xcode?

    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).
  • LeChatNoirLeChatNoir Membre, Modérateur
    21:00 modifié #9
    oui, le cmd-clic de xCode.
    Dommage...
  • décembre 2006 modifié #10
    dans 1165827527:

    Hm, ça l'air pas mal avec ces "snippets" mais bon, c'est pas dans XCode. Dommage, il aurrais du remplacer l'éditeur XCode par le sien avec un plugin et ça aurrais été parfait...


    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.
  • LeChatNoirLeChatNoir Membre, Modérateur
    21:00 modifié #11
    Salut,
    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+
  • 21:00 modifié #12
    Preferences->File Types->files->text et tu changes pour "source code".
  • LeChatNoirLeChatNoir Membre, Modérateur
    21:00 modifié #13
    dans 1165661959:

    Je remonte ce sujet car j'ai découvert que Objective-Development (à  qui l'ont doit l'excellentissime Launchbar) a fait un plugin Xcode pour améliorer les text macros. Parmi les améliorations il y a notamment:
    - 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!


    Salut,
    Merci pour le tuyau, je m'y suis mis et c'est bien pratique.
    Surtout pour les RPRelease  ;)
  • décembre 2007 modifié #14
    Déterrage pour cause de mise à  jour pour Leopard. Pas vraiment de changement par rapport à  ce qui a été dit, sauf un gros: le dossier où il faut mettre les specifications perso, maintenant c'est dans [tt]~/Library/Application Support/Developer/3.0/Xcode/Specifications[/tt] (texte principal mis à  jour)
  • AliGatorAliGator Membre, Modérateur
    février 2009 modifié #15
    Bonjour à  tous

    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... !)
Connectez-vous ou Inscrivez-vous pour répondre.