Jan 4th 2010

TextMate Sync

I’ve been meaning to write a post about my development process, having several drafts on my computer at varying points over the past year. A combination of my procrastinating and my periodical changes to my development process has delayed the cataloguing of my experiences on the matter. I’ve finally settled on a system I can call my own, and I will have to tell the process in multiple parts as there’s quite a bit of backstory to tell first which discusses the evolution of my development procedure. This first part will be about my testing process — explicitly what I use to test my server-side programming.

Shortly after finishing the previous weblog code update and unveiling my portfolio I decided it was about time to change the way I was working as it was neither working for me nor did it provide me with any sort of security blanket in case something went wrong or mistakes were made on my part. Long ago I discovered I preferred to work using an actual server rather than setting Apache and the other required programs and libraries up on my main computer. I’ve toyed a bit with using virtual machines for it, but I never was successful in creating a complete server environment mostly because I never had the time to sit down and create it. In any case I would require a painless method of getting files to the local virtual server just like I require such for a remote one so in the end what I would require to handle the job should be able to handle both situations if and when I switch to using local testgrounds.


I finally discovered I needed to determine a different way of web programming when one of the primary programs I was using in my development process refused to work properly and its developers refused to acknowledge any problems with it despite considerable evidence to the contrary.

The program was ExpanDrive. It’s a program which allowed for mounting of SFTP as if the remote filesystem is local. FUSE isn’t anything new, but the first version of ExpanDrive worked exceptionally well. The second, however, did not. It is slow, buggy, and freeze-prone. Back when 2.0 was released numerous reports were being posted on ExpanDrive’s Get Satisfaction support page about general lethargicness the program was exhibiting. I was one of them. It became apparent quickly that the developers didn’t seem to give a shit about remedying the application’s ailments, so I quickly came to the conclusion I didn’t give a shit about purchasing the new version or using the previous one for that matter. ExpanDrive took it a step too far when they — in an attempt to camouflage their incompetence — decided to switch to a one-on-one email system as a replacement for their Get Satisfaction support page which clearly showed public dissatisfaction with their product. That plan backfired when users felt as if they were being treated as liars and became riotous. I didn’t become so, but I did literally tell them to go fuck themselves via email shortly before closing the program for the last time and throwing it in the trash despite the fact I hadn’t yet found a suitable replacement.

I desired a better method of getting local files to a remote server. There’s MacFusion for doing the same thing ExpanDrive did, but at that point I was disillusioned with the entire mounting remote filesystems process — at least for this particular task.


TextMate is one of the best programs I’ve had the privilege to use. It’s extremely powerful as a development environment especially since it can be extended using shell commands, essentially allowing for extensions using any programming language which can be accessed using a CLI.

A text editor has very little to do with file transfers, and for the longest I never considered extending TextMate to handle transferring files. I looked everywhere; nothing was transparent enough. My eventual solution involved extending TextMate using rsync. It’s fast, reliable, and free — everything ExpanDrive wasn’t.

I typically work in TextMate using folders. Dragging or opening a folder in TextMate has it treat the folder as a project. In doing so it’s possible to rsync individual files or the entire project to a remote server using SSH. It’d require public-key cryptography or a hacked ssh-askpass to make the process truly effortless, but both are elementary.

Screenshot of TextMate’s Bundle Editor with TextMate Sync Highlighted

The TextMate bundle I authored allows for the user to synchronize a single file or the entire project along with a configuration command which places a hidden .tmsyncconfig file in the folder so it’s not seen. When told to sync a file or folder that config file is checked for the settings. I personally bound these commands all to the same key combination ⌃⇧D. TextMate handles that situation with displaying a menu beside the mouse cursor.

Screenshot of Using TextMate Sync


I’ve provided this for download. I’m not going to support it, and I’m not going to take any responsibility for any damages it causes as rsync can be dangerous. The compressed archive contains a license which allows the user to do whatever he/she wishes to do with it as long as attribution and a copy of the license is provided with it. This software requires both a Macintosh capable of running TextMate and running it to function.

TextMate Sync (2.3 KB) — After unarchiving double-click on the TextMate Sync.tmbundle file to install.