Bash Scripts for working with ActionScript 3 in TextMate
I have switched over to using TextMate for some of my experimentations with ActionScript. I like how lightweight it is, its extensibility, command completion functionality, and ease of setting up new projects. I find it is perfect for quickly testing new code and ideas.
I have put together a couple of bash scripts, which coupled with the ActionScript 3 and Flex TextMate bundles have made working in TextMate a little easier for me.
The first script is called autocompile
, which takes a class file, and compiles it anytime the file changes. This is really useful in TextMate as you can see any compile errors as you code.
autocompile
#!/bin/bash
# mxmlc autocompile bash script
# create by mike chambers
# http://www.mikechambers.com
#how often it check for changes in seconds
LOOP_INTERVAL=2
#make sure that a file name was passed in
if [ -z $1 ];then
echo "You must specify a file to compile"
exit 0
fi
#make sure that the file exists
if [ ! -e $1 ]; then
echo "$1 does not exist"
exit 0;
fi
#function to call mxmlc
function compile()
{
mxmlc $1
}
#compile on load
compile $1
#get and store the last modified date of the file
MODDATE=`stat -f %m $1`
#loop every 2 seconds
while [ true ]
do
#get the modified date
TDATE=`stat -f %m $1`
#check to see if it has changed
if [ "$TDATE" != "$MODDATE" ]; then
#file changed. Store new date
MODDATE=$TDATE
#compile
compile $1
fi
#sleep until we check file again
sleep $LOOP_INTERVAL
done
Using the script is easy, just pass in the name of the file you want it to compile:
autocompile Foo.as
The next script is called as
. Basically, it takes the name of an ActionScript class file, generates the file from a template, opens it within a new project in TextMate, and automatically compiles the file when it is changed. This makes it very simple to setup a new project and start coding.
#!/bin/bash
# script for creating and setting up ActionScript projects in
# TextMate
# create by mike chambers
# http://www.mikechambers.com
#make sure that a file name was passed in
if [ -z $1 ];then
echo "You must specify a Class file name"
exit 0
fi
#get the class name (remove .as)
classname=`echo $1 | cut -d'.' -f1`
#dir that contains the as.template file
#make sure to set this
#there should be a way to get this automatically
wdir="/Users/mesh/bin/astmp"
#write the contents of the template to the class file.
cat $wdir/as.template | sed s/CLASSNAME/$classname/ > $1
#open the current directory and file in textmate
mate .
#begin to autocompile it
autocompile $1
This requires that the following as.template file is in the directory referenced in the script (in the wdir
variable).
as.template
package
{
import flash.display.Sprite;
public class CLASSNAME extends Sprite
{
public function CLASSNAME()
{
}
}
}
In order to create the new project, create a new directory, cd
to it and run the as
command, passing in the name of the ActionScript class file you want it to create.
mkdir Foo
cd Foo
as Foo.as
This will create a new File.as file that contains the stub code for the Foo
class. It will then open the Foo.as file in a new project in TextMate, and will compile the class anytime it changes (printing any compile errors and warnings to the terminal).
Note that I could automate the directory creation also, although I decided not to do that right now.
Couple of notes:
- You must have the TextMate command line tools installed and in your path (TextMate > Help > Terminal Usage).
as
andautocompile
must be placed within your path.- You must update the
wdir
variable in the as script to point to the path where the as.template file is stored. - Make sure to set the
as
andautocompile
script to be executable : chmod 755 - The Flex SDK must be installed with the bin directory (that contains
mxmlc
) added to your path.
I also have the ActionScript 3 and Flex bundles installed within TextMate. I setup my mm.cfg so that it writes trace statements and warnings to the flashlog.txt file, and then I open that file in the Console so I can view runtime debug info (you can also just tail -f
the file in terminal). (You can open the console from the ActionScript 3 Bundle in TextMate : Bundles > ActionScript 3 > Debug > Open Flash Log in Console)
Finally, I modify the Run command for the file in TextMate to open the SWF in the standalone debug Flash player (which I have set to be the default handler for the swf file type). In order to do this, I just modified the ActionScript 3 Bundle Run command (CMD-R) to execute:
name=`echo $TM_FILEPATH | cut -d'.' -f1`
open $name.swf
So, now as I type, I can see the errors as I make them, and can just hit CMD-R to test the SWF and see the runtime debug info in the console.
One additional thing I might do is to modify the autocompile
script to play a sound when the compile fails.
Post any questions, suggestions or errors in the comments.