Custom Live Templates voor Delphi 2006
Wie al met Delphi 2006 heeft gewerkt, of demonstraties heeft gezien, zal het niet ontgaan zijn dat de code editor is uitgebreid met een feature genaamd Live Templates. In dit artikel zal ik laten zien hoe we zelf Live Templates kunnen maken voor Delphi 2006, en hoe we ze vervolgens kunnen gebruiken.
Live Templates zitten in een XML bestand. Als je een nieuw Live Template wilt maken, kun je File | New | Other doen, en dan kiezen voor de Code Template in de Other Files category:

Het resultaat is een template1.xml bestand, met de volgende inhoud:
xmlns="http://schemas.borland.com/Delphi/2005/codetemplates"
version="1.0.0">
De cursor staat midden tussen de twee dubbele quotes voor de name. Hier moet je de naam voor je code template invullen. Maar je kunt niet zomaar alles invullen wat je wilt, want deze naam is meteen de tekst die je straks in de IDE moet intikken om het live template te activeren. Een korte pakkende naam als “log” is hierbij handiger dan een naam als “loganothermessageinlogfile”. Als eerste voorbeeld wil ik hier “md” intikken, omdat ik een MessageDlg template wil maken.
Na de naam, zou je ook de invoke method een andere waarde kunnen geven. Deze staat default op “manual”, maar kan ook op “auto” of “none” gezet worden. Als je invoke op “auto” zet, dan is een spatie na de naam van het live template genoeg om hem te activeren. Als je invoke op “manual” laat staan, dan moet je een Tab of Ctrl+J intikken om het live template te activeren. Als je invoke op “none” zet kun je alleen Ctrl+J of Ctrl+Space gebruiken in de code editor om het live template te activeren.
Deze kennis kun je trouwens ook gebruiken om bestaande code templates aan te passen. Het for template bijvoorbeeld vind ik persoonlijk erg irritant, en ik heb zelf inmiddels invoke=”auto” op invoke=”manual” gezet.
Optioneel kun je de ruimte tussen de description en author tags invullen, met nadere informatie over wat je live template doet, wie de auteur was, etc. Het belangrijkste onderdeel is echter het stuk voor de code tags. Binnen de code tag vinden we allereerst het language attribuut. Hier kun je de taal opgeven, zoals Delphi, CSharp, C, etc. Voor ons voorbeeld kies ik hier voor “Delphi”.
De code zelf moeten we niet tussen de code tags zetten, maar binnen de binnenste [] haken van de CDATA. Voor ons “MessageDlg” voorbeeld ziet dat er inmiddels als volgt uit:
MessageDlg live template
Bob Swart
Het | teken dat tussen de quotes van de MessageDlg staat geeft aan waar de cursor komt nadat het template is geactiveerd. Hier kun je dus meteen het bericht intikken dat je wilt laten zien.
Live Template Points
Soms heb je meer dan één punt om in te vullen, en actieve Live Templates kunnen dan met behulp van de Tab toets van punt naar punt springen. Om dergelijke punten aan te geven moeten we vóór de code tags eerst voor ieder punt een “point” tag opnemen, met daarin als attribuut de naam van het point, en optioneel een text en hint. De inhoud van de text verschijnt als default text in het template, terwijl de hint vertoond wordt om aan te geven wat de bedoeling is.
Als we in het bestaande voorbeeld zowel de Message als de MessageType en de MessageButtons als een “point” willen aangeven (en erdoorheen willen tabben), dan kunnen we dat als volgt aangeven:
MessageDlg live template
Bob Swart
Hello
Message
mtInformation
Message Type
mbOK
Message Buttons
Let ook op de |end| die aan het eind van het live template staat, en aangeeft waar de cursor moet komen nadat het template gedeactiveerd is.
Deployment
Als je eenmaal een nieuw Live Template hebt beschreven in een XML bestand zoals we dat zojuist hebben gedaan, dan kun je dat bewaren, waarbij het default in de C:\Document and Settings\\Local Settings\Application Data\Borland\BDS\4.0\code_templates directory komt. Dat is niet een fijne plek vind ik zelf, dus kopieer ik het meestal naar de plek waar de reeds bestaande Live Templates staan, namelijk in de C:\Program Files\Borland\BDS\4.0\Objrepos\code_templates directory, waarbinnen al subdirectories voor C, CSharp, Delphi en XML te vinden zijn. Mijn voorbeeld heb ik als md.xml in de BDS\4.0\Objrepos\code_templates\delphi directory bewaard.
Demo
Als je dan uiteindelijk in de code editor de tekst “md” intikt gevolgd door een spatie, dan wordt het “md” Live Template geactiveerd en krijg je het volgende effect:

We kunnen nu de message invullen, en met Tab of Shift+Tab navigeren van de Message naar de MessageType en de MessageButtons. Na een laatste Tab of een Escape wordt het Live Template weer gedeactiveerd, en staan we aan het eind van de gegenereerde code, precies als we met het |end| attribuut aangaven.
References
Voor meer informatie en extra voorbeelden, zie de volgende weblog posts.