Better (AS3) imports in TextMate

1/12/2008
Summary: In which Martin has concocted a hack to make importing packages in TextMate a wee bit easier.

TextMate TextMate TextMate. I might as well make this a pure TextMate blog soon, but I can’t help it. My love for this app is overwhelming.

I spend a lot of my time writing ActionScript, and one thing I’ve always envied users of Flex Builder (Which I avoid if I can) and FlashDevelop (which isn’t available on the Mac) is the auto-importing of classes, I.E. when you type

1
var s:Sprite;

the IDE checks whether that class is already imported, and if not imports it.

Now, what I’ve managed to do still isn’t even close to that functionality and let me say right away that the meat of this trick is the excellent work by the creator of the ActionScript 3 bundle for TextMate; Simon Gregory et al.

Simon has in his bundle included a ‘Auto complete imports’ command which searches both the packages in your project and the packages included from Adobe (flash.*) which makes it easy to get completion for any class you’d want to import.

Like so:

  • You want to import the
    1
    flash.net.URLLoaderDataFormat;

    class, which is a long-ass line to type out.

  • Instead you type ‘URL’ and trigger the auto-complete command. You’ll get a drop-down with all classes starting with “URL” and then choose the proper one.
  • 1
    import flash.net.URLLoaderDataFormat;

    is typed out for you. Yay!

However, now you have to copy that text, move on up to your import statements, paste it and then find your way back to where you were.

Boy do I wish I knew Ruby well enough to actually just augment that command to make it obey my wishes, but alas; My ruby-Fu is weak and so I turned to the weapon of the feeble TextMate hacker; Macros.

Basically the workflow now is:

  • Perform the steps as mentioned above to get the completion for your import. However; This time the output would be
    1
    import flash.net.URLLoaderDataFormat; move

    . The ‘move’ at the end there will work as a tab trigger for the macro, so the next step is to press tab, and then (hopefully) the import statement is moved up to it’s brethren, and you end up back where you were. Here’s how it works.

  • When you press tab you trigger the macro which will perform the following steps:
  • Select the line with the import and cut it.
  • Enter the word ‘asdf’ in place of the import statement.
  • Search for the last occurrence of the word ‘import’ in the document.
  • Move to the line below said last import.
  • Paste the import statement from the clipboard and indent it properly.
  • Search for ‘asdf’ in the document and delete it, leaving the caret at the position it was when you launched the macro.

Like I said; It’s more of a hack than anything else and if someone comes up with a proper solution please let me know. The main weaknesses here are:

  • You can’t just hit the combo in the process of typing out a statement. If you trigger the auto completion at the word ‘Sprite’ in
    1
    var s:Sprite = new Sprite();

    The line

    1
    import flash.display.Sprite;

    will end up in the middle of the statement. Likewise if you trigger the combo on the same line as any other code, that code will end up with the imports. The command must be triggered on a line of it’s own.

  • Dependencies: If you want to change the tab trigger to something else than ‘move’ you’ll have to change the output from the auto-complete as well.
  • Not really all that elegant. Having to do two actions (even though one is just pressing tab) seems a hassle.

With all that out of the way: Grab it if you want it!
Zip here.
Please note: I didn’t really want to distribute a modified version of Simons work, so if you want to output the ‘move’ keyword for the tab trigger you need to go into the ‘Auto Complete Imports’ command of the ActionScript 3 bundle in the Bundle Editor and make a miniscule edit at the bottom of the code.

1
2
3
4
5
6
7
8
#Change
else
  print "import " + choice + ";"
end
#to
else
  print "import " + choice + "; move"
end

That’s all folks.

2 Comments

TextMate theme-switcher script

10/09/2008
Summary: In which Martin ponders solutions on how to quickly switch themes in TextMate and comes up with a half-assed AppleScript / TM Command solution. Jump to the half-assed solution.

Edit: As these things usually go I had a bit of a revelation just minutes after posting this post. Completely by accident I typed the keystroke ⇧-⌃-⌥-T, which of course is mapped to the “Select Theme” – command in the Experimental Bundle and which I had completely and utterly purged from my mind. I’m pretty sure you want to use that solution rather than the one I outline in this post, but I’ll keep this around for posterity’s sake anyway. Original post follows.


I’m about to start teaching a 5 week class in ActionScript 3 and if there’s any possible way to avoid it, I won’t spend much time in the IDE code editor, because frankly; It sucks. So in order to make the differences between what the students will see on the screen (You guessed it. TextMate.) and what they’ll be working in themselves, at least initially, I played around with one of the themes in TextMate to make it look more like the Flash IDE editor.

From my beloved Twilight theme:
Tm Theme Twilight

To this IDE clone based on IDLE:
Tm Theme Idle

So since I’ll keep using my main theme for all my professional work I wanted a fast way of switching between the two themes (I’ll do a lot of work to save myself from dealing with a drop down menu). A bit of googling (actually a fair bit of googling) turned up this gem from a spanish speaking TextMate google group. Now, before you even start; Yes I feel slightly dirty about GUI-scripting as well. Making a script that simulates clicks rather than one that just tells the OS to perform whatever task associated with said click just feels wrong. But since not even a journeyman when it comes to the arcane arts of programming TextMate I’m just going to bite the bullet until someone (you?) comes up with a better solution.

Read the rest of this article »

1 Comment

? Quickie

29/07/2008

Yes… I’m mainly testing out the design of my new Quickies-category, but them links up there are mighty useful nonetheless.

No Comments

TextMate + QuickSilver = Drag & Drop ActionScript imports.

18/06/2008

I couldn’t possibly code in anything but TextMate. Hell, I even blog from TextMate. And since I’m lazy by nature I wanted a better way to import classes from my class library. The TextMate ActionScript 3 Bundle Simon Gregory offers a nice auto complete functionality that lets you define a list of classes to choose from on triggering.

While this is indeed very nice, the solution is really only suited for your most frequently used classes as putting your entire class library in the list would render it unusable. So something else was needed.

Read the rest of this article »

2 Comments